LINUX.ORG.RU

Mettle 0.17.0

 , , , ,


0

3

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<T, E> и Option<T>.
  • Многомерные массивы.
  • Рекурсивные тегированные перечисления: два типа могут указывать друг на друга.
  • Примерно удвоилась скорость компиляции на обеих платформах.

>>> Исходный код на GitHub

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

>>> Бенчмарки

>>> Подробности на GitHub

★★★★★

Проверено: Dimez ()
Последнее исправление: dataman (всего исправлений: 12)

Для чего нужен? Если это всё ради аннотации «@simd!», то может лучше в C++ такую же фичу добавить?

VladimirP ★★★★
()
Ответ на: комментарий от VladimirP

Там и так уже надобавляли что с другой стороны вываливается

zurg ★★
()

Опять это ИИ слоп запостили. Модератор, может начнете фильтровать?

dizza ★★★★★
()

Проект написан на языке C

То есть даже бутстрап ещё не осилили?

распространяется по лицензии Apache

Вдвойне не нужно.

zabbal ★★★☆☆
()
Ответ на: комментарий от zabbal

Проект написан на языке C

То есть даже бутстрап ещё не осилили?

Иногда против бутстрапа приводяь аргумент что мол «как тогда собрать первую версию, если нет доверия бинаринкам». И вот что подумалось: это можно решить если в проекте сделать одной из целевых платформ компиляции «набор .c-файлов с насколько-то человеко-читаемым кодом под ыиксированный стандарт C-компилятора». Этот код можно будет «проверить на доверительность» и одновременно он будет компилироваться C-компилятором в рабочую (пускай и неоптимальную) версию. И включать такую сборку-представление компилятора в артефакты его релиза наравне с исходниками на себе - то можно будет распространять релизы написанные на самом себе, не требуя димея даже предыдущую версию:

  • компилируем набор .с-файлов под целевую платыорму, получаем неоптимальную версию
  • компилируем неоптимальной версией исходники на себе под целевую платформу - получаем оптимальную версию
  • (опционально) компилируем оптимальной версией исходники на себе в набор .с-файлов - сверяем что набор .с-файлов соответствет предоставленному.

Из бонусов подхода - можно выдавать релиз, написанный с использованием фич языка, которые только в этом релизе и появились. Rust например так НЕ делает и релизится на предыдущей версии себя, а не на текущей.

Понятно что сразу написать новую фичу с её же использованием невозможно, но тут речь о том что автор вначале делает новую фичу без неё, получает рабочий вариант, и сразу же может переписать реализацию уже с ней, так как совместимость с предыдущей версией не треюуется тянуть до релиза. Так он лучше ощутит полезны они или не удались) Новые фичи просто скомпилируются в .c его локальной сборкой своего компилятора.

GPFault ★★★★
()

Без LLVM

Как будто это прям уж достоинство.

Собственный промежуточный язык

А вот это куда важнее и интереснее. На первый взгляд он куда более высокоуровневый и векторно-ориентированный(пусть и с ограниченным CC), чем LLVM IR/gMIR.

GAMer ★★★★★
()
Ответ на: комментарий от VladimirP

@simd!
Fails the build when a promise breaks

Как-то слишком неопределённо, векторизовывать на x86_64 можно от MMX до AVX10. И, очевидно, не всякая векторизация удовлетворит.

GAMer ★★★★★
()
Ответ на: комментарий от GPFault

Здесь же речь не про оптимальность и новые фичи - просто это поделие настолько не готово и убого что даже его авторы считают его непригодным для написания компилятора этого же языка. Тут я склонен согласиться с авторами языка - если уж даже они считают что он непригоден к системному программированию, то какой смысл его использовать мне?

zabbal ★★★☆☆
()
Ответ на: комментарий от zabbal

Я о том, что один из аргументов на «язык настолько не готов что не может быть написан на себе?» это «автор опасается что никто не станет собирать даже на поиграться». И привожу контраргумент, как раз таки тоже склоняющий к тому что «это слабый аргумент, если не написан на себе - то не готов»

GPFault ★★★★
()
Ответ на: комментарий от GPFault

автор опасается что никто не станет собирать

Естественно никто не станет - софт давно уже практически никто не собирает (за исключением красноглазых гентушников и прочих упоротых). Кроме тех кто в разработке софта непосредственно участвует. Софт ставят из пакетов дистрибутива. И если язык позиционирует себе в настолько фундаментальную нишу как системное программирование, но у него этих дистрибутивных пакетов нет и надо чего-то там компилять то это именно что убог и не готов. Причём это даже ещё не доходя до вопроса бутстрапа, который идёт уже следующим пунктом - после того как софт сумел доказать свою состоятельность дистрибутивам.

zabbal ★★★☆☆
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.