Mettle 0.15.0 и 0.15.1

1000px.jpg

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.

>>> Подробности на GitHub

©  Linux.org.ru