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

← Вернуться в Playground

Компилятор qumirc

qumirc — компилятор языка Qumir. Преобразует исходный код в машинный код, ассемблер, LLVM IR или WebAssembly.

Использование

qumirc [опции] <входной_файл.kum>

Опции командной строки

Опция Описание
-o FILE Имя выходного файла
-c Только компиляция (без линковки)
-S Генерировать ассемблер
-O[0|1|2|3] Уровень оптимизации
--ast Вывести AST в файл .ast
--ir Вывести IR в файл .ir
--llvm Вывести LLVM IR в файл .ll
--wasm Компиляция в WebAssembly
-v, --version Показать версию
-h, --help Показать справку

Режимы компиляции

Нативный исполняемый файл

По умолчанию компилятор создаёт исполняемый файл для текущей платформы:

qumirc программа.kum
./a.out

С указанием имени:

qumirc программа.kum -o программа
./программа

Объектный файл

qumirc -c программа.kum
# Создаёт программа.o

Ассемблер

qumirc -S программа.kum
# Создаёт программа.s

LLVM IR

qumirc --llvm программа.kum
# Создаёт программа.ll

Или с указанием имени:

qumirc --llvm -o output.ll программа.kum

WebAssembly

qumirc --wasm программа.kum -o программа.wasm

Требования: установленный wasm-ld (часть LLVM).

Уровни оптимизации

Уровень Описание
-O0 Без оптимизаций (по умолчанию)
-O1 Базовые оптимизации
-O2 Стандартные оптимизации
-O3 Агрессивные оптимизации

Пример:

qumirc -O3 программа.kum -o программа_opt

Примеры

Компиляция простой программы

# Создаём файл hello.kum
cat > hello.kum << 'EOF'
алг
нач
    вывод "Привет, мир!", нс
кон
EOF

# Компилируем
qumirc hello.kum -o hello

# Запускаем
./hello

Просмотр промежуточных представлений

# AST (абстрактное синтаксическое дерево)
qumirc --ast программа.kum
cat программа.ast

# IR (внутреннее представление)
qumirc --ir программа.kum
cat программа.ir

# LLVM IR
qumirc --llvm программа.kum
cat программа.ll

Компиляция для веба

qumirc --wasm программа.kum -o программа.wasm

Полученный .wasm файл можно использовать в браузере с JavaScript:

const bytes = await fetch('программа.wasm').then(r => r.arrayBuffer());
const { instance } = await WebAssembly.instantiate(bytes, imports);
instance.exports.main();

Оптимизированная сборка

# Максимальная оптимизация
qumirc -O3 benchmark.kum -o benchmark

# Сравнение размера
qumirc -O0 benchmark.kum -o benchmark_O0
qumirc -O3 benchmark.kum -o benchmark_O3
ls -la benchmark_O0 benchmark_O3

Выходные файлы

Режим Расширение Описание
По умолчанию a.out или указанное Исполняемый файл
-c .o Объектный файл
-S .s Ассемблер
--llvm .ll LLVM IR (текст)
--ir .ir Внутреннее IR
--ast .ast AST (дерево разбора)
--wasm .wasm WebAssembly модуль

Коды возврата

Код Описание
0 Успешная компиляция
1 Ошибка компиляции

Интеграция с другими инструментами

Использование объектных файлов

# Компиляция в объектный файл
qumirc -c модуль1.kum
qumirc -c модуль2.kum

# Линковка с помощью clang/gcc
clang модуль1.o модуль2.o -o программа

Просмотр ассемблера

qumirc -S -O3 программа.kum
less программа.s

См. также