Автор Тема: Динамические (открытые) массивы в Оберонах.  (Прочитано 21853 раз)

DIzer

  • Гость
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #15 : Март 31, 2011, 09:03:25 am »
Всё, расклинило мозги.  :D
Без проблем -щас "расклиним" -окончательно  :D если вы этого хотите (а не просто побздеть). Оригинально, открытые массивы были предназначены для того, чтобы передавать в одну и тy же процедуру массивы обьявленные.
как (например)
VAR a:ARRAY 10 OF INTEGER;  b:ARRAY 11 OF INTEGER;
 т.е у этих массивов (переменные a и b) , тип один (INTEGER) , а размер (количество элементов различается 10 и 11 cоответственно).
« Последнее редактирование: Март 31, 2011, 09:10:38 am от DIzer »

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #16 : Март 31, 2011, 09:37:54 am »
Всё, расклинило мозги.  :D
Без проблем -щас "расклиним" -окончательно  :D если вы этого хотите (а не просто побздеть). Оригинально, открытые массивы были предназначены для того, чтобы передавать в одну и тy же процедуру массивы обьявленные.
как (например)
VAR a:ARRAY 10 OF INTEGER;  b:ARRAY 11 OF INTEGER;
 т.е у этих массивов (переменные a и b) , тип один (INTEGER) , а размер (количество элементов различается 10 и 11 cоответственно).

Переводя на ООПшный язык, открытый массив типа INTEGER является базовым классом для всех массивов INTEGER вне зависимости от их реальной длины.

То есть имеем таки иерархию.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #17 : Март 31, 2011, 09:51:42 am »
Всё, расклинило мозги.  :D
Без проблем -щас "расклиним" -окончательно  :D если вы этого хотите (а не просто побздеть). Оригинально, открытые массивы были предназначены для того, чтобы передавать в одну и тy же процедуру массивы обьявленные.
как (например)
VAR a:ARRAY 10 OF INTEGER;  b:ARRAY 11 OF INTEGER;
 т.е у этих массивов (переменные a и b) , тип один (INTEGER) , а размер (количество элементов различается 10 и 11 cоответственно).

Переводя на ООПшный язык, открытый массив типа INTEGER является базовым классом для всех массивов INTEGER вне зависимости от их реальной длины.

То есть имеем таки иерархию.
Не совсем так , дело в том, что не  существует переменной типа- "открытый массив" - это всего лишь соглашение об интерпретации конкретного массива (точнее конкретного "экземпляра") "запуляемого" в подпрограмму.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #18 : Март 31, 2011, 10:38:12 am »
Не совсем так , дело в том, что не  существует переменной типа- "открытый массив" - это всего лишь соглашение об интерпретации конкретного массива (точнее конкретного "экземпляра") "запуляемого" в подпрограмму.
Это интерфейс, абстрактный класс. Назвать можно как угодно. Интерфейс суть частный случай класса.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #19 : Март 31, 2011, 10:52:17 am »
Не совсем так , дело в том, что не  существует переменной типа- "открытый массив" - это всего лишь соглашение об интерпретации конкретного массива (точнее конкретного "экземпляра") "запуляемого" в подпрограмму.
Это интерфейс, абстрактный класс. Назвать можно как угодно. Интерфейс суть частный случай класса.
Тоже не то, здесь речь идет об интерпретации (специальной) формы  вызова а не о форме самой- в классическом определении интерфейса  речь идет именно о количестве  переменных и их типах (которые  вместе образуют форму)  -интерфейс являющийся общим для подпрограмм , реализующих разные (в общем случае) алгоритмы.

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #20 : Март 31, 2011, 11:13:06 am »
Переводя на ООПшный язык, открытый массив типа INTEGER является базовым классом для всех массивов INTEGER вне зависимости от их реальной длины.
Не совсем так , дело в том, что не  существует переменной типа- "открытый массив" - это всего лишь соглашение об интерпретации конкретного массива (точнее конкретного "экземпляра") "запуляемого" в подпрограмму.

И ещё одна формулировочка:
Открытый массив - это массив, задание длин размерностей которого откладывается до момента создания массива.

DIzer

  • Гость
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #21 : Март 31, 2011, 11:17:50 am »
Переводя на ООПшный язык, открытый массив типа INTEGER является базовым классом для всех массивов INTEGER вне зависимости от их реальной длины.
Не совсем так , дело в том, что не  существует переменной типа- "открытый массив" - это всего лишь соглашение об интерпретации конкретного массива (точнее конкретного "экземпляра") "запуляемого" в подпрограмму.

И ещё одна формулировочка:
Открытый массив - это массив, задание длин размерностей которого откладывается до момента создания массива.
Не проходит, в примере который я привел выше  - количество элементов вполне определено, более того эти переменные (массивы) существуют на момент выполнения первой инструкции программы.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #22 : Март 31, 2011, 12:18:57 pm »
Гм. Чем же вот это:

VAR a:ARRAY 10 OF INTEGER;  b:ARRAY 11 OF INTEGER;

PROCEDURE Proc (c : ARRAY OF INTEGER);

Proc(a);
Proc(b);

Принципиально отличается от этого:

template <typename T>
struct IArray {
    virtual T at(size_t n) = 0;
    virtual size_t size() = 0;
};

template <typename T, int s>
struct Array : IArray<T> {
    T _arr[s];
    T at(size_t n) {return arr[n];}
    size_t size() {return s;}
};

Array<int, 10> a; Array<int, 11> b;

void Proc(IArray<int> c);
Proc(a);
Proc(b);
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #23 : Март 31, 2011, 12:31:32 pm »
Гм. Чем же вот это:

VAR a:ARRAY 10 OF INTEGER;  b:ARRAY 11 OF INTEGER;

PROCEDURE Proc (c : ARRAY OF INTEGER);

Proc(a);
Proc(b);


Как минимум тем, что 1 вариант свободен от всяких "намеков" на возможную реализацию, и является сущностью фундаментальной (т.е., например, в паскале в те времена это была не конструкция не воспроизводимая с помощью других (конструкций ЯП) -т.е. не являлась просто языковым сахаром).Во втором варианте вы моделируете эту сущность с помощью другого понятия (шаблон).

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #24 : Март 31, 2011, 12:36:49 pm »
Как минимум тем, что 1 вариант свободен от всяких "намеков" на возможную реализацию, и является сущностью фундаментальной (т.е., например, в паскале в те времена это была не конструкция не воспроизводимая с помощью других (конструкций ЯП) -т.е. не являлась просто языковым сахаром).Во втором варианте вы моделируете эту сущность с помощью другого понятия (шаблон).
То есть различие только в том, что в первом случае эти конструкции вшиты в синтаксис языка. Это минимальное и не интересное отличие. Ну например хотя бы из за того, что вся стандартная библиотека плюсов, по стандарту языка, может быть вшита в компилятор (то есть отдельных файликов iostream, string и так далее может в природе вообще не существовать). Так что и этот Array точно также может быть туда вшит.

Гм. Пример: dynamic_cast<A>(b); -- явно шаблонная плюсовая функция, однако её объявления и определения в заголовочных файлах не найти. Она вшита, согласно стандарту, в компилятор.

В любом случае, это отличие в реализации сущности, а не в её сути.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #25 : Март 31, 2011, 12:44:42 pm »
Как минимум тем, что 1 вариант свободен от всяких "намеков" на возможную реализацию, и является сущностью фундаментальной (т.е., например, в паскале в те времена это была не конструкция не воспроизводимая с помощью других (конструкций ЯП) -т.е. не являлась просто языковым сахаром).Во втором варианте вы моделируете эту сущность с помощью другого понятия (шаблон).
То есть различие только в том, что в первом случае эти конструкции вшиты в синтаксис языка. Это минимальное и не интересное отличие. Ну например хотя бы из за того, что вся стандартная библиотека плюсов, по стандарту языка, может быть вшита в компилятор (то есть отдельных файликов iostream, string и так далее может в природе вообще не существовать). Так что и этот Array точно также может быть туда вшит.

Гм. Пример: dynamic_cast<A>(b); -- явно шаблонная плюсовая функция, однако её объявления и определения в заголовочных файлах не найти. Она вшита, согласно стандарту, в компилятор.

В любом случае, это отличие в реализации сущности, а не в её сути.
Плюсы  -отдельная тема для "базара", шаблоны тоже, какую систему "понятий" взять в качестве "базы" третий вопрос, как назвать сущностьи и записать их - четвертый, интересно это или нет - пятый... Я всего лишь говорю о понятии "открытый массив" в  ЯВУ -Паскаль (в других ЯП оно может быть просто невостребовано).

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #26 : Март 31, 2011, 12:58:50 pm »
Я всего лишь говорю о понятии "открытый массив" в  ЯВУ -Паскаль (в других ЯП оно может быть просто невостребовано).
Ну, тогда все ясно. Консенсус, так сказать.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #27 : Март 31, 2011, 06:45:55 pm »
Вот, нашёл Comment on a note on dynamic arrays in PASCAL от Отца-основателя. Мотивировочка для введения открытых массивов. Компромисс... Идея обрела реализацию в Oberon-2.

Внимание вопрос! А почему из Oberon-07 открытые массивы выпилили? Никто не встречал обоснования Самого?
Обоснования  САМОГО не встречал... Но весьма правдоподобной выглядит гипотеза - создание DSL. Обычно такого рода языки делаются путем добавления сущностей родственных специализированной области  использования ЯП. Вирт посчитал, что специфика задач области для которой он создавал DSL  с ИЗБЫТКОМ описывается с помощью Оберона - а то что не влазит - пустил под нож (за ненадобностью, для упрощения компилятора, в целях оптимизации создаваемого кода.... - а может просто, что бы народ поломал над этим голову  :D ). Но гипотез может быть много... от разумных, до .... веселых  :)

Илья Ермаков

  • Full Member
  • ***
  • Сообщений: 177
    • Просмотр профиля
    • OberonCore
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #28 : Март 31, 2011, 07:25:11 pm »
Не совсем так , дело в том, что не  существует переменной типа- "открытый массив" - это всего лишь соглашение об интерпретации конкретного массива (точнее конкретного "экземпляра") "запуляемого" в подпрограмму.

Но тип открытого массива можно объявлять отдельно.

DIzer

  • Гость
Re:Динамические (открытые) массивы в Оберонах.
« Ответ #29 : Март 31, 2011, 07:29:18 pm »
Не совсем так , дело в том, что не  существует переменной типа- "открытый массив" - это всего лишь соглашение об интерпретации конкретного массива (точнее конкретного "экземпляра") "запуляемого" в подпрограмму.

Но тип открытого массива можно объявлять отдельно.
Не понял, о чем вы и где (в Паскале или 07)?