⚡ MLC
Экспериментальный компилятор статически-типизированного языка в C++20
⚠️ Предупреждение об экспериментальном статусе
Данный проект представляет собой исследование возможностей генерации компилятора с использованием инструментов на основе больших языковых моделей. Проект не предназначен для промышленного использования.
О проекте
MLC — экспериментальный компилятор, преобразующий исходный код на статически-типизированном языке высокого уровня в исходный код на C++20. Основная цель проекта — изучение практических возможностей современных AI-систем при разработке сложных систем обработки языков программирования.
1528
тестов
4028
проверок
0
ошибок
85%
генерация AI
Компоненты проекта
1. Компилятор языка MLC
Полнофункциональный транслятор с многоуровневым промежуточным представлением:
- Лексический анализ (токенизация)
- Синтаксический анализ (построение AST)
- Семантический анализ (проверка типов, SemanticIR)
- Генерация C++20 кода
2. C++ AST DSL
Ruby DSL для программной генерации и манипуляции синтаксическими деревьями C++:
- Построение AST через fluent API
- Генерация C++ кода из DSL
- Парсинг C++ обратно в DSL (roundtrip capability)
Язык MLC
Статически-типизированный функциональный язык с императивными элементами.
Система типов
- Примитивные типы: i32, i64, f32, f64, bool, str, void
- Алгебраические типы: Sum types (размеченные объединения)
- Record types: Структуры с именованными полями
- Параметрический полиморфизм: Обобщенные типы
Пример кода
type Result<T, E> = Ok(T) | Err(E)
fn divide(a: i32, b: i32) -> Result<i32, str> =
if b == 0 then
Err("division by zero")
else
Ok(a / b)
fn process_result(result: Result<i32, str>) -> i32 =
match result
| Ok(value) => value * 2
| Err(error) => 0
Архитектура компилятора
Этап 1: Лексический анализ — преобразование текста в токены
Этап 2: Синтаксический анализ — построение AST
Этап 3: Семантический анализ — проверка типов, построение SemanticIR
Этап 4: Генерация кода — трансляция в C++20
Реализация Pattern Matching
- Sum types →
std::variant<...>
- Pattern matching →
std::visit с lambda-overloads
- Гарантия полноты проверки всех вариантов на этапе компиляции
Runtime библиотека
Модульная структура на C++20:
- core/ — базовые типы, pattern matching
- text/ — строки с UTF-8, регулярные выражения
- io/ — файлы, буферизованный ввод-вывод
- math/ — векторная математика, функции
- json/ — парсинг и сериализация
- graphics/ — цвета, геометрические примитивы
Использование
# Компиляция и запуск
bin/mlc examples/hello.mlc
# Вывод сгенерированного C++
bin/mlc --emit-cpp program.mlc
# Сохранение временных файлов
bin/mlc --keep-tmp program.mlc
# Чтение из stdin
echo 'fn main() -> i32 = 42' | bin/mlc -
Технологии
- Реализация: Ruby 3.x
- Целевой язык: C++20
- Тестирование: Minitest (1528 тестов, 0 ошибок)
- Требования: g++ ≥ 10.0 или clang++ ≥ 11.0
Архитектурные паттерны
- Visitor pattern — обход AST и SemanticIR
- Strategy pattern — выбор стратегии генерации кода
- Strangler Fig pattern — постепенная миграция бэкенда
- Builder pattern — построение C++ AST через fluent API
Генерация с помощью AI
Более 85% кодовой базы создано с использованием AI-инструментов:
- Claude (Anthropic) — архитектура, алгоритмы, система типов, генератор кода
- GitHub Copilot — автодополнение, тесты, утилиты
- Cursor — интерактивная разработка, отладка, рефакторинг
Ручное вмешательство потребовалось для определения архитектуры, спецификаций языка, формулирования требований и интеграции компонентов.
Область применения
✅ Проект предназначен для:
- Исследования возможностей AI в разработке компиляторов
- Образовательных целей (изучение архитектуры компиляторов)
- Экспериментов с дизайном языков программирования
- Прототипирования идей трансляции и оптимизации кода
❌ Проект НЕ предназначен для:
- Промышленного использования (нет аудита безопасности)
- Критичных по безопасности приложений
- Высоконагруженных систем (отсутствует оптимизация)
Ссылки
GitHub •
Telegram •
Resume
← Вернуться на главную