Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 09 апр 2020, 06:09

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: FOR в Обероне 7. Стало только хуже
СообщениеДобавлено: 06 июн 2019, 11:05 
Не в сети

Сообщения: 146
Saferoll писал(а):
Да, но предположения должны на чем-то основываться. Без веских оснований можно предположить необходимость совершать троекратное приседание со звуком "Ку-у!"
Замечение про lim, в целом, дельное, а пример с "Ку" приведён с ошибкой логики. Кривые аналогии - это не довод, какими бы искромётными они не казались, но это можно обсуждать отдельно. Предположение же основано на вполне конкретных словах описания FOR, и пример кода нельзя рассматривать в отрыве от них. Что скажете об этих словах?
Цитата:
A for statement specifies the repeated execution of a statement sequence for a given number of times, while a progression of values is assigned to an integer variable called the control variable of the for statement
Если граничное условие и контрольную переменную можно произвольно менять, то о какой прогрессии и о заданном числе повторений тут сказано?
Утверждение, что пример кода "v := beg; WHILE v <= end DO S; v := v + inc END" задаёт любой вызов безосновательно, так как это именно пример кода, а не синтаксическая конструкция, которая могла быть задана так:
Код: "OBERON"
  1. "v" ":=" Expression ";" WHILE "v" "<=" Expression DO StatementSequence ";" "v" ":=" "v" "+" "(" ConstExpression ")" END
Такой вид, действительно, мог бы задавать более общий случай.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: FOR в Обероне 7. Стало только хуже
СообщениеДобавлено: 06 июн 2019, 13:43 
Не в сети
Администратор
Аватара пользователя

Сообщения: 269
Откуда: Россия
Код: "OBERON"
  1. Утверждение, что пример кода "v := beg; WHILE v <= end DO S; v := v + inc END" задаёт любой вызов безосновательно, так как это именно пример кода, а не синтаксическая конструкция
Это задание семантики предшествующей синтаксической конструкции (пояснение конструкции через эквивалентный кусок кода, состоящий из других конструкций), а не просто произвольный ни с чем не связанный набор кода. Подобным же образом цикл FOR задавался и в предшествующих описаниях Оберон-2 и КП. Поэтому, скорее всего здесь тоже после синтаксиса поясняется семантика, как и раньше. Странно было бы, что такие изменения никак не пояснены в тексте, и вполне естественно отсутствие пояснений для того, что было многократно пояснено ранее. А пример кода был бы приведен после слова "Пример", как это сделано в других разделах руководства. Так что, сравнивая этот "пример кода" и синтаксическую конструкцию, получаем, что S=StatementSequence.
Цитата:
A for statement specifies the repeated execution of a statement sequence for a given number of times, while a progression of values is assigned to an integer variable called the control variable of the for statement
Это означает, что цикл FOR предназначен для повторения последовательности операторов (последовательности, не одинокой процедуры без параметров!) заданное количество раз, когда параметр цикла идет по арифметической последовательности значений. Предназначен для этого, а не для трюков с изменением значения переменной цикла или граничного выражения. Так же и деление предназначено не для того чтобы вызывать ошибку деления на 0, а выделение и освобождение кусков кучи не предназначалось для того, чтобы вызывать утечку памяти или разыменование NIL. Но переполнение и проблемы с памятью случаются, если механизмы позволяют совершить такие ошибки, хотя и задумывались создателями языка не для этого.
В языке Ада можно сделать ошибку при написании цикла FOR, например задать не те границы, но большая часть ошибок и трюков блокирована:
1)переменная цикла является локальной в этом цикле и заголовок цикла является ее описанием
2)по окончании цикла эта переменная исчезает, поэтому бессмысленно спрашивать чему она равна
3)в теле цикла переменная цикла доступна только для чтения, поэтому невозможно изменить ее значение
4)само собой граничные выражения вычисляются только один раз до первой итерации
В языке Паскаль переменной цикла служит обычная переменная, поэтому ее область видимости и время жизни не ограничено телом цикла. Есть техническая возможность присвоить переменной какое-то значение или запросить значение после окончания цикла, но в стандарте языка оговорено, что это дает неопределенный эффект, т.е. явно сказано, что делать так "плохо". Но не приведено конкретного механизма управления индексом (если и приведено, то только для примера, а не как способ задать семантику).
Такое сокрытие механизма позволяет если не избежать, то как-то "отвратить" от трюков, а также оставляет свободу создателю компилятора выбрать наиболее эффективный способ реализации цикла (и избежать дефектов на краю диапазона).
Если же семантика пояснена через конкретный механизм, то это трюки наоборот провоцирует и привязывает реализацию к одному конкретному способу (не самому эффективному). К тому же выбранный механизм реализации, хоть и самый простой, но имеет дефект на границе диапазона. А написать правильный FOR без дефекта не так-то просто, а уж эффективный и того сложнее. Обычно программист реализует вот этот самый WHILE, что задан стандартом, со всеми его недостатками.
Очень жаль, что в Обероне изначально появился такой FOR :( И более жаль , что он стал только хуже. :shock: На мой взгляд это самое большое "пятно", особенно на фоне остальной надежности, простоты, ортогональности и прочих положительных качеств. Такой FOR - замаскированная яма на гладкой дороге, предательский удар в спину.

_________________
А кроме того, я думаю, что корFORген должен быть разрушен!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: FOR в Обероне 7. Стало только хуже
СообщениеДобавлено: 06 июн 2019, 15:04 
Не в сети
Администратор
Аватара пользователя

Сообщения: 269
Откуда: Россия
Saferoll писал(а):
Вообще, с этим оператором в Обероне творится что-то странное. Как пишут разные источники, создавая Оберон, Вирт не стал включать в него FOR, посчитав этот оператор цикла излишним. В Оберон-2 FOR все-таки был включен (вроде бы с большого неудовольствия Вирта, только по настоянию). Но включен-то не самый лучший вариант, лучше бы вообще никакого не было!
Что же, свершилось. В первом Обероне цикла FOR не было, потом какой-то дефектный цикл появился, прошел через Оберон-2, КП, вошел в Оберон-7, а теперь доктор Николай Вальтерыч его окончательно изничтожил.
Не ищите новую редакцию, это все та же Revision 1.10.2013 / 1.5.2016. FOR держался кое-как на одной ниточке (скрытой временной переменной), а когда ее убрали, убрался и сам FOR.
И приходится констатировать, что оператора FOR как самостоятельной сущности в ЯП Оберон-7 теперь нет (как впрочем, в некотором смысле, нет и не было в С). То, что определено в разделе "9.8. For statements" - это всего лишь синтаксический сахар, сокращение для некоторого частного случая цикла WHILE (который, в свою очередь, есть частный случай цикла Дейкстры).
Я писал ранее "лучше бы никакого", теперь понял, что никакого и нет. Так что, возможно, стало не хуже, а лучше. :?

_________________
А кроме того, я думаю, что корFORген должен быть разрушен!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: FOR в Обероне 7. Стало только хуже
СообщениеДобавлено: 06 июн 2019, 15:05 
Не в сети

Сообщения: 146
Saferoll писал(а):
Это задание семантики предшествующей синтаксической конструкции (пояснение конструкции через эквивалентный кусок кода, состоящий из других конструкций), а не просто произвольный ни с чем не связанный набор кода.
В тексте описания задаётся эквивалентность 2-х кодов, соответствующих введёным синтаксическим конструкциям, а не эквивалентности синтаксической конструкции и кода.

Цитата:
"Пример"
Пример примеру рознь.
Цитата:
Так что, сравнивая этот "пример кода" и синтаксическую конструкцию, получаем, что S=StatementSequence.
Тогда Вам, возможно, надо бы подумать над тем, чтобы ещё доработать транслятор. Если не только S- это произвольный код, но и inc - произвольное выражение, то к примеру
Цитата:
FOR v := beg TO end BY -1 DO S END
эквивалентен коду
Цитата:
v := beg; WHILE v <= end DO S; v := v + -1 END
что некорректная синтаксическая конструкция, то есть эквивалентный FOR тоже некорректен.

Цитата:
Так же и деление предназначено не для того чтобы вызывать ошибку деления на 0
О чём и речь. Как Вы понимаете деление на 0 - это тоже поведение, не определённое в стандарте, а потому для транслятора допустимо его трактовать как ошибку, в том числе и во время трансляции, если это возможно. Думаю, Вы не станете менять это поведение в угоду ложной совместимости с O7.

Цитата:
В языке Ада можно сделать ошибку при написании цикла FOR, например задать не те границы, но большая часть ошибок и трюков блокирована:
Не надо путать точность стандарта с кратким авторским описанием. Заинтересованным было бы желательно объединиться для создания более точного описания.

Цитата:
Очень жаль, что в Обероне изначально появился такой FOR :( И более жаль , что он стал только хуже.
Это лишь одна из трактовок, но на мой взгляд, некорректная.
Цитата:
На мой взгляд это самое большое "пятно", особенно на фоне остальной надежности, простоты, ортогональности и прочих положительных качеств
Это преувеличение, авторское описание полно неопределённостей, FOR тут ничем особым не выделяется.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: FOR в Обероне 7. Стало только хуже
СообщениеДобавлено: 06 июн 2019, 15:25 
Не в сети
Администратор
Аватара пользователя

Сообщения: 269
Откуда: Россия
Comdiv, для меня цикла FOR как отдельной самостоятельной конструкции (при любой трактовке S) в языке Оберон-7 больше нет! Есть лишь сокращенная запись цикла WHILE.
Цитата:
Цитата:
Очень жаль, что в Обероне изначально появился такой FOR :( И более жаль , что он стал только хуже.

Это лишь одна из трактовок, но на мой взгляд, некорректная.
Возможно и некорректная, может быть стало только лучше, когда с удалением временной переменной исчез и сам FOR.
Цитата:
Цитата:
На мой взгляд это самое большое "пятно", особенно на фоне остальной надежности, простоты, ортогональности и прочих положительных качеств

Это преувеличение, авторское описание полно неопределённостей, FOR тут ничем особым не выделяется.
Теперь, возможно, и соглашусь: если FOR-только синтаксический сахар, так что от него особенного и требовать?

_________________
А кроме того, я думаю, что корFORген должен быть разрушен!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: FOR в Обероне 7. Стало только хуже
СообщениеДобавлено: 06 июн 2019, 16:44 
Не в сети

Сообщения: 146
Цитата:
Возможно и некорректная, может быть стало только лучше
Ирония - это не палочка выручалочка, а усилитель. Она и умное усиливает и глупость тоже усиливает.
Цитата:
Теперь, возможно, и соглашусь: если FOR-только синтаксический сахар, так что от него особенного и требовать?
А от остального в описании можно требовать? С остальными неопределённостями что будете делать - с тем же делением на 0? Будете воплощать равенство x = q*y + r, оставите диагностику ошибки или назовёте синтаксическим сахаром для цикла вычитаний, к примеру?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: FOR в Обероне 7. Стало только хуже
СообщениеДобавлено: 06 июн 2019, 18:46 
Не в сети
Администратор
Аватара пользователя

Сообщения: 269
Откуда: Россия
Comdiv писал(а):
Ирония - это не палочка выручалочка, а усилитель. Она и умное усиливает и глупость тоже усиливает.
Без всякой иронии, действительно - лучше. И вполне соответствует предыдущим моим словам "лучше бы вообще FOR не было, чем такой". Ну вот и нету! Есть сокращение для цикла WHILE, а значит все трюки с переменной и границей остаются на совести программера. Что в WHILE он может всяких условий и операторов напихать, что в этот эквивалентный FOR. Что толку ругать дефекты механизма, если механизма этого по сути и нет?
Цитата:
С остальными неопределённостями что будете делать - с тем же делением на 0? Будете воплощать равенство x = q*y + r, оставите диагностику ошибки или назовёте синтаксическим сахаром для цикла вычитаний, к примеру?
Цикл вычитаний при поверхностной реализации зацикливается, вызывая переполнение счетчика вычитаний (частного). Что тоже можно назвать неопределенным поведением для таких аргументов. И это соответствует предметной области - числам, там тоже деление на 0 есть случай особый. Либо можно это заранее контролировать и считать, что при делении на ноль получится бесконечность, из которой при дальнейших вычислиниях может даже выйти верное конечное число (есть такой флажок, например, в математическом сопроцессоре). Так что ничего не буду делать, как сейчас есть - пусть так и будет.

А вот вопрос, насколько нужен другой механизм реализации FOR? Не как сокращение для WHILE, а как цельный скрытый итерационный механизм. Такой, что
Код: "OBERON"
  1. FOR X:=A TO B DO S END
выполнится верное количество раз для любых значений А,В из целого типа Т (даже если В=MAX(T), на что стандартный FOR через WHILE дает сбой). При этом нужно явно оговорить, что изменение Х внутри тела цикла дает неопределенный эффект (зацикливание, аварийное прекращение, изменение количества итераций или что-то еще). Также после окончания цикла значение Х не определено (может быть В+1 или В или А или ноль или что-то еще). Ну и конечно, значение выражений А и В вычисляется один раз до цикла и более на итерации не влияет, даже если в процессе выполнения цикла изменится значение каких-то переменных, от которых эти выражения зависят.
Еще бы наложить ограничения на переменную. Я не так радикален, чтобы как в Аде создавать переменную прямо в заголовке цикла. Но лучше бы сделать ее "как можно более локальной":
1) после FOR должен быть простой идентификатор, без всяких селекторов и квалификаторов (не элемент массива, записи или другого модуля).
2) переменная цикла FOR должна быть локальной переменной "самой локальной" процедуры, т.е. должна быть описана в разделе VAR (не в параметрах!) той процедуры, непосредственно в теле которой находится FOR
3) в блоке инициализации модуля (или в блоке финализации) может быть употреблена переменная цикла, которая описана в разделе VAR этого модуля, и эта переменная не должна быть экспортируемой.
Вот таким на мой взгляд должен быть FOR в Обероне. Собственно, всё это кроме ограничения на переменную цикла уже реализовано.

_________________
А кроме того, я думаю, что корFORген должен быть разрушен!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: FOR в Обероне 7. Стало только хуже
СообщениеДобавлено: 06 июн 2019, 19:45 
Не в сети

Сообщения: 146
Saferoll писал(а):
А вот вопрос, насколько нужен другой механизм реализации FOR?
Для этого надо спросить пользователей. Сколько раз Вам нужен был "правильный" FOR. У меня не встречается таких циклов, для которых было бы удобно его ипользовать, а сколько у Вас и других людей, в частности Олега? Можете посчитать?

Цитата:
на что стандартный FOR через WHILE дает сбой
Не обязательно, так как переполнение - это неопределённое поведение, Вы вполне можете реализовать желаемое поведение и для WHILE, или по крайней мере можете трактовать FOR с такой границей как WHILE, в котором переполнение приводит именно к такому результату.

Цитата:
При этом нужно явно оговорить, что изменение Х внутри тела цикла дает неопределенный эффект (зацикливание, аварийное прекращение, изменение количества итераций или что-то еще)
Явное оговаривание - это + к точности определения, но неопределённый эффект он и без явного оговаривания будет неопределённым, главное, чтобы читатель описания языка - создатель транслятора не превращался в итальянского забастовщика.

Цитата:
Ну и конечно, значение выражений А и В вычисляется один раз до цикла и более на итерации не влияет, даже если в процессе выполнения цикла изменится значение каких-то переменных, от которых эти выражения зависят.
Или как вариант - диагностика компилятора на изменяемое выражение, что не противоречит текущему описанию.

Цитата:
не элемент массива, записи или другого модуля
На всякий случай уточню, что в Обероне нельзя менять переменную другого модуля.

Цитата:
Я не так радикален, чтобы как в Аде создавать переменную прямо в заголовке цикла. Но лучше бы сделать ее "как можно более локальной":
Как по мне, для реализации транслятора O7 лучше оставить всё как есть, но трактуя неопределённое поведение как ошибки времени трансляции или хотя бы исполнения, а уж в новых языках/диалектах можно сделать и радикально.

К слову, описанный Вами FOR - это, ведь, тоже синтаксический сахар для чего-то подобного
Код: "OBERON"
  1.  
  2. v := beg;
  3. lim := end;
  4. IF v <= lim THEN
  5. S;
  6. WHILE v < lim - inc DO
  7. v := v + inc;
  8. S
  9. END
  10. END
  11.  
Хотя, пожалуй, Вы не описали поведние FOR, когда верхняя граница недостижима, потому что перепрыгивается


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: FOR в Обероне 7. Стало только хуже
СообщениеДобавлено: 06 июн 2019, 22:23 
Не в сети
Администратор
Аватара пользователя

Сообщения: 269
Откуда: Россия
Comdiv писал(а):
Сколько раз Вам нужен был "правильный" FOR. У меня не встречается таких циклов, для которых было бы удобно его ипользовать, а сколько у Вас и других людей, в частности Олега? Можете посчитать?
Лучше подсчитать случаи, когда кому-то был очень нужен эффект зацикливания FOR на краю диапазона.
Предположим есть комната с прочным полом по всей ее площади и есть точно такая же, где в дальнем углу дыра. Возможно, площадь комнаты настолько огромна, а задачи настолько локальны, что в этот дальний угол очень редко кто заходит, поэтому разницы чаще всего нету. Ну а вдруг? Лучше уж пусть везде будет прочный ровный пол.
Цитата:
Вы вполне можете реализовать желаемое поведение и для WHILE, или по крайней мере можете трактовать FOR с такой границей как WHILE, в котором переполнение приводит именно к такому результату.
В том и дело, что в стандарте конструкция WHILE для цикла FOR строго задана, т.е. вместо FOR в таких-то и таких-то случаях нужно использовать WHILE. Сравните описания "цикл FOR только для В<MAX(T)" и "цикл FOR для любых значений T", какое лучше? Или аналогия: "ходите везде, кроме вон того угла" против "ходите в этой комнате где угодно". Зачем нам лишние дырки? Чтобы не скучно было с оглядкой ходить? Лучше оператор "для любого целого типа" или "для любого, кроме"?
Деление на ноль никуда не денешь, но здесь-то зачем особенности терпеть? Если их можно легко устранить.
Не понимаю, зачем нужен цикл ограниченный по диапазону возможных значений, если можно создать цикл с более широкой областью определения (без оговорок и особенностей)?
Хотя, конечно, лукавлю, прекрасно понимаю: 1)легче задать семантику через эквивалентный WHILE-цикл 2)проще компилятор 3)зачем мудрить, если в большинстве случаев и так всё работает, а особые случаи можно перехватить и отдельно обработать
Comdiv писал(а):
Явное оговаривание - это + к точности определения, но неопределённый эффект он и без явного оговаривания будет неопределённым, главное, чтобы читатель описания языка - создатель транслятора не превращался в итальянского забастовщика.
Как говорит госпожа Мизулина "Запрет-это свобода" ;) Запрет изменять переменную цикла или ожидать какого-то ее постзначения есть свобода компиляторостроителя выбирать механизм реализации такого цикла. И получается довольно эффективно.
Запрет, по сути дела описание "гарантийного случая", где разработчик гарантирует определенное поведение в некоторых рамках. Что за рамками - извините, сами виноваты. И запрет этот не просто наугад с потолка списан, а из соображений структурного программирования (вроде запрета goto). Если не трюкачить с переменной цикла, то получится хорошая абстракция (сумма, кванторы и пр.), что полезно для верификации программ, вывода программ из формул и т.д.
Comdiv писал(а):
Или как вариант - диагностика компилятора на изменяемое выражение, что не противоречит текущему описанию.
Не думаю, что это лучше. Выражения, определяющие границы диапазона, могут быть сложными, содержащими много переменных. Почему мы должны запрещать всем им меняться (или как-то это перехватывать?) Лучше просто присвоить конечно значение скрытой временной переменной.
Comdiv писал(а):
На всякий случай уточню, что в Обероне нельзя менять переменную другого модуля.
В КП, например, можно сделать переменную экспортируемой и в другом модуле ее поменять. Чтобы нельзя было менять, надо вместо звездочки поставить минус.

Comdiv писал(а):
Как по мне, для реализации транслятора O7 лучше оставить всё как есть, но трактуя неопределённое поведение как ошибки времени трансляции или хотя бы исполнения, а уж в новых языках/диалектах можно сделать и радикально.
Именно так мы с Zorko и делаем. Но я изучаю и сравниваю реализации цикла FOR в разных ЯП (не только в Оберонах). И считаю, что "духу Оберона" стандартный цикл не соответствует, а мой FOR гораздо лучше :)

Comdiv писал(а):
К слову, описанный Вами FOR - это, ведь, тоже синтаксический сахар для чего-то подобного
Код: "OBERON"
  1.  
  2. v := beg;
  3. lim := end;
  4. IF v <= lim THEN
  5. S;
  6. WHILE v < lim - inc DO
  7. v := v + inc;
  8. S
  9. END
  10. END
  11.  
Вот в том всё и дело, что это не синтаксический сахар! Я употребил этот термин в том смысле, что FOR в Оберон-7 однозначно разворачивается в эквивалентную конструкцию с циклом WHILE просто текстуально, без всяких оговорок о скрытых переменных, одноименных идентификаторах или что-то там еще. В КП и Оберон 2, это не так, там надо делать оговорку о временной локальной переменной, которую стандартными средствами не создашь (надо заранее ее где-то описать).
Для
Код: "OBERON"
  1. FOR v:=1 TO 2 DO S END
имеем beg=1, end=2, inc=1. Тогда IF 1<= 2 выполняется, поэтому выполним S(1), потом WHILE 1<2-1 не выполнится ни разу, хотя должно быть выполнено S(2). Видимо, здесь опечатка и должно быть "WHILE v <= lim - inc".
С этой поправкой - да, это один из возможных способов. Но, опять таки это не сахар, и я против описания семантики через эквивалентный фрагмент. Например, в этом фрагменте видно чему равна переменная по окончании цикла и что будет, если изменить переменную. Лучше, если этот механизм будет полностью скрыт. Тогда трюки станут явным нарушением, значит программы будут более структурные и доказываемые (и выводимые из свойств), а механизм можно выбрать наиболее эффективный для каждого случая.
Цитата:
Хотя, пожалуй, Вы не описали поведние FOR, когда верхняя граница недостижима, потому что перепрыгивается
Не совсем понял, про что это. Если про случай, когда beg>end, то да, лучше такую оговорку сделать явно "если beg>end, то цикл не выполниться ни разу". Формально, это заключено в словах "выполнится верное количество раз для любых значений А,В" потому что при А>B это верное количество равно нулю.
А если про случай, когда В=MAX(T), а переменная эту границу перепрыгивает, то тут тоже все описано. Верное количество раз равно (B - A) DIV inc +1 (вычисленное точно, без переполнений, даже если это количество превышает MAX(T)), а конечное значение переменной цикла не определено (поэтому неважно, что числа MAX(T)+inc-k в диапазоне нет). Здесь k-некоторое число, которое определяет насколько v выскочило за пределы диапазона Т (вернее, выскочило бы, если бы не ограничение диапазона).

_________________
А кроме того, я думаю, что корFORген должен быть разрушен!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: FOR в Обероне 7. Стало только хуже
СообщениеДобавлено: 07 июн 2019, 01:31 
Не в сети

Сообщения: 146
Saferoll писал(а):
Лучше подсчитать случаи, когда кому-то был очень нужен эффект зацикливания FOR на краю диапазона.
Посчитали - нисколько, тем более, что зацикливание невозможно, если Вы правильно обрабатываете все случаи неопределённого поведения, включая арифметическое переполнение. Теперь давайте посчитаем, сколько раз был нужен "правильный FOR". Разве Вам самому не интересно?

Цитата:
Предположим есть комната с прочным полом по всей ее площади и есть точно такая же, где в дальнем углу дыра
Правильная реализация - это сообщение о дыре, "неправильный FOR" не запрещает такое воплощение, более того - оно желательно.

Цитата:
В том и дело, что в стандарте конструкция WHILE для цикла FOR строго задана, т.е. вместо FOR в таких-то и таких-то случаях нужно использовать WHILE.
И Вы вполне можете трактовать неопределённость переполнения так, что условие v <= end нарушается, это не запрещено.

Цитата:
Зачем нам лишние дырки? Чтобы не скучно было с оглядкой ходить? Деление на ноль никуда не денешь, но здесь-то зачем особенности терпеть?
Вы похоже уже забыли, но я как раз и писал, что, возможно, и не следовало реализовывать FOR с дырками из ложной совместимости с О7, так как исходя из словесного описания эти "совместимости" находятся в области неопределённого поведения, которое законно трактовать как ошибку, так же как законно трактовать как ошибку деление на 0, хотя об этом тоже нигде не сказано. То есть, запрет трансляции FOR с произвольно изменяющимися границами и контрольной переменной не нарушает текущего описания.

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

Цитата:
Видимо, здесь опечатка и должно быть "WHILE v <= lim - inc".
Верно
Цитата:
Но, опять таки это не сахар
Таково понятие синтаксического сахара, а описывать словами дополнительные ограничения всё равно придётся.

Цитата:
Если про случай, когда beg>end ...
А если про случай, когда В=MAX(T), а переменная эту границу перепрыгивает
Нет, для любого случая перепрыгивания верхней границы, то есть, когда контролирующая переменная не может быть равной верхней границе при inc>1.
Цитата:
тут тоже все описано. Верное количество раз равно (B - A) DIV inc +1
Теперь описано, просто в этом сообщении этого не было, или я этого не увидел

Цитата:
В КП, например, можно сделать переменную экспортируемой и в другом модуле ее поменять. Чтобы нельзя было менять, надо вместо звездочки поставить минус.
Я знаю. Повторю - речь про Оберон


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club