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

Компиляторная цепочка Whale

Обзор

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

Цели проектирования

Основные цели проектирования Whale:

  • Поддержка только для Wave: Whale поддерживает только язык Wave и не учитывает интеграцию с другими языками.
  • Модульная структура: каждая функция организована как независимый модуль, который можно добавлять или удалять по мере необходимости.
  • Использование независимого IR: Whale определяет свое собственное промежуточное представление, не используя существующие внешние IR, такие как LLVM IR.
  • Поддержка нескольких целевых платформ: можно осуществлять сборку для различных сред, независимо от операционной системы и архитектуры оборудования.
  • Точный контроль: компиляция организована так, чтобы разработчик мог детально контролировать весь процесс.
  • Удаление внешних зависимостей: Whale не зависит от внешнего C/C++ времени выполнения или компилятора.

Поддержка целей

Цель Whale - поддержка следующих целевых сред:

  • Операционные системы:
    • Linux
    • Windows
    • macOS
    • UEFI (без BIOS)
    • WaveOS (собственная ОС)
  • Архитектуры:
    • x86_64 (AMD64)
    • ARM64
    • Расширение через добавление модулей для остальных

Взаимодействие с внешними элементами (FFI)

Whale은 기술적으로 FFI(Foreign Function Interface)를 지원할 수 있도록 설계되지만, Wave의 철학상 외부 언어와의 연동은 권장되지 않으며 표준적으로 제공되지 않습니다. Wave спроектирован так, чтобы реализовать все функции внутри самого языка.

Расширяемость

Whale можно расширить следующим образом:

  • Добавление модулей для новых операционных систем или архитектур
  • Вставка пользовательских алгоритмов оптимизации
  • Кастомизация профилей сборки и настроек линковщика
  • Определение собственного формата выполнения