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 / DropDouble free free(p); free(p)ownership Use-after-free through an alias q = p; free(q); p[0]move semantics Use-after-free across a call (inferred) consume(p); p[0]whereconsumefreespmove 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 local return &localfn() -> &Tlifetime 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.
>>> Подробности на GitHub
