Смотрю я на этот голенг и он напоминает оберон просто до боли.
Причём не просто оберон, а во многом - оберон, расширенный именно так, как я хотел его расширить. Например, есть встроенные хеш-таблицы, и есть встроенное строковое представление для записей, массивов, хеш-таблиц.
Правда, некоторые проблемы оберона остались, а некоторые вещи мне кажутся лишними или я пока не понял, где у них граница, и поэтому не могу сказать, лишние они или нет. Например, синтаксис кортежей мне представляется провоцирующим ошибки. Я сомневаюсь в нужности кортежей при наличии записей - отличие между ними слишком мало. Но если уж их вводить, то нужно и скобки для них ввести.
А также я не понимаю пока, насколько вывод типов сделает программу невнятной по смыслу.
Некоторые важные вещи, которые были в обероне, впрочем, из голанга выкинули. Оберон - это язык "сверху донизу", а голенгу нужен Си. Также я пока не понял насчёт RTTI. Т.е. шаг не только вперёд, но и назад. В этом смысле голенг, конечно, по классу шикарности ниже оберона намного. Жаль, что с оберонщиками особо каши не сваришь. Т.е. они готовы помогать, но их слишком мало и тараканов у них в голове слишком много.
Но даже система с пакетами и репозиториями похожа на то, как устроена работа с файлами в blackboxcomponentbuilder.
Надо будет потом потроллить оберонщиков на эту тему. Например, можно вдохнуть новую жизнь в A2OS, канторизовав голенг. Я думаю, что это возможно.
Здесь я пишу затем, чтобы не забыть. Буду дополнять по ходу изучения голанга.
Ещё раз:
- жёсткая связь между именем модуля, расположением исходников и местом файла на диске - похоже на ББЦБ, но в голенге лучше
- Отсутствие явного преобразования типов - как в лучших оберонах
- сериализация примитивных типов данных - лучше, чем в оберонах (оберонщики вряд ли признают нужность, они любят колоться и жрать кактус)
- отсутствие исключений - одинаково
- defer - важная вещь, в оберонах её нет
- культ простоты просматривается
- scope переменные - я их сторонник, в голенге есть, но с культом простоты плохо сочетается
- контроль переполнения при умножении отсутствует - плохо, но в оберонах вроде это тоже не всегда
- синтаксис - почти то, что надо. Я пытался придумать подобный, до сих пор не преуспел. Изобилие точек с запятой - это бред, но и в голенге мне не нравится
- многострочные строки - без них жизни нет, и в оберонах их нет
- срезы - есть мутные моменты, например, при apply срезы внезапно и неконтролируемо могут начать указывать на разные массивы. Но в целом концепция полезная, она напоминает изрядно доработанные массивы неопределённой длины из оберона. А точнее - displaced arrays из лиспа.
- обероновские вложенные комментарии зря из голенга выкинули, это просто конфета
- необязательность разыменовывания указателя на структуру - я вот прямо предчувствовал, что голангщики сопрут это из оберона - и оно так и оказалось.
- оформление сигнатуры метода взято прямо из оберона
- я хотел сделать для оберона ANYTHING в дополнение к ANYREC, в голанге он уже есть: interface{}
- switch с типами - это ровно WITH
- вроде отсутствуют перечисления (выбор сомнительный, но по-обероновски)
- есть new integer - как в Аде - лучше, чем в Обероне