Страницы

Проект Восток. Поехали

Сообщения о трансляторе переехали в отдельный блог.

Выложил на github исходный код проекта "Восток", который представляет из себя транслятор Оберона. Это нулевая версия, и пока весьма нестабильная. Впрочем, транслятор может не так уж и мало - собрать сам себя, так как в лучших паскалевских традициях написан на собственном входном языке - Oberon-07.

Проект задумывался для возможности партизанского программирования в тылу у противника - коммерчески востребованных языков программирования, используя его как генератор C, C++, Javascript, Java кода и других. Для этого у Oberon есть все предпосылки: язык достаточно прост, чтобы его транслятор можно было создать 1-му человеку, отсутствие навороченных абстракций и низкоуровневых возможностей на уровне ядра языка позволяет относительно легко отображать его на другие языки программирования - как низкоуровневые, так и высокоуровневые, и при этом сам язык достаточно мощен, гибок и защищён от ошибок, чтобы программирование на нём было вполне удобным. Практический смысл этого - возможность использовать один и тот же код на самых разных платформах. Ранее для такой цели я использовал C, но удобным это назвать было сложно.

Так как я задумывал транслятор с возможностью дальнейшего развития, то для него я выбрал более сложную архитектуру, чем возможно для Oberon. Трансляция проходит в два этапа - сначала разборщик исходного кода формирует синтаксическое дерево, затем по нему производится выходной код. Это отсрочило выход 0-й версии, но в дальнейшем позволит легче добавлять другие диалекты Oberon в качестве входных языков, а также другие целевые платформы.

Но пока предстоит немало потрудиться над стабильностью транслятора и над качеством производимого C-кода, поэтому о других целях говорить рано.

3 комментария:

  1. И всё-таки Си я брезгую. Мало ли как реализован компилятор Си?
    Уж лучше LLVM, или сразу нативный код.

    ОтветитьУдалить
    Ответы
    1. И то и другое есть в желаниях, но пока не до них. Си же в качестве целевой платформы даёт мне высокую производительность и переносимость, недостижимую и для LLVM, возможность использовать готовые отладчик и статический анализатор, естественным образом связывать с существующим кодом, а также позволяет демонстрировать коллегам привычный им язык, что действует на них успокаивающе. Си реализован в промышленных компиляторах на достойном уровне, так является простым языком и, главное, не заходить на территорию неопределённого поведения. Человек с этим справляется плохо, генератор кода - вполне.

      Удалить
    2. Забыл упомянуть - но я не против сотрудничества с теми, кто хочет прикрутить генерацию в машинный код.

      Удалить