Zorko писал(а):
А всякие доопределения "по месту" и сложные области видимости — только путают.
Как именно путают? Что можно напутать и при этом не получить ошибку от компилятора? А вот обероновская область видимости на всю процедуру (включая вложенные) - да, есть где наступить на грабли.
Zorko писал(а):
Наверное нужду в таких расширениях может чувствовать сишник, которому надо очень быстро писать гору кода с кучей переменных, добавлять и убирать переменные, и всё это быстро-быстро, а то время деньги. Но это же имеет мало общего с качественным кодингом.
"Сишник" здесь вообще никаким боком - в любом современном популярном языке локальные переменные не являются чем-то таким важным, что надо описывать в отдельной секции (и в отрыве от контекста использования). Мало того, С (без плюсов) как раз наиболее консервативен - там можно описывать переменные только в начале блока. А вот полный аналог паскальной VAR - среди современных языков надо поискать. Хотя да, на заре начиналось все с секций, но было отброшено эволюцией - компиляторы стали умнее, компьютеры быстрее, а ценности для программиста отдельная секция не несет. Локальные переменные - это расходный материал.
Zorko писал(а):
Мне даже на
zx.pk.ru такой перл показывали:
Код: "OBERON"
{
// фрейм 1
}
{
// фрейм 2
}
Такая штука обычно используется не для сужения видимости, а для вызова деструкторов локальных объектов в нужный момент.
Zorko писал(а):
в Паскале/Обероне такие "фреймы" достигаются вложенными процедурами, которых нет в Си-подобных языках.
Отклоняемся от темы, но вложенные процедуры в обероне абсолютно неюзабельны - потому как все равно не могут быть использованы в качестве замыканий. А возможность изменения внешней по отношению к вложенной процедуре переменной - я вообще рассматриваю как недостаток.
Zorko писал(а):
Если они есть, то пожалуйста. Только, будь любезен, назови "фреймы" именами. Лучше будет программа читаться.
От того, что я на каждый чих (ровно 2 строки кода) в IF/ELSE заведу по отельной процедуре (локальной) - читаться лучше не будет.
Код: "OBERON"
IF x THEN
r <- x.f();
y := f1(r) + f2(r);
END
Распиши вот это через локальную процедуру и посмотрим на читабельность.
Zorko писал(а):
Ещё Оберон поощряет именно маленькие процедуры.
Ох, неправда ваша. Достаточно посмотреть код Мэтра. Поэтому, в частности, Вирт так любит дублировать название процедуры в конце - очень помогает для процедур, не помещающихся на экран, и абсолютно бесполезная (только больше писать) особенность для маленьких процедур.
Кстати, в коде Мэтра можно увидеть и "предельный случай", он же "полный привет", когда переменная 'i' описывается как глобальная переменная модуля, только для того, чтобы быть использованной в цикле FOR в секции инициализации модуля.
P.S. Я так понимаю ко второй фиче (приведение типа) претензий нет?
А ведь она намного более необычна (аналог есть в котлине) на фоне популярных ЯП.