и ещё предлагаю: добавить в компилятор и в репорт языка цикл Дейкстры. только немного расширеный вариант:
Код:
LOOP
<this executes at each iteration>
DO IF cond0 THEN
…
DO IF cond1 THEN
…
END
синтаксис немного уродливый, но я не хочу вводить новые ключевые слова.
часть, которая исполняется на каждом шаге — опциональна.
или такой вариант синтаксиса:
Код:
LOOP
<this executes at each iteration>
| IF cond0 DO
…
| ELSIF cond1 DO
…
END
почему не классика с WHILE? чтобы было удобно реализовывать штуки типа sequence shift без копипасты:
Код:
LOOP
file.ReadCh(ch)
DO IF ~file.eof THEN
…
END
в конце-концов, есть же, кажется, консенсус, что цикл Дейкстры — хорошо. и омики уже вряд ли будут развивать Component Pascal — так почему бы нам не взять этот флаг и не понести дальше?
синтаксис кривоватый, но зато в таком виде все старые исходники будут компилироваться как и раньше. почему именно IF там? потому что `DO WHILE …` можно прочитать как «исполняй только эту ветку пока страж цикла истина», а с `IF`, мне кажется, более понятно, что ветка исполнится. сеточку `DO IF` удобно выравнивать, и парзеру легче замечать ошибки, поэтому `DO IF … DO IF…`, а не `DO ELSIF` или подобное. хотя `DO ELSIF` тоже можно, конечно. но мне так не очень нравится.
прошу уважаемых коллег высказываться. если у вас есть идеи по более красивому синтаксису — тоже, пожалуйста, не стесняйтесь. я, конечно, буду защищать свой вариант, но меня возможно переубедить хорошими аргументами. ;-)
реализацию финального варианта в компиляторе я беру на себя.
я понимаю и опасность ломания компилятора, и потерю совместимости с другими реализациями — но это конкретное изменение того стоит, мне кажется. если мы утрясём синтаксис и реализуем у себя — остальные подтянутся; изменение несложное, а пользу явную вижу я.