BENCHMARK · EVIDENZA PUBBLICA

I numeri, inclusi quelli che non ci favoriscono.

Misuriamo sullo stesso hardware, alterniamo l’ordine dei processi e conserviamo anche gli esperimenti scartati. Le differenze molto piccole richiedono una macchina isolata.

ULTIMA CAMPAGNA / JSON-TEXT / 20.08.2026

Abbiamo scelto il riferimento più severo.

Rust non è un avversario. È uno dei riferimenti più esigenti per software nativo: produce binari efficienti, non richiede un garbage collector e porta molte garanzie di sicurezza al momento della compilazione.

Confrontare LAI soltanto con linguaggi interpretati avrebbe mostrato soprattutto la differenza tra architetture. Rust alza l’asticella e ci permette di capire se le scelte di LAI reggono davanti a una soluzione già matura e progettata per le prestazioni.

Perché Rust punta a prestazioni e affidabilità

Non è una classifica universale dei linguaggi. Il confronto vale per lo stesso carico, lo stesso protocollo e lo stesso hardware documentato.

La prima logica applicativa scritta in LAI.

Il profilo autenticato è passato da una funzione C manuale a nove righe LAI tipizzate. Il compilatore verifica capability, segreti e budget, poi integra il percorso nel binario nativo senza una VM.

MisuraC manuale 0.8LAI 0.9Lettura
Token sorgente, o200k15641−73,72%
Throughput paired1,000000×0,992285×Parità nel rumore
Binario ELF99.864 B93.384 B−6,49%
Test profilo concorrente256/256256/256Zero errori

Un errore non gestito ora blocca la compilazione.

auth produce un Result tipizzato. Il programma deve dichiarare sia il percorso autenticato sia quello non autorizzato: nessun ramo implicito, nessun valore di sessione usato prima del controllo.

MisuraAlpha 1Alpha 2Lettura
Token sorgente, o200k4153+12 per due rami espliciti
Riduzione rispetto al C−73,72%−66,03%103 token in meno
Throughput paired1,000000×0,996748×Parità nel rumore
Binario ELF93.384 B93.384 BInvariato

Il modulo scompare dal binario.

Il ramo autenticato ora contiene più istruzioni tipizzate. Un modulo racchiude gli handler in un secondo limite di capability e operazioni, poi viene risolto interamente durante la compilazione.

MisuraAlpha 2Alpha 3Lettura
Token handler, o200k5359+6 per la proiezione esplicita
Handler + manifesto92−41,03% rispetto al C
Binario ELF93.384 B93.384 BInvariato
SHA-256 del serverd93e28…f857d93e28…f857Identico byte per byte

Due handler, 358 token in meno.

Registrazione e login ora gestiscono in LAI tutti gli esiti chiusi dei connettori. Le primitive native di sicurezza restano le stesse: normalizzazione, Argon2id, query preparate, lavoro costante sul rifiuto, limiti adattivi, sessioni e audit.

MisuraRiferimentoAlpha 4Lettura
Token register, o200kC 250LAI 80−68,00%
Token login, o200kC 274LAI 86−68,61%
Token combinatiC 524LAI 166−68,32%
Binario ELFAlpha 3: 93.384 B93.384 BInvariato
Sezione .text74.632 B74.768 B+136 B
Login paired1,000000×0,993042×Parità nel rumore

L’intero ciclo auth ora parla LAI.

Logout completa la migrazione dei quattro handler. Sessione e CSRF sono segreti di tipo diverso; successo, sessione assente, CSRF rifiutato ed errore interno devono essere gestiti tutti prima di produrre il binario.

MisuraRiferimentoAlpha 5Lettura
Token logout, o200kC 222LAI 73−67,12%
Quattro handler, o200kC 902LAI 301601 token in meno
Binario ELFAlpha 4: 93.384 B93.384 BInvariato
Sezione .text74.768 B74.764 B−4 B
Logout paired1,000000×0,951973×Parità non conclusiva
Suite di sicurezzaAlpha 4 verdeAlpha 5 verdeCSRF e revoca invariati

Il compilatore non conosce più l’autenticazione.

Un catalogo limitato dichiara firme, tipi, vincoli, simboli nativi, esiti e risposte dei quattro connettori. Gli handler usano una sola istruzione call; il catalogo viene verificato in compilazione e non entra nel servizio.

MisuraRiferimentoAlpha 6Lettura
Quattro handler, o200kC 902LAI 309−65,74%
Contratto completo LAIC 902735−18,51%
Costo catalogo condivisoAssente nel C350 token87,5 per handler
Binario ELFAlpha 5: 93.384 B93.384 BInvariato
Sezione .text74.764 B74.908 B+144 B
Profilo paired1,000000×1,030774×Parità nel rumore

Tre controlli, una sequenza verificata.

Logout non delega più tutto a un unico connettore. LAI autentica la sessione, passa la vista interna alla verifica CSRF e autorizza la revoca soltanto dopo due match esaustivi. Il compilatore blocca risultati saltati e rami d’errore che tentano di proseguire.

MisuraRiferimentoAlpha 7Lettura
Quattro handler, o200kC 902LAI 356−60,53%
Contratto completo LAIC 902825−8,54%
Binario ELFAlpha 6: 93.384 B93.440 B+56 B
Sezione .text74.908 B75.624 B+716 B
Logout paired1,000000×1,006925×Parità nel rumore
Catena verificata1 connettore3 capabilityControllo statico

Meno sintassi, stesso codice nativo.

guard compatta i match intermedi soltanto quando il catalogo rende ogni rifiuto unico e fail-closed. Il compilatore ricostruisce lo stesso albero esaustivo di Alpha 7; il match finale resta visibile nel sorgente.

MisuraAlpha 7Alpha 8Lettura
Token logout, o200k12298−19,67%
Quattro handler, o200k356332−24 token
Contratto completo LAI825801−11,20% rispetto al C
C generato, SHA-2565dfa5f…a9825dfa5f…a982Identico byte per byte
Candidato ELF pre-etichettab1f9b6…bdbfb1f9b6…bdbfIdentico byte per byte
ELF di releaseb1f9b6…bdbf35e17d…feacb21 byte: etichetta e build ID
Suite di sicurezzaVerdeVerdeASAN, UBSAN e TSAN inclusi

Il profilo salta il passaggio C.

Una IR tipizzata conserva soltanto guardie, chiamate, rami chiusi e risorse necessarie. Da quella prova il compilatore emette direttamente assembly Linux x86-64: nessuna VM, nessun heap, nessuna copia C inutilizzata nel servizio.

Misura isolataC, GCC -O2Alpha 9 nativoLettura
Codice collegato328 B269 B−17,99%
Mediana, 5 processi1,000×0,956×−4,4% tempo
Frame localeGestito da GCC48 B esattiAzzerato
Casi differenziali10/1010/10Identici
Suite realeOracle CVerdePASS

Tre controlli, una sola risorsa segreta.

Il logout concatena autenticazione, verifica CSRF e revoca direttamente dalla IR. Il compilatore assegna una vista di sessione da 48 byte, la azzera alla fine e condivide la guardia del portale con il profilo invece di duplicarla.

MisuraCNativoLettura
Simbolo logout449 B270 B−39,87%
Modulo .text28.517 B28.501 B−16 B
Differenziale16/1616/16Identici
Stub LTO1,000×1,081×C avanti
HTTP, 9 coppie1,000×0,996×Parità, 0,798–1,267

Il compilatore sceglie dove spendere 92 byte.

Una sola occorrenza incorpora la guardia. Più percorsi bilanciati la condividono. Se almeno l’80% delle osservazioni appartiene a un handler, il compilatore specializza quel percorso senza aggiungere contatori o decisioni al servizio in esecuzione.

MisuraCondivisaInlineLettura
Portale .text28.501 B28.593 BInline +92 B
Logout isolato, 7 processi1,000×0,920–0,961×Inline sempre avanti
Profilo isolato, 7 processi1,000×0,932–0,961×Inline sempre avanti
HTTP profilo, 9 coppie1,000×0,993×Parità, 0,926–1,169
HTTP logout, 9 coppie1,000×0,987×Parità, 0,823–1,439
Differenziale logout16/1616/16Identici

Tutta l’autenticazione raggiunge direttamente x86-64.

Registrazione e login completano il backend diretto. Il compilatore accetta soltanto i loro piani tipizzati di due operazioni, non copia email o password e invia ogni risultato sconosciuto alla risposta interna fail-closed.

MisuraCNativoLettura
Simbolo register, guardia condivisa359 B166 B−53,76%
Simbolo login, guardia condivisa367 B178 B−51,50%
Register diretto, 7 processi1,000×0,944×Nativo −5,6%
Login diretto, 7 processi1,000×0,946×Nativo −5,4%
Portale .text28.501 B28.309 B−192 B
HTTP login, 7 coppie1,000×0,982×Parità, 0,953–1,022
Differenziale, due layout25/2525/25Identici

Il quinto handler non richiede un backend su misura.

Il compilatore riconosce una forma strutturale: una chiamata bounded, risultati esaustivi e terminali, fallback chiuso. Il nuovo handler status arriva direttamente in x86-64 senza che il compilatore conosca il suo nome.

MisuraC generatoNativo genericoLettura
Simbolo status299 B255 B−44 B
Casi differenziali7/77/7Identici
ASAN + UBSANPASSPASSNessun errore
Allocazioni heap0 nel piano0Assenti

Il primo input applicativo JSON resta bounded.

Il tipo text porta il titolo di un progetto dal body JSON al connettore nativo. Il decoder accetta un oggetto piatto con sole stringhe UTF-8, rifiuta campi inattesi, duplicati, valori annidati ed escape invalidi.

MisuraRiferimentoAlpha 14Lettura
Test compilatore45 Alpha 1347/47Tutti verdi
Casi JSON esplicitiNuovo11/11PASS
Input pseudo-casualiNuovo50.000ASAN + UBSAN verdi
Differenziale project_createC 10/10Nativo 10/10Identici
Simbolo project_createC 343 BNativo 315 B−28 B

Classificazione route, un milione di richieste per coppia.

Sette coppie alternate, 14 milioni di richieste totali, zero errori. Il confronto paired riduce l’effetto dell’ordine ma non elimina il rumore della VPS.

MisuraLAI 0.7RustLettura
Mediana separata55.153 req/s53.422 req/sLAI +3,24%
Rapporto paired0,988754×1,000000×LAI −1,12%
Picco RSS292 KiB10.396 KiBLAI ~35× meno
Errori00Parità

Il percorso conta quanto il numero finale.

BASELINE

Rust avanti del 3,7%

Nella campagna controllata 0.3.1, LAI ha registrato 6.870 req/s contro 7.122 req/s di Rust. È il punto da cui siamo partiti.

SCARTATO

Il candidato “words” perde il 2,61%

Un’ottimizzazione non ha superato il criterio paired. È rimasta documentata e non è stata promossa come versione migliore.

ACCETTATO

Route-C64 riduce fortemente la memoria

292 KiB contro 10.396 KiB di Rust, con velocità vicina e nessun errore osservato in 14 milioni di richieste.

ACCETTATO

Il primo handler LAI riduce il sorgente tokenizzato

41 token contro 156 per la funzione C equivalente. La suite completa resta verde e il confronto paired non mostra una differenza di velocità conclusiva.

ACCETTATO

Il Result rende obbligatorio il percorso d’errore

Alpha 2 conserva dimensione e prestazioni native. Il sorgente resta più corto del C del 66,03%, includendo ora entrambi gli esiti verificati dal compilatore.

ACCETTATO

Il modulo resta fuori dal servizio

Alpha 3 verifica percorsi, capability e budget in compilazione. Il server risultante ha lo stesso hash di alpha 2: nessun loader o costo dinamico aggiunto.

ACCETTATO

Tutta l’autenticazione in ingresso parla LAI

Alpha 4 genera profile, register e login. I due handler migrati richiedono 358 token in meno dell’orchestrazione C equivalente, a parità di dimensione del file e di memoria fissa.

ACCETTATO

Il ciclo auth è interamente generato

Alpha 5 tipizza logout e separa sessione da CSRF. I quattro handler richiedono 601 token in meno del C equivalente; ELF e memoria fissa restano invariati.

ACCETTATO

I connettori diventano un contratto

Alpha 6 sostituisce quattro primitive del compilatore con una call generica e un catalogo verificato. Il contratto completo resta più compatto del C, senza loader a runtime.

ACCETTATO

Logout compone tre capability

Alpha 7 separa autenticazione, verifica CSRF e revoca. Il binario cresce di 56 byte, la memoria fissa non cambia e il confronto paired resta in parità.

ACCETTATO

La guard conserva la prova

Alpha 8 elimina 24 token dal logout composto. C generato e candidato nativo restano identici; la release cambia soltanto etichetta pubblica e build ID.

ACCETTATO

La IR raggiunge direttamente la macchina

Alpha 9 emette il profilo in assembly x86-64. Il simbolo scende da 328 a 269 byte; dieci casi differenziali e la suite completa restano verdi.

ACCETTATO

Il logout diventa un percorso nativo composto

Alpha 10 concatena tre capability con una sola vista segreta. La guardia condivisa porta il modulo 16 byte sotto il riferimento, mentre il test HTTP resta in parità e il limite LTO viene pubblicato.

ACCETTATO

La disposizione del codice diventa adattiva

Alpha 11 usa occorrenze e osservazioni per scegliere tra guardia condivisa e inline. Il microtest premia inline, HTTP resta in parità e il comportamento predefinito conserva i byte di Alpha 10.

ACCETTATO

I quattro handler diventano nativi

Alpha 12 porta register e login direttamente da IR ad assembly, senza copiare segreti. I simboli si dimezzano, il microtest migliora e il confronto HTTP resta correttamente dentro il rumore del lavoro reale.

ACCETTATO

Il backend diretto diventa strutturale

Alpha 13 compila status senza una regola legata al suo nome. C e assembly concordano in 7 casi su 7; il simbolo nativo misura 44 byte in meno nel probe locale.

IN VERIFICA

Testo e JSON aprono la logica applicativa

Alpha 14 aggiunge il primo project_create bounded. Il decoder supera 11 casi espliciti, 50.000 input pseudo-casuali e i sanitizer; persistenza e transazioni sono il prossimo confine.

L’attacco è un input previsto.

Il portale di autenticazione viene testato sul ciclo reale, non solo su funzioni isolate.

  • 202 Registrazione e duplicati non enumerabili
  • 401 Credenziali errate e sessioni revocate
  • 403 Richieste senza token CSRF valido
  • 200 Login, profilo e logout corretti
  • PASS ASAN, UBSAN, TSAN e Slowloris
portal image / 4.816 MiBfrontend / 0 frameworkexternal CDN / 0

Cosa questi dati non dimostrano.

  1. 01

    Una VPS non è un laboratorio isolato

    Carichi del provider, scheduler e rete possono spostare differenze inferiori a pochi punti percentuali.

  2. 02

    Un microbenchmark non è un’applicazione

    Il test route isola un percorso critico. Database, I/O e logica di dominio richiedono campagne separate.

  3. 03

    Il dato sui token è ancora circoscritto

    Abbiamo misurato i quattro handler equivalenti. Il risparmio di output di un agente su un’applicazione completa richiede ancora prompt, tentativi e correttezza controllati.

  4. 04

    La sicurezza non è una proprietà assoluta

    Difese, limiti e test riducono il rischio. Non sostituiscono aggiornamenti, audit e gestione corretta dell’infrastruttura.

Il prossimo passo è collegare i nuovi contratti JSON a connettori CRUD e transazioni bounded, poi misurare un flusso Bafify completo prodotto da un coding agent.

Vedi il prossimo passo