31 июля состоялись выпуски 0.15.0 и 0.15.1 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):ОписаниеПримерАналог RustUse-after-free (direct)free(p); p[0]ownership / DropDouble freefree(p); free(p)ownershipUse-after-free through an aliasq = p; free(q); p[0]move semanticsUse-after-free across a call (inferred)consume(p); p[0] where consume frees pmove semanticsBorrow outliving its stack scope{ var x; g = &x[0]; } use(g)lifetimes ('a)Interior pointer after reallocq = &buf[i]; realloc(buf,..); q[0]iterator invalidationInterior pointer after freeq = &buf[i]; free(buf); q[0]dangling referenceReturning the address of a stack localreturn &localfn() -> &T lifetime errorLeak (no owner on any path)var p = malloc(n); return 0(Rust frees via Drop)Компилятор основан на библиотеке libmtlc:Собственный промежуточный язык (IR).Классические и GNN оптимизаторы кода.Нативная генерация кода (x86-64 (+ AVX2), AArch64, NVIDIA PTX, SPIR-V (OpenCL 2.0)).Нативная компоновка.Проекты написаны кейптаунским программистом suidvandiewereld на языке C (стандарт C99) и распространяются по лицензии Apache-2.0. c, mettle, компиляторы, языки программирования