Comdiv писал(а):
Предполагать-то как раз можно что угодно - в этом недостаток.
Да, но предположения должны на чем-то основываться. Без веских оснований можно предположить необходимость совершать троекратное приседание со звуком "Ку-у!", обратившись лицом на северо-восток всякий раз при употреблении в своей программе цикла FOR.
Ведь в сообщении о ЯП Оберон-7 не сказано, что так делать не следует, а значит, всегда остается место для неопределенности относительно этого ритуала.
Однако, такое предположение слишком уж фантастично и безосновательно.
А вот предположения,
что синтаксис и семантика, размещенные в разделе об одном и том же операторе, описывают одно и то же;
что тело цикла FOR такое же, как у циклов WHILE и REPEAT...UNTIL;
что Оберон-7 в основном похож на прочие обероны;
что столь важное нововведение, как необходимость телу цикла FOR состоять только из одного вызова процедуры без параметров, должно быть описано в тексте хотя бы одной фразой
выглядят достаточно разумными, чтобы предположить, что при переходе к новой версии только убрали временную переменную, оставив остальное как было. Поэтому весьма сомнительно, что S - это только вызов процедуры без параметров. Скорее уж это то же самое, что было всегда - список произвольных операторов.
Цитата:
Если же S - это произвольный список операторов, то и неизменность lim нельзя предполагать, если не сказано иное.
lim-скрытая временная переменная, нигде не присутствующая в самом FOR, поэтому недоступная для воздействия программиста. Воздействовать можно только на переменную цикла v. Возможно, предполагалось, что программист сам не будет использовать трюки, или сам выделит какую-то переменную и перед циклом выполнит присваивание ей граничного выражения, если это выражение может измениться во время цикла. Но тогда и сборщик мусора не нужен, если программист сам удаляет и выделяет память без ошибок. В том и смысл хороших компиляторов (и разумно продуманных ЯП), что человеку свойственно ошибаться, а компилятор и конструкции языка должны от этого предостеречь. "Скрытый магический механизм" управления переменной цикла, недоступный для воздействия программиста, приближает такой цикл к высокоуровневой абстракции, такой, например, как сумма (сигма большое). Ведь никто не спрашивает, чему равно i после вычисления суммы в математической формуле - это так же бессмысленно, как спрашивать, чему равна нижняя закорючка у буквы сигма, если ее отломить. А вот явный механизм, как в С или в Обероне-7, позволяет "залезть внутрь", а значит и позволяет легче совершить ошибку.