31. juuli toimusid väljalasked 0.15.0 ja 0.15.1 Mettle — staatilise tüpiseerimisega süsteemse programmeerimise keele:
Natiivne tugi x86-64 (+ AVX2), AArch64, NVIDIA PTX, SPIR-V (OpenCL 2.0).
Oma linker Windows PE jaoks.
Oma põhjataseme debugger:
- Ilma väliste formaatide kasutamiseta.
- Peatumpunktid, samm-sammult tõrkeotsing ning muutuja lugemine ja kirjutamine reaalajas —debug-hooks kaudu.
- Ilma gdb, PDB ja DWARF-ita.
CUDA backend.
Ilma LLVM, virtuaalmasina ja runtime'ita.
Täitmine kompileerimise etapis: funktsioonid, millel on atribuut @test, käivituvad tõlgis kommandiga mettle test, ilma binaarfaili loomata. Kommando mettle trace tõlgib ühe funktsiooni ja väljastab rida-realt jälgimise väärtustest. Kommando —pgo tõlgib main() funktsiooni kogumise etapis ja edastab mõõdetud kutsumise sagedused tagasi optimeerijale.
-
Kirjeldus Näide Analoog Rustiga Use-after-free (otsene) free(p); p[0] omandiõigus / Drop Kaks korda vabastamine free(p); free(p) omandiõigus Use-after-free aliasi kaudu q = p; free(q); p[0] liikumise semantika Use-after-free funktsiooni kutsumise kaudu (järeldatud) consume(p); p[0], kus consume vabastab p liikumise semantika Laenamine ületab virna ulatuse { var x; g = &x[0]; } use(g) eluead (‘a) Sisemine pointer pärast realloc q = &buf[i]; realloc(buf,..); q[0] iteraatori kehtetuks muutmine Sisemine pointer pärast vabastamist q = &buf[i]; free(buf); q[0] rippuv viide Kohalikule virnale adresseerimise tagastamine return &local fn() -> &T eluea viga Leek (omanikuta igal teel) var p = malloc(n); return 0 (Rust vabastab läbi Drop)
Kompilaator põhineb raamatukogul libmtlc:
- Oma vahekeel (IR).
- Klassikalised ja GNN koodi optimeerijad.
- Natiivne koodi genereerimine (x86-64 (+ AVX2), AArch64, NVIDIA PTX, SPIR-V (OpenCL 2.0)).
- Natiivne sidumine.
Projektid, mille on kirjutanud Kaplinnas elav programmeerija suidvandiewereld keeles C (C99 standard) ja levitatakse litsentsi Apache-2.0 alusel.
Allikas: linux.org.ru
