Benchmark canonici tra lingue diverse
Questa pagina riporta un'esecuzione locale completa della suite canonica benchLANG il 12-07-2026. Tutte le 19 implementazioni linguistiche configurate hanno completato tutti e cinque i carichi di lavoro con risultati validi.
La suite è stata eseguita su Linux 7.0.0 x86-64 con un AMD Ryzen 9 5900X (12 core, 24 thread) e 30 GiB di RAM. Ogni lingua è stata compilata una volta ed eseguita una volta. La macchina non era isolata, la frequenza della CPU non era bloccata ed era presente altro carico di sistema, quindi queste misurazioni sono un'istantanea riproducibile, non una pretesa di classifiche statisticamente stabili.
I carichi di lavoro canonici sono:
- crivello primo fino a 20.000.000;
- Fibonacci ricorsivo a
fib(45); - 5.000.000 di iterazioni di elaborazione delle stringhe;
- Mandelbrot a 4096 x 4096 con un massimo di 256 iterazioni per pixel;
- alberi binari dalla profondità 4 alla profondità 18.
Il tempo di esecuzione è il tempo trascorso interno del carico di lavoro. Il tempo di compilazione è il tempo trascorso per la compilazione della suite. LOC conta il file sorgente completo per quella lingua. Il picco RSS viene misurato per l'intero processo della suite con /usr/bin/time -ve la dimensione binaria è l'artefatto della suite generato completo. Poiché tutti e cinque i carichi di lavoro condividono un file di origine, i parametri build, LOC, RSS e binari si ripetono in ogni tabella del carico di lavoro. — significa che il percorso di esecuzione di avvio del codice sorgente, guidato da JIT o interpretato non ha prodotto una fase di compilazione misurata separatamente o un file binario autonomo.
Setaccio primo
| Lingua | Esecuzione/i | Compila/i | LOC | Picco RSS | Binario |
|---|---|---|---|---|---|
| C | 2.608 | 0,33 | 172 | 33,1 MiB | 28,3 KiB |
| Rust | 2.609 | 2.69 | 142 | 33,3 MiB | 2,04 MiB |
| Nim | 2.612 | 1.44 | 119 | 50,0 MiB | 52,1 KiB |
| Zig | 2.612 | 4.23 | 180 | 32,9 MiB | 204,0 KiB |
| D | 2.614 | 3.10 | 133 | 97,3 MiB | 1,13 MiB |
| Giava | 2.615 | — | 127 | 561,8 MiB | — |
| Fortran | 2.616 | 0,59 | 233 | 33,6 MiB | 32,5 KiB |
| Ada | 2.617 | 0,98 | 224 | 34,8 MiB | 48,7 KiB |
| seed | 2.622 | 0,84 | 218 | 33,2 MiB | 27,8 KiB |
| C# | 2.630 | 4.37 | 129 | 116,9 MiB | 77,1 KiB |
| JavaScript (panino) | 2.649 | — | 108 | 342,8 MiB | — |
| JavaScript (nodo) | 2.663 | — | 108 | 303,2 MiB | — |
| Dardo | 2.905 | 1.22 | 130 | 69,8 MiB | 6,45 MiB |
| Vai | 3.054 | 2.83 | 157 | 52,9 MiB | 1,53 MiB |
| OCaml | 3.090 | 0,31 | 118 | 87,4 MiB | 1,86 MiB |
| Pascal | 3.110 | 0,22 | 205 | 32,2 MiB | 548,3 KiB |
| PHP | 3.198 | — | 127 | 179,2 MiB | — |
| Pitone (PyPy3) | 3.297 | — | 127 | 376,5 MiB | — |
| Pitone (Python3) | 60.688 | — | 127 | 153,1 MiB | — |
Fibonacci ricorsivo
| Lingua | Esecuzione/i | Compila/i | LOC | Picco RSS | Binario |
|---|---|---|---|---|---|
| Nim | 0,096 | 1.44 | 119 | 50,0 MiB | 52,1 KiB |
| Fortran | 1.682 | 0,59 | 233 | 33,6 MiB | 32,5 KiB |
| C | 1.710 | 0,33 | 172 | 33,1 MiB | 28,3 KiB |
| Ada | 1.762 | 0,98 | 224 | 34,8 MiB | 48,7 KiB |
| seed | 2.979 | 0,84 | 218 | 33,2 MiB | 27,8 KiB |
| Zig | 3.074 | 4.23 | 180 | 32,9 MiB | 204,0 KiB |
| Rust | 3.082 | 2.69 | 142 | 33,3 MiB | 2,04 MiB |
| D | 3.083 | 3.10 | 133 | 97,3 MiB | 1,13 MiB |
| C# | 3.323 | 4.37 | 129 | 116,9 MiB | 77,1 KiB |
| Giava | 3.974 | — | 127 | 561,8 MiB | — |
| OCaml | 5.235 | 0,31 | 118 | 87,4 MiB | 1,86 MiB |
| Vai | 5.584 | 2.83 | 157 | 52,9 MiB | 1,53 MiB |
| Pascal | 5.709 | 0,22 | 205 | 32,2 MiB | 548,3 KiB |
| JavaScript (panino) | 7.489 | — | 108 | 342,8 MiB | — |
| Dardo | 7.850 | 1.22 | 130 | 69,8 MiB | 6,45 MiB |
| JavaScript (nodo) | 11.452 | — | 108 | 303,2 MiB | — |
| Pitone (PyPy3) | 12.589 | — | 127 | 376,5 MiB | — |
| PHP | 18.944 | — | 127 | 179,2 MiB | — |
| Pitone (Python3) | 113.390 | — | 127 | 153,1 MiB | — |
Il risultato Nim viene riportato esattamente come misurato, ma il suo tempo fib(45) è un forte segnale di specializzazione dell'ottimizzatore o di ripiegamento costante. Non dovrebbe essere utilizzato come prova comparativa finché il carico di lavoro non acquisisce un input anti-folding.
Elaborazione di stringhe
| Lingua | Esecuzione/i | Compila/i | LOC | Picco RSS | Binario |
|---|---|---|---|---|---|
| Zig | 1.448 | 4.23 | 180 | 32,9 MiB | 204,0 KiB |
| seed | 1.513 | 0,84 | 218 | 33,2 MiB | 27,8 KiB |
| JavaScript (nodo) | 1.812 | — | 108 | 303,2 MiB | — |
| Rust | 2.105 | 2.69 | 142 | 33,3 MiB | 2,04 MiB |
| C | 2.124 | 0,33 | 172 | 33,1 MiB | 28,3 KiB |
| Nim | 2.188 | 1.44 | 119 | 50,0 MiB | 52,1 KiB |
| C# | 2.228 | 4.37 | 129 | 116,9 MiB | 77,1 KiB |
| Ada | 2.310 | 0,98 | 224 | 34,8 MiB | 48,7 KiB |
| D | 2.430 | 3.10 | 133 | 97,3 MiB | 1,13 MiB |
| JavaScript (panino) | 2.742 | — | 108 | 342,8 MiB | — |
| Vai | 2.823 | 2.83 | 157 | 52,9 MiB | 1,53 MiB |
| Fortran | 3.405 | 0,59 | 233 | 33,6 MiB | 32,5 KiB |
| Giava | 4.018 | — | 127 | 561,8 MiB | — |
| OCaml | 4.093 | 0,31 | 118 | 87,4 MiB | 1,86 MiB |
| Pitone (PyPy3) | 4.896 | — | 127 | 376,5 MiB | — |
| Dardo | 5.871 | 1.22 | 130 | 69,8 MiB | 6,45 MiB |
| PHP | 7.251 | — | 127 | 179,2 MiB | — |
| Pascal | 12.094 | 0,22 | 205 | 32,2 MiB | 548,3 KiB |
| Pitone (Python3) | 38.324 | — | 127 | 153,1 MiB | — |
Mandelbrot
| Lingua | Esecuzione/i | Compila/i | LOC | Picco RSS | Binario |
|---|---|---|---|---|---|
| Nim | 1.855 | 1.44 | 119 | 50,0 MiB | 52,1 KiB |
| Vai | 1.911 | 2.83 | 157 | 52,9 MiB | 1,53 MiB |
| Fortran | 2.028 | 0,59 | 233 | 33,6 MiB | 32,5 KiB |
| Ada | 2.036 | 0,98 | 224 | 34,8 MiB | 48,7 KiB |
| C | 2.103 | 0,33 | 172 | 33,1 MiB | 28,3 KiB |
| D | 2.116 | 3.10 | 133 | 97,3 MiB | 1,13 MiB |
| Rust | 2.116 | 2.69 | 142 | 33,3 MiB | 2,04 MiB |
| seed | 2.119 | 0,84 | 218 | 33,2 MiB | 27,8 KiB |
| Zig | 2.119 | 4.23 | 180 | 32,9 MiB | 204,0 KiB |
| C# | 2.120 | 4.37 | 129 | 116,9 MiB | 77,1 KiB |
| Dardo | 2.166 | 1.22 | 130 | 69,8 MiB | 6,45 MiB |
| Giava | 2.166 | — | 127 | 561,8 MiB | — |
| JavaScript (nodo) | 2.167 | — | 108 | 303,2 MiB | — |
| OCaml | 2.173 | 0,31 | 118 | 87,4 MiB | 1,86 MiB |
| JavaScript (panino) | 2.177 | — | 108 | 342,8 MiB | — |
| Pascal | 2.179 | 0,22 | 205 | 32,2 MiB | 548,3 KiB |
| Pitone (PyPy3) | 2.280 | — | 127 | 376,5 MiB | — |
| PHP | 5.994 | — | 127 | 179,2 MiB | — |
| Pitone (Python3) | 73.626 | — | 127 | 153,1 MiB | — |
Alberi binari
| Lingua | Esecuzione/i | Compila/i | LOC | Picco RSS | Binario |
|---|---|---|---|---|---|
| Giava | 0,550 | — | 127 | 561,8 MiB | — |
| OCaml | 0,924 | 0,31 | 118 | 87,4 MiB | 1,86 MiB |
| JavaScript (panino) | 0,930 | — | 108 | 342,8 MiB | — |
| Nim | 0,939 | 1.44 | 119 | 50,0 MiB | 52,1 KiB |
| Dardo | 0,959 | 1.22 | 130 | 69,8 MiB | 6,45 MiB |
| C# | 1.121 | 4.37 | 129 | 116,9 MiB | 77,1 KiB |
| JavaScript (nodo) | 1.223 | — | 108 | 303,2 MiB | — |
| seed | 1.263 | 0,84 | 218 | 33,2 MiB | 27,8 KiB |
| Pascal | 1.560 | 0,22 | 205 | 32,2 MiB | 548,3 KiB |
| Fortran | 1.600 | 0,59 | 233 | 33,6 MiB | 32,5 KiB |
| C | 1.626 | 0,33 | 172 | 33,1 MiB | 28,3 KiB |
| Ada | 1.795 | 0,98 | 224 | 34,8 MiB | 48,7 KiB |
| Zig | 1.943 | 4.23 | 180 | 32,9 MiB | 204,0 KiB |
| Vai | 1.951 | 2.83 | 157 | 52,9 MiB | 1,53 MiB |
| Rust | 2.233 | 2.69 | 142 | 33,3 MiB | 2,04 MiB |
| D | 3.352 | 3.10 | 133 | 97,3 MiB | 1,13 MiB |
| Pitone (PyPy3) | 5.801 | — | 127 | 376,5 MiB | — |
| PHP | 6.796 | — | 127 | 179,2 MiB | — |
| Pitone (Python3) | 16.851 | — | 127 | 153,1 MiB | — |
Suite completa
Il tempo completo della suite è la somma riportata da ciascuna implementazione per tutti e cinque i carichi di lavoro. È incluso come panoramica; le tabelle del carico di lavoro riportate sopra rimangono il confronto principale.
| Lingua | Esecuzione/i | Compila/i | LOC | Picco RSS | Binario |
|---|---|---|---|---|---|
| Nim | 7.698 | 1.44 | 119 | 50,0 MiB | 52,1 KiB |
| C | 10.171 | 0,33 | 172 | 33,1 MiB | 28,3 KiB |
| seed | 10.496 | 0,84 | 218 | 33,2 MiB | 27,8 KiB |
| Ada | 10.521 | 0,98 | 224 | 34,8 MiB | 48,7 KiB |
| Zig | 11.194 | 4.23 | 180 | 32,9 MiB | 204,0 KiB |
| Fortran | 11.331 | 0,59 | 233 | 33,6 MiB | 32,5 KiB |
| C# | 11.424 | 4.37 | 129 | 116,9 MiB | 77,1 KiB |
| Rust | 12.146 | 2.69 | 142 | 33,3 MiB | 2,04 MiB |
| Giava | 13.331 | — | 127 | 561,8 MiB | — |
| D | 13.595 | 3.10 | 133 | 97,3 MiB | 1,13 MiB |
| Vai | 15.322 | 2.83 | 157 | 52,9 MiB | 1,53 MiB |
| OCaml | 15.515 | 0,31 | 118 | 87,4 MiB | 1,86 MiB |
| JavaScript (panino) | 15.989 | — | 108 | 342,8 MiB | — |
| JavaScript (nodo) | 19.319 | — | 108 | 303,2 MiB | — |
| Dardo | 19.752 | 1.22 | 130 | 69,8 MiB | 6,45 MiB |
| Pascal | 24.652 | 0,22 | 205 | 32,2 MiB | 548,3 KiB |
| Pitone (PyPy3) | 28.863 | — | 127 | 376,5 MiB | — |
| PHP | 42.224 | — | 127 | 179,2 MiB | — |
| Pitone (Python3) | 302.933 | — | 127 | 153,1 MiB | — |
Il seed il file del corpus è stato riscritto successivamente (15-10-2026) nell'attuale idioma di superficie (if let/while let, [0 as usize; 32], text.split_ascii + SplitToken.slice, presto return, expr; dichiarazioni), che modifica il seed solo riga: 173 loc, e sullo stesso host Ryzen 9 5900X una ripetizione ha misurato un tempo completo di 8.384s, 0.76s compilare, 58.3 KiB binario, 33.0 MiB picco RSS con checksum invariati. Una voce C++ (g++ -std=c++23 -O3 -march=native -flto) è stato aggiunto al cablaggio nella stessa modifica e misurato 7.605s, 159 loc, 1.44s compilare, 53.8 KiB, 35.7 MiB su quell'host. Entrambe sono osservazioni a esecuzione singola su una macchina non isolata; le tabelle sopra rimangono l'istantanea del 12-07-2026 che descrivono.
Riproduzione
La corsa completa utilizzata:
cd benchLANG
./run_benchmarks.sh --runs 1 --timeout 600
Le correzioni della cache della toolchain locale sono state seguite da repliche mirate per Zig, Go, Nim, C# e Dart. Le tabelle uniscono solo gli ultimi risultati positivi per ciascuna lingua.