Документация Whale

Руководство по компонентам инструментальной цепочки, доступным командам и справочной документации.

Wave Foundation

Введение

Whale — это набор инструментов компилятора общего назначения для реализаций языков программирования и инструментов компилятора. Предоставляет типизированные промежуточные выражения (IR), ассемблер AMD64, библиотеку объектных файлов и функции на основе компоновщика. Каждый компонент используется через библиотеку Rust и команду whale.

IR выражает семантику вычислений независимо от кодировки машинного языка. Ассемблер кодирует машинные инструкции для создания перемещаемых объектов. Библиотеки объектов представляют разделы, символы и перестановки. Компоновщик разрешает ссылки между объектами и помещает исполняемый файл.

Создавайте и используйте инструменты

работа документ
Что делает каждый инструмент Компоненты инструментальной цепочки
Wave Сборка программы/ссылка/выбор цели Создать и связать
Управление пакетами/зависимостями Vex
Whale Выполнить команду Whale CLI

Путеводитель по документам

справочный документ содержание
См. IR. Типы, значения, функции, поток управления, проверка, форматы обмена
Числовые операции Целочисленная арифметика, сдвиг, преобразование типов, плавающая запятая
Модель памяти Инициализация, проверка указателя, вычисление адреса, макет, строки
Отладка с помощью O0 Сохранение вычислений, хранение переменных, отладочная информация
AMD64 Цель Идентификатор цели, соглашение о вызовах, объем функций native
Ассемблер и компоновщик Операнды сборки, разделы, символы, статические ссылки

Справочный документ определяет семантические правила для Whale. Доступные функции приведены в таблице ниже. Операции, описанные в справочной документации, могут быть доступны не во всех сборках.

Статус поддержки

компонент Предоставляемый интерфейс предел
ассемблер Создайте перемещаемый объект ELF64 из сборки AMD64. Неполный охват команд и директив
библиотека объектов Состав объекта, payload без BSS, целевая проверка, AMD64 ELF64 сериализация и выбираемая реализация записи Wave для проверки размера. Перемещаемые объекты не являются исполняемыми файлами.
IR Создание, печать, прямые/косвенные вызовы с проверкой подписи, понижение версии AST, целевая проверка и проверенные макеты типов. AST/typed IR доступны формат 2 и константы с точностью до бита; набранный IR синтаксический анализ и передача машинного вызова остаются недоступными
компоновщик Интерпретация символов, проверка цели ввода, проверка размещения разделов файла/памяти Применение полного перемещения и вывод исполняемых файлов не поддерживаются.
Запуск и отладка Семантические правила, определенные в этом документе IR интерпретатор, полная native генерация кода, проверка памяти трассировки во время выполнения, вывод DWARF не поддерживается

Правила, запрещающие неопределенное поведение, применяются к проверенным IR и трассировочным воспоминаниям. Экспериментальная реализация еще не реализует все проверки во время выполнения, описанные в справочной документации по памяти/выполнению.

Сборка и сборка

Сборка с использованием Rust 1.86.0 или выше.

git clone https://github.com/wavefnd/Whale.git
cd Whale
cargo build --release --locked

Сохраните следующую сборку как answer.asm.

section .text
global answer

answer:
    mov eax, 42
    ret

Создайте объект ELF64.

./target/release/whale asm --amd64 answer.asm -o answer.o

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

Экспериментальные команды AST→IR доступны при сборке с --features socket-cli. Информацию о команде CLI см. в Справочник команд.

Использование библиотеки и диагностика

IR необходимо проверить перед выполнением или генерацией кода. Ошибки ввода и неправильное использование builder приведут к возврату структурных ошибок. Ошибки ввода в библиотеке не должны завершать хост-процесс или перезаписывать существующее содержимое. Инструменты, которые принимают ненадежные входные данные, должны иметь возможность корректировать ограничения ресурсов.

Одна и та же версия инструментальной цепочки, входные данные, цель и конфигурация должны давать детерминированный результат. Метаданные дистрибутива идентифицируют версию·commit·и доступные функции. CI проверяет правильность ввода, ввод отклоняется, trap, O0 сохранение, round-trip, native семантика выполнения для каждого интерфейса. Команды разработки/проверки см. в разделе Whale Информация о вкладе.