Mettle 0.17.0

1 сентября состоялся выпуск 0.17.0 компилятора языка системного программирования Mettle и библиотеки libmtlc.
Основные возможности:
- Без LLVM, виртуальной машины и сборки мусора.
- Нативная генерация кода CPU: x86–64 (+ AVX2), ARM64.
- Нативная генерация кода GPU: NVIDIA PTX, SPIR-V (подробнее: gpu.md).
- Нативная компоновка Windows PE и ELF (подробнее: linker-build-pipelines.md).
- Без сторонних runtime (подробнее: runtime-model.md).
- Собственный промежуточный язык (подробнее: ir.md).
- Классические оптимизаторы кода и экспериментальная оптимизация на обученной нейросети (подробнее: ml-opt.md).
- Встроенный ассемблер.
- Собственный отладчик на уровне исходного кода:
- без внешних форматов;
- точки останова, пошаговая отладка, а также чтение и запись переменных в реальном времени с опцией компилятора
--debug-hooks; - без gdb, PDB и DWARF.
- Тестирование во время компиляции: функции с атрибутом
@testзапускаются в интерпретаторе компилятора командойmettle test, без создания бинарного файла. Командаmettle traceинтерпретирует одну функцию и выводит построчное отслеживание значений. Команда--pgoинтерпретирует функциюmain()на этапе сборки и передаёт измеренные частоты вызовов обратно в оптимизатор (подробнее: testing.md). - Проверка безопасности памяти командой
--safe(подробнее: memory-safety.md). - Проверка заимствований (подробнее: borrow checker.md).
Проект написан на языке C и распространяется по лицензии Apache 2.0.
Наиболее важные нововведения
- Собственный линкер ELF.
- Встроенный ассемблер.
- Интерполяция строк в любом выражении. Например:
println("{value}"). - В
std/coreдобавлены типыResultиOption. - Многомерные массивы.
- Рекурсивные тегированные перечисления: два типа могут указывать друг на друга.
- Примерно удвоилась скорость компиляции на обеих платформах.
>>> Исходный код на GitHub
>>> Документация
>>> Бенчмарки
>>> Подробности на GitHub
