Отдельная секция - самое "просто" решение? Издеваешься? Самое простое - это как в питоне:
def func():
i = 0
У динамических языков своя логика, с моей точки зрения не самая лучшая. Я имел ввиду самое простое для реализации компилятора из достаточно хороших для пользователей языка. Для статически типизированного императивного языка то, что в Питоне ни достаточно хорошо, ни достаточно просто.
вдобавок, близкое к генерируемому коду.
Не понимаю о чем ты... Вот мне надо генерировать жабаскрипт...
естественно, речь о применении Оберона по назначению
Стимулирует писать обозримые процедуры.
Ой неправда. Достаточно глянуть код самого Мэтра. Зато вот дублирование названия процедуры в конце - да, очень понятно. Как раз на случай необозримых процедур.
Правда. Стимулирует - не значит обязует, и то - хлеб. Дублирование названия в конце при сколь-нибудь вменяемом форматировании не несет существенной пользы для обзора необъятной процедуры. А вот простому парсеру языка восстановиться после ошибки в коде, особенно при наличии встроенных процедур в языке, помогает.
Простое средство от дополнительных ошибок, связанных с перекрытием.
Перекрытие и отдельная секция VAR совершенно отртогональные вещи. Твой сишный пример замечательно переписывается на обероне с помощью локальных процедцур. И с теми же потенциальными проблемами. Про которые Вирт, кстати, в репорте молчит. Видимо не счиатает важным. Т.е., про область видимости он упоминает, а вот про то как разрешаются конфликты в случае перекрытия - молчит.
Не ортогональные. Не переписываются примеры на аналогичные с локальными процедурами, а главное в примере и нет никаких локальных процедур. В первую очередь с отдельной секцией очевидно, что если какая-то переменная в ней есть - она именно локальна, и не надо выискивать, есть ли где в мешанине коде объявление/перекрытие