Автор Тема: Строки в О7  (Прочитано 33920 раз)

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Строки в О7
« Ответ #60 : Март 31, 2013, 03:51:19 pm »
Но тип открытого массива определяется только типом его элементов.
НЕТ, в моем понимании, понятия типа открытого массива - есть передача массива в процедуру, использующая семантику открытого массива (открытый массив - это не тип).
Это тип формального параметра.

DddIzer

  • Гость
Re: Строки в О7
« Ответ #61 : Март 31, 2013, 03:53:58 pm »
Но тип открытого массива определяется только типом его элементов.
НЕТ, в моем понимании, понятия типа открытого массива - есть передача массива в процедуру, использующая семантику открытого массива (открытый массив - это не тип).
Это тип формального параметра.
Забавно, всю жизнь считал что это правила, по которым интерпретируются фактически переданные  массивы...  не больше, но и не меньше  :)

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Строки в О7
« Ответ #62 : Март 31, 2013, 04:03:07 pm »
Забавно, всю жизнь считал что это правила, по которым интерпретируются фактически переданные  массивы...  не больше, но и не меньше  :)
Ну тип, наверное, можно назвать правилами интерпретации

DddIzer

  • Гость
Re: Строки в О7
« Ответ #63 : Март 31, 2013, 04:09:10 pm »
Забавно, всю жизнь считал что это правила, по которым интерпретируются фактически переданные  массивы...  не больше, но и не меньше  :)
Ну тип, наверное, можно назвать правилами интерпретации
Можно, но нужно ли... стандартное определение (императивные яву)- это схема по которой создаются переменные, определяющая диапазон хранимых значений и операции над ними.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Строки в О7
« Ответ #64 : Март 31, 2013, 04:15:28 pm »
Забавно, всю жизнь считал что это правила, по которым интерпретируются фактически переданные  массивы...  не больше, но и не меньше  :)
Ну тип, наверное, можно назвать правилами интерпретации
Можно, но нужно ли... стандартное определение (императивные яву)- это схема по которой создаются переменные, определяющая диапазон хранимых значений и операции над ними.
это чем-то отличается от правил интерпретации? по-моему это они и есть )

DddIzer

  • Гость
Re: Строки в О7
« Ответ #65 : Март 31, 2013, 04:35:55 pm »
это чем-то отличается от правил интерпретации? по-моему это они и есть )
Разумеется есть..  и в частности  они проявляются в моих  с вами разночтениях.. - я рассматриваю массив передаваемый по семантике открытого.. как нормально определенный массив.. имеющий тип фактического параметра.. - и соответственно, никаких потерь смысла.. в моем понимании (при возможном контроле компилятором его размера) нет.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Строки в О7
« Ответ #66 : Март 31, 2013, 04:57:19 pm »
я рассматриваю массив передаваемый по семантике открытого.. как нормально определенный массив..
естественно, что фактический параметр это и есть "нормальный" массив, т.е. определённый по всем правилам, к примеру, статический массив, у которого определённы тип элементов и размерность, или динамический, у которого на этапе компиляции определён только тип элементов.
Да, кстати, возникает вопрос - как на этапе компиляции контролировать размер динамических массивов? Так же как и у открытых - никак. Только во время исполнения.

DddIzer

  • Гость
Re: Строки в О7
« Ответ #67 : Март 31, 2013, 05:00:11 pm »
я рассматриваю массив передаваемый по семантике открытого.. как нормально определенный массив..
естественно, что фактический параметр это и есть "нормальный" массив, т.е. определённый по всем правилам, к примеру, статический массив, у которого определённы тип элементов и размерность, или динамический, у которого на этапе компиляции определён только тип элементов.
Да, кстати, возникает вопрос - как на этапе компиляции контролировать размер динамических массивов? Так же как и у открытых - никак. Только во время исполнения.
тык весь попс то и заключается в том, что в O7 (сабже) динамических массивов нет...

DddIzer

  • Гость
Re: Строки в О7
« Ответ #68 : Март 31, 2013, 05:03:04 pm »
то есть вы в принципе не сможете передать динамический массив по семантике открытого  (вследствие отсутствия оного)

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Строки в О7
« Ответ #69 : Март 31, 2013, 05:20:17 pm »
тык весь попс то и заключается в том, что в O7 (сабже) динамических массивов нет...
а это не важно, потому что в данном случае у них одинаковая проблема - отсутствие возможности проконтролировать размер во время компиляции, я специально упомянул динамические массивы, чтобы стало понятно, почему на этапе компиляции нет возможности контролировать длину ФОРМАЛЬНОГО параметра-открытого массива, но при этом динамические массивы спокойно передаются в качестве ФАКТИЧЕСКИХ параметров в процедуры с формальными параметрами в виде открытых массивов.
Ведь понятно, что формальные и фактические параметры это разные вещи.
И если формальные параметры это открытый массив, то при компиляции такой процедуры (которая(компиляция) происходит один раз) у типа формального параметра - открытого массива - длина не известна, а значит и нет совершенно никакой возможности проконтролировать соответствие длины массива на этапе компиляции, блин, это же очевидно, я не понимаю, о чём спор на несколько страниц 0 нет там такой информации.
Вызов же данной процедуры с ФАКТИЧЕСКИМИ параметрами, размер которых может быть известен (а может и не быть) на этапе компиляции, совершенно никак не меняет дело, потому что, по понятным причинам, вызов процедуры и её реализация компилируются раздельно, но даже если бы они как-то компилировались "совместно" это никак бы не изменило ситуацию, потому что формальный параметр открытый массив может принимать фактический параметр любого размера с совместимым типом элементов.%?*?%%%% что здесь может быть непонятного, какие разночнения могут быть

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Строки в О7
« Ответ #70 : Март 31, 2013, 05:25:50 pm »
Ладно, Дизер, я понял - Вы прикалываетесь, типа воскресенье, скучно...
Потому что иначе этот бессмысленный спор ни о чём объяснить невозможно

DddIzer

  • Гость
Re: Строки в О7
« Ответ #71 : Март 31, 2013, 05:38:01 pm »
Ладно, Дизер, я понял - Вы прикалываетесь, типа воскресенье, скучно...
Потому что иначе этот бессмысленный спор ни о чём объяснить невозможно
отчасти.. но также, я считаю что, по крайней мере, если все сущности и вызовы процедуры находятся в рамках одного модуля - проверить  присваивание можно...

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re: Строки в О7
« Ответ #72 : Март 31, 2013, 05:41:36 pm »
В общем случае даже в рамках одного модуля сложно с точки зрения компилятора или невозможно вообще.

VAR a, b, c: открытый массив;
...
Joke := Random();
IF Joke = 1 THEN a:=b ELSIF Joke = 2 THEN a:=c ELSE c:=b END;

DddIzer

  • Гость
Re: Строки в О7
« Ответ #73 : Март 31, 2013, 05:45:12 pm »
В общем случае даже в рамках одного модуля сложно с точки зрения компилятора или невозможно вообще.

VAR a, b, c: открытый массив;
...
Joke := Random();
IF Joke = 1 THEN a:=b ELSIF Joke = 2 THEN a:=c ELSE c:=b END;
вы впадаете в ошибку Кемета... открытый массив ЭТО  НЕ ТИП ДАННЫХ... это СОГЛАШЕНИЕ о синтаксических правилах и интерпретации передачи  ОБЫЧНЫХ массивов в подпрограмму.

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Строки в О7
« Ответ #74 : Март 31, 2013, 05:51:31 pm »
отчасти.. но также, я считаю что, по крайней мере, если все сущности и вызовы процедуры находятся в рамках одного модуля - проверить  присваивание можно...
Как? Вот простой пример:
PROCEDURE Assign( VAR a, b : ARRAY OF CHAR );
BEGIN
  a := b;
END Assign;
Как здесь проверить "правильность" присваивания? Ведь как раз исходя из семантики открытого массива это присваивание всегда допустимо.
Вообще если нужно проконтролировать "правильность" присваивания, то использование для этого открытых массивов совершенно неверный подход, они как раз создавались совершенно для другого - чтобы обойти такую проверку на уровне компиляции.
Нужно использовать пользовательский тип
PROCEDURE Assign( VAR a, b : MyArrayType );
BEGIN
  a := b;
END Assign;
что и обеспечит проверку уровня компиляции.
Или на этапе компиляции вручную сравнивать размер
PROCEDURE Assign( VAR a, b : ARRAY OF CHAR );
BEGIN
  IF LEN( a ) = LEN( b ) THEN
    a := b;
  ELSE
    ...
  END;
END Assign;

И будет щасте