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 | — |
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.