<img
itemprop="thumbnail"
class="medium-image"
src="
https://www.linux.org.ru/images/23846/1000px.jpg"
alt="Mettle 0.15.0 и 0.15.1"
srcset="images/23846/500px.jpg 500w,
https://www.linux.org.ru/images/23846/original.png 1000w"
sizes="100vw" style="position: absolute; max-height: 90vh"
width=1000 height=1000>
31 июля состоялись выпуски 0.15.0 и 0.15.1 [ Mettle ](
https://github.com/The-Mettle-Project/Mettle ) — языка системного программирования со статической типизацией:
•
Нативная поддержка x86-64 (+ AVX2), AArch64, NVIDIA PTX, SPIR-V (OpenCL 2.0).
•
Собственный линкер Windows PE.
•
Собственный отладчик на уровне исходного кода:
• Без внешних форматов.
• Точки останова, пошаговая отладка, а также чтение и запись переменных в реальном времени через --debug-hooks.
• Без gdb, PDB и DWARF.
•
Бэкенд CUDA.
•
Без LLVM, виртуальной машины и рантайма.
•
Выполнение на этапе компиляции: функции с атрибутом @test запускаются в интерпретаторе компилятора командой mettle test, без создания бинарного файла. Команда mettle trace интерпретирует одну функцию и выводит построчное отслеживание значений. Команда --pgo интерпретирует функцию main() на этапе сборки и передаёт измеренные частоты вызовов обратно в оптимизатор.
•
Проверка заимствований ( [ borrow checker ](
https://github.com/The-Mettle-Project/Mettle/blob/main/docs/borrow-checker.md ) ):
ОписаниеПримерАналог Rust
Use-after-free (direct)free(p); p[0]ownership / Drop
Double freefree(p); free(p)ownership
Use-after-free through an aliasq = p; free(q); p[0]move semantics
Use-after-free across a call (inferred)consume(p); p[0] where consume frees pmove semantics
Borrow outliving its stack scope{ var x; g = &x[0]; } use(g)lifetimes ('a)
Interior pointer after reallocq = &buf[i]; realloc(buf,..); q[0]iterator invalidation
Interior pointer after freeq = &buf[i]; free(buf); q[0]dangling reference
Returning the address of a stack localreturn &localfn() -> &T lifetime error
Leak (no owner on any path)var p = malloc(n); return 0(Rust frees via Drop)
Компилятор основан на библиотеке [ libmtlc ](
https://github.com/The-Mettle-Project/libmtlc ) :
• Собственный промежуточный язык (IR).
• Классические и GNN оптимизаторы кода.
• Нативная генерация кода (x86-64 (+ AVX2), AArch64, NVIDIA PTX, SPIR-V (OpenCL 2.0)).
• Нативная компоновка.
Проекты написаны кейптаунским программистом [ suidvandiewereld ](
https://github.com/suidvandiewereld ) на языке C (стандарт C99) и распространяются по лицензии Apache-2.0.
https://www.linux.org.ru/news/development/18353611