После Лиспа некоторые вещи в Обероне выглядят как наказание. Например, почему я не могу в качестве параметра принять любой объект и сделать ветвление по типу элементов массива, если объект - массив? Непонятно. Почему я не могу иметь функцию с переменным числом аргументов? Самое обидное, что в компиляторе и в рантайме всё это есть, но мне не дают этим пользоваться. В итоге приходится городить костыли на ровном месте, и простота языка работает не на качество кода, а против.

Ну ладно, не всё там есть, на самом деле в A2/ЯОС рантайм-среда не всё знает про тип объекта в рантайме, а знает только минимум, достаточный для сборки мусора. Но всё равно там есть тег типа, специально деградированный для рантайма. Достигнутая экономия довольно мала и для меня она не выглядит оправданной. Хотя, если нужно ужаться по размеру, то тогда да. Однако простота языка и ужатость кода по размеру тоже противоречат друг другу, неясно, почему всегда нужно предпочитать именно те выборы, которые были сделаны для Оберона, и в каких случаях нужно предпочесть именно Оберон, а в каких - что-то другое. Так-то если ужатость по размеру является наиболее приоритетной, то сборка мусора с тегами типов, флагами сборщика и резервом пространства для обеспечения цикличности сборки - уже неоптимальна, т.е. одно из фундаментальных свойств Оберона этому противоречит. Если же мы выкидываем сборку мусора, то я уже с трудом смогу сказать, чем этот язык по сути дела отличается от Паскаля.