Mettle 0.15.0 и 0.15.1
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):
ОписаниеПримерАналог 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:
Собственный промежуточный язык (IR).
Классические и GNN оптимизаторы кода.
Нативная генерация кода (x86-64 (+ AVX2), AArch64, NVIDIA PTX, SPIR-V (OpenCL 2.0)).
Нативная компоновка.
Проекты написаны кейптаунским программистом suidvandiewereld на языке C (стандарт C99) и распространяются по лицензии Apache-2.0.
c, mettle, компиляторы, языки программирования
👉@sysadminoff
https://www.linux.org.ru/news/development/18353611
Post #19139
53