На мой взгляд, Оберон-07 исключительно неудачная ревизия языка Оберон.
Это, наверное, можно долго обсуждать, но я ограничусь рассмотрением только самых "вопиющих" нововведений.
(Надеюсь, что жирное
IMHO здесь легко читается между строк.
)
1. Ограничение поддержки массивов.
Одной из сильных сторон Оберона является продуманная герметичная система типов.
В частности, для Оберона характерна полноценная поддержка массивов (в отличие от Си/Си++).
В Обероне-07 Вирт по какой-то причине решил ограничить поддержку массивов.
Указателей на массивы более не существует. Соответственно нет и операторов NEW(p, ...).
Мы не сможем завести массив нужной нам размерности во время выполнения.
info21 признавал, что это отрицательно скажется на программировании матричных вычислений.
2. Исключение цикла LOOP.
Нет доказательств, что цикл LOOP не нужен (хотя он и нужен сравнительно редко).
Предлагаемые альтернативы с циклом WHILE искусственны и имеют свои недостатки, вроде дублирования кода.
Введенный вместо него т.н. цикл Дейкстры (как расширение WHILE) на практике бесполезен.
Единственное, что удалось в него удачно "впихнуть" - известный алгоритм Евклида:
Код:
WHILE m > n DO m := m - n
ELSIF m < n DO n := n - m
END
Других примеров мне не известно.
Уж лучше бы было (здесь я опираюсь на один из недавних постов Trurlя) как-то "окультурить" LOOP.
3. Привязка оператора RETURN к завершению процедуры-функции.
Возможно, то, что в конце процедуры-функции будет обязательный RETURN, имеет смысл.
Но то, что оператор RETURN нельзя будет использовать в другом месте, в некоторых случаях так же неудобно, как и отсутствие цикла LOOP. Это возвращает нас во времена Паскаля и потребует введения необязательных переменных для хранения результата или аналогичных искуственных приёмов.
Так же, как и в случае с исключением оператора LOOP, здесь просматривается борьба с т.н. "нелокальными переходами" (такими как EXIT, RETURN и исключения), которые якобы противоречат структурному программированию.
Но это
миф. Каким образом RETURN в середине функции противоречит структурному программированию? Ведь,
выйдя из функции, мы уже никак не сможем нарушить тех или иных инвариантов
внутри неё.
4. Исключение типов SHORTINT, LONGINT и концепции поглощения типов в целом.
Удобство пользования единственным целочисленным типом понятно. В принципе, это
правильно.
Но чтобы такое "учудить" в практическом ЯП, надо жить в башне из слоновой кости.
В реальном мире большое число форматов данных использует для экономии места "короткие" типы. Теперь, чтобы работать с ними в Обероне, придется использовать разные искусственные приёмы, вплоть до привлечения псевдомодуля SYSTEM.
Возможно, моя критика в чём-то ошибочна.
Но тем не менее я полагаю, что Оберон-07 - шаг в неверном направлении.