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() на этапе сборки и передаёт измеренные частоты вызовов обратно в оптимизатор.
-
Описание Пример Аналог Rust Use-after-free (direct) free(p); p[0] ownership / Drop Double 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] where consume frees p move semantics Borrow outliving its stack scope { var x; g = &x[0]; } use(g) lifetimes (‘a) Interior pointer after realloc q = &buf[i]; realloc(buf,..); q[0] iterator invalidation Interior pointer after free q = &buf[i]; free(buf); q[0] dangling reference Returning the address of a stack local return &local fn() -> &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.
Источник: linux.org.ru
