Оберон-клуб «ВЄДАsoft» https://zx.oberon.org/forum/ |
|
Новый компилятор Oberon-07/11 для x86 Windows/Linux от akron1 https://zx.oberon.org/forum/viewtopic.php?f=40&t=75 |
Страница 2 из 2 |
Автор: | geniepro [ 19 фев 2018, 20:41 ] |
Заголовок сообщения: | Re: Новый компилятор Oberon-07/11 для x86 Windows/Linux от akron1 |
akron1 писал(а): За прошедшее время, накопилось много мелких изменений: сделано удаление неиспользуемых процедур, добавлены некоторые расширения языка, исправлены ошибки, усовершенствована библиотека для KolibriOS. akron1, у тебя процедуры работы с множествами INCL и EXCL требуют вторым параметром константу? Но ведь в 16 страницах не сказано, что там может быть лишь константа, там сказано -- аргумент x имеет тип INTEGER: Цитата: INCL(v, x) v: SET; x: INTEGER v := v + {x} EXCL(v, x) v: SET; x: INTEGER v := v - {x} так же как тут, например: Цитата: FLT(x) INTEGER REAL identity А вот, например, указано именно ConstExpression: Цитата: ForStatement = FOR ident ":=" expression TO expression [BY ConstExpression] DO StatementSequence END . ЗЫ. Кстати, в чём смысл ограничивать шаг цикла FOR константой??? |
Автор: | akron1 [ 19 фев 2018, 22:32 ] |
Заголовок сообщения: | Re: Новый компилятор Oberon-07/11 для x86 Windows/Linux от akron1 |
В репорте от 22.09.2011 написано: Цитата: Procedures INC and DEC may have an explicit increment or decrement. It must be a constant. Also for INCL and EXCL, x must be a constant. В более поздних редакциях, Вирт отказался от этого ограничения. FOR вообще не очень нужен. Если требуется переменный шаг -- надо использовать WHILE. Для случая постоянного шага, FOR теоретически может помочь простому компилятору сгенерить более эффективный код, чем для цикла WHILE, потому что FOR более формализован: инкремент указан в самом операторе цикла, а не прописывается в отдельном операторе присваивания. Кстати, я что-то не помню случая, когда мне потребовался бы переменный шаг. Еще вот семантика цикла FOR в разных репортах различается: 2011: Цитата: The for statement FOR v := beg TO end BY inc DO S END is, if inc > 0, equivalent to v := beg; lim := end; WHILE v <= lim DO S; v := v + inc END and if inc < 0 it is equivalent to v := beg; lim := end; WHILE v >= lim DO S; v := v + inc END 2016: Цитата: The for statement FOR v := beg TO end BY inc DO S END is, if inc > 0, equivalent to v := beg; WHILE v <= end DO S; v := v + inc END and if inc < 0 it is equivalent to v := beg; WHILE v >= end DO S; v := v + inc END Во втором случае end вычисляется в каждой итерации... и мне это не нравится. |
Автор: | trurl [ 20 фев 2018, 08:38 ] |
Заголовок сообщения: | Re: Новый компилятор Oberon-07/11 для x86 Windows/Linux от akron1 |
geniepro писал(а): ЗЫ. Кстати, в чём смысл ограничивать шаг цикла FOR константой??? По крайней мере знак шага надо знать при компиляции. Иначе получится страшный код. |
Страница 2 из 2 | Часовой пояс: UTC + 2 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |