Перейти к основному содержимому

Интегрированная дорожная карта разработки Wave + Whale v2

Этот документ представляет собой дорожную карту поэтапного процесса интеграции языка Wave и компиляторного инструментария Whale. Wave и Whale вначале существуют как отдельные компоненты, но в конечном итоге стремятся к полной интеграции в независимую языковую экосистему.

Каждый этап разработки следует следующим образом.

pre-alpha → pre-beta → alpha → beta → rc → release

Каждый этап основывается на результате предыдущего и предполагает одностороннее развитие, без возврата к прошлым конструкциям после завершения этапа.


Этап предварительной беты

Цель на стадии Pre-Beta — завершить фронтенд языка Wave и реализовать все функции языка на базе LLVM бэкенда. На этом этапе Whale не используется, компиляция и выполнение осуществляются полностью с помощью LLVM.

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

Область реализации включает объявление и вывод переменных, базовые операции, определение и вызов функций, условия (if / else if / else), а также циклы (while / break / continue) — все это завершается на этом этапе. Также включены вывод форматирования, явное указание типов, проектирование указателей в виде ptr<T> и массивов в виде array<T, N>.

На этом этапе компилятор Wave полностью написан на Rust, для генерации LLVM IR и AOT выполнения используются inkwell и llvm-sys.


Этап альфа

Цель этапа Alpha — это внедрение бекэнда Whale и установление структуры, позволяющей использовать одновременно LLVM и Whale. LLVM остаётся основным бэкендом, в то время как Whale добавляется в качестве бэкенда, который можно использовать по выбору.

При выполнении кода Wave можно выбрать, какой бэкенд использовать — LLVM или Whale, с помощью опции --backend.

wavec run main.wave --backend=whale
wavec run main.wave --backend=llvm

На этом этапе проектируется и определяется структура IR для Whale. Систематизируем ключевые компоненты, такие как Instruction, Value и Block, и реализуем преобразователь IR Generator, превращающий Wave AST в Whale IR.

Также мы реализуем Whale генератор кода, который можно будет запускать в статическом или виртуальном режиме. Недоступные или неэффективные типы в LLVM, например, такие как большие целые, как i1024, или сложные структуры с высокое количество подтипов, будут добавлены в Whale на этом этапе как часть оптимизации.

Система контроля точек в Whale должна обеспечивать вывод Hello World и правильно обрабатывать объявления переменных, маршрутизацию и оптимизацию IR. Этот этап ознаменует фактическим переходом Wave в Whale IR.


Этап бета-версии

Beta-цель - полный переход на Whale с 0443далением зависимости от LLVM. C этой стадии мы используем только Whale для файлов и выполнения Wave.

Все зависимости от LLVM и их модули удалены, код и маршруты выполнения оптимизируются для Whale. Простота и скорость от генерации IR до его выполнения - важная задача.

Настройка пути оптимизации для Whale IR, улучшение скорости создания кода и эффективности выполнения. В этой стадии все структуры в Wave должны быть полностью определены для библиотек Whale.

На этом тестовом этапе мы реализуем одиночные и глобальные тесты как свиты, со проверкой совместимости WSON и стандартной библиотеки. Эксплорим по попгрипу билдов для Whale.


Этап RC (кандидат в релизы)

Цель RC этапа - начать бутстрап для Wave. С этого этапа мы удаляем зависимость от Rust в компиляторе Wave и заново пишем компилятор на языке Wave.

на базе Whale заново пишем генератор Wave IR, заменяя компиляторную логику и библиотеки std/core на код Wave. В ходе этого процесса Whale достигнет стадии self-hosting.

В случае успешного боотстрапинга будет создан первый Wave-native компилятор.


Этап релиза (v0.0.1)

Release стадия означает первый официальный релиз Wave. На этом этапе Wave и Whale образуют единую независимую языковую екосистему.

Задачи релиза включают язык Wave и стандарную библиотеку, тулчейн компилятора Whale, менеджер пакетов Vex и пакет данных WSON.

На этом этапе Wave должен иметь компилятор, полностью написанный на Wave, а Whale - полностью оптимизированым. С помощью Vex сборки и запуска будут скоординированы, и возможность сборки для ос cross с помощью vex build --windows.


Метастратегия разработки

Разработка Wave + Whale - это не простой движение по этапам, а внимание точному планированию. Создание Whale непосредственно запущено, пока планируются параллельно на Wave и база данных.

Этап Alpha акцентирует внимание на сканирование двигателя с помощью опции --backend, позволяя непосредственно сравнивать и проверять LLVM и на базе Whale.

RC после того, как план переводит всю структуру на возможности, Wave код будет компилировать собственную структуру с помощью Whale.