Il 31 luglio sono stati rilasciati 0.15.0 e 0.15.1 Mettle — linguaggio di programmazione di sistema con tipizzazione statica:
Supporto nativo per x86-64 (+ AVX2), AArch64, NVIDIA PTX, SPIR-V (OpenCL 2.0).
Linker proprietario per Windows PE.
Debugger a livello di codice sorgente:
- Senza formati esterni.
- Punti di interruzione, debug passo-passo, oltre alla lettura e scrittura di variabili in tempo reale tramite —debug-hooks.
- Senza gdb, PDB e DWARF.
Backend CUDA.
Senza LLVM, macchina virtuale e runtime.
Esecuzione in fase di compilazione: funzioni con l'attributo @test vengono eseguite nell'interprete del compilatore con il comando mettle test, senza creare un file binario. Il comando mettle trace interpreta una funzione e fornisce il tracciamento riga per riga dei valori. Il comando —pgo interpreta la funzione main() in fase di compilazione e restituisce le frequenze di chiamata misurate all'ottimizzatore.
-
Descrizione Esempio Simile a Rust Use-after-free (diretto) free(p); p[0] ownership / Drop Double free free(p); free(p) ownership Use-after-free attraverso un alias q = p; free(q); p[0] semantica di movimento Use-after-free attraverso una chiamata (inferito) consume(p); p[0] dove consume libera p semantica di movimento Borrow outliving its stack scope { var x; g = &x[0]; } use(g) lifetimes (‘a) Puntatore interno dopo realloc q = &buf[i]; realloc(buf,..); q[0] invalidazione dell'iteratore Puntatore interno dopo free q = &buf[i]; free(buf); q[0] riferimento sospeso Restituzione dell'indirizzo di una variabile locale nello stack return &local fn() -> &T errore di lifetime Fuga (nessun proprietario su alcun percorso) var p = malloc(n); return 0 (Rust libera tramite Drop)
Il compilatore è basato sulla libreria libmtlc:
- Linguaggio intermedio (IR) proprietario.
- Ottimizzatori di codice classici e GNN.
- Generazione di codice nativa (x86-64 (+ AVX2), AArch64, NVIDIA PTX, SPIR-V (OpenCL 2.0)).
- Linking nativo.
Progetti scritti da un programmatore di Cape Town suidvandiewereld in linguaggio C (standard C99) e distribuiti sotto licenza Apache-2.0.
Fonte: linux.org.ru
