Документация 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 Информация о вкладе.