Но разве это аргумент против VAR?
Я даже и не знаю как прокомментировать... "GOTO легко приводит к говнокоду - но разве это аргумент против GOTO?"
Легко ты аргументами манипулируешь.
Как раз
отсутствие VAR легко приводит к говнокоду, т.к. место объявления переменной ни чем не ограничено.
VAR - это ограничение. Также как отсутствие GOTO - это ограничение.
В обероне переменная объявляется в начале скопа. Есть всего три уровня скопов:
1. Модуль
2. Процедура
3. Вложенная процедура
С какого перепуга скоп должен делиться на две части этими произвольными объявлениями?
scope:
int a;
// до сих в скопе одна переменная a
int b;
// а тут еще b добавилась
end;
Такие скопы даром не сдались.
Если ты хочешь иметь произвольные вложенные скопы (по твоим сообщениям складывается такое впечатление),
то к VAR это уже не имеет отношения.
scope1:
int a;
scope2:
int b;
end;
end;
Так ты произвольные объявления хочешь или скопы?