Floating-Point Usage on GitHub: A Large-Scale Study of Statically Typed Languages

Questo studio empirico su larga scala analizza l'uso dell'aritmetica in virgola mobile in milioni di repository GitHub per linguaggi staticamente tipizzati, fornendo un dataset di 10 milioni di funzioni reali e valutando la rappresentatività degli attuali benchmark rispetto al codice di produzione.

Andrea Gilot, Tobias Wrigstad, Eva Darulova

Pubblicato Wed, 11 Ma
📖 5 min di lettura🧠 Approfondimento

Each language version is independently generated for its own context, not a direct translation.

Immagina di essere un architetto che deve costruire ponti incredibilmente sicuri. Per farlo, hai bisogno di capire esattamente come si comportano i materiali reali (acciaio, cemento) quando vengono sottoposti a stress, pioggia o salsedine.

Fino a poco tempo fa, gli ingegneri del software che lavorano con i numeri decimali (quelli con la virgola, usati per calcoli scientifici, grafica 3D, intelligenza artificiale) stavano costruendo i loro "ponti" basandosi su campioni di materiali che non assomigliavano affatto alla realtà. Usavano solo piccoli blocchi di metallo perfetti e lisci, mentre nel mondo reale i materiali sono arrugginiti, piegati e pieni di buchi.

Ecco di cosa parla questo studio, tradotto in parole semplici:

1. Il Problema: I "Campioni" Falsi

Gli scienziati che creano strumenti per verificare se i calcoli dei computer sono corretti (per evitare che un razzo esploda o un farmaco sia dosato male) usano dei test standard (chiamati benchmark).
Il problema? Questi test sono come se provassimo a testare un'auto da corsa facendola guidare solo su un tapis roulant in laboratorio. Sono piccoli, controllati e perfetti. Ma nella vita reale, le auto guidano su strade piene di buche, curve improvvise e traffico.
Gli autori si sono chiesti: "I nostri test assomigliano davvero a come gli sviluppatori scrivono il codice oggi?"

2. L'Esperimento: Una Grande Ricetta di Cucina

Per rispondere, Andrea, Tobias ed Eva hanno deciso di fare un'ispezione di massa. Hanno guardato milioni di progetti ospitati su GitHub (il "supermercato" dove gli sviluppatori mettono il loro codice).

Hanno usato un approccio intelligente:

  • Non hanno guardato tutto: Era troppo. Hanno preso un campione casuale, come se assaggiassimo un cucchiaino di zuppa per capire se è salata, invece di berne tutta la pentola.
  • Hanno filtrato il "rumore": Hanno scartato i progetti "finti" (quelli creati per compiti scolastici o non aggiornati da anni) e si sono concentrati solo sui linguaggi di programmazione che hanno un "etichetta" chiara sui tipi di dati (linguaggi staticamente tipizzati).
  • La caccia alle parole chiave: Invece di leggere ogni singola riga di codice (impossibile!), hanno cercato parole specifiche come float, double, sin, cos, NaN (Not a Number). È come cercare la parola "zucchero" in un milione di ricette per capire quanto è dolce la dieta mondiale.

3. Le Scoperte: La Realtà è Diversa

Ecco cosa hanno scoperto, usando delle metafore:

  • I numeri decimali sono ovunque: Hanno scoperto che oltre il 62% dei progetti software contengono calcoli con la virgola. È come scoprire che quasi ogni casa ha una cucina: è fondamentale.
  • I test attuali sono "troppo puliti": I test usati finora (come FPBench) assomigliano a ricette scritte da un robot: poche variabili, niente imprevisti.
    • Nel codice reale, invece, i calcoli sono spesso mescolati a decisioni (se piove, prendi l'ombrello) e ripetizioni (fai questo 100 volte).
    • I test attuali hanno pochissime "decisioni" (condizioni) e poche "ripetizioni" (cicli), mentre nel codice vero queste cose sono ovunque.
  • Le librerie famose sono meno usate di quanto si pensi: Molti testi usano funzioni di una libreria scientifica famosa (GSL) come esempio. Lo studio ha scoperto che nel mondo reale, queste funzioni sono usate raramente. È come se tutti i manuali di cucina dicessero "usa il sale marino", ma nella realtà la gente usasse quasi sempre il sale grosso.
  • I codici sono piccoli e modulari: Contrariamente all'idea di enormi blocchi di calcolo matematico, il codice reale è fatto di tantissime piccole funzioni che si chiamano a vicenda. È come un'orchestra dove ogni musicista suona una nota breve, non un solista che suona un'opera intera da solo.

4. La Soluzione: Una Nuova "Cassetta degli Attrezzi"

Gli autori non si sono limitati a criticare i vecchi test. Hanno creato qualcosa di nuovo:

  1. Un Dataset Gigante: Hanno estratto 10 milioni di funzioni reali dal codice pubblico. È come avere un archivio infinito di ricette vere, non quelle di scuola.
  2. Nuovi Test Sfida: Hanno creato 59 nuovi "test" in linguaggio C, presi direttamente da questo archivio. Questi test sono "sporchi", complessi e reali. Contengono trucchi, loop e decisioni che i vecchi strumenti di verifica spesso non riescono a gestire.

Perché è importante?

Immagina che i vecchi test fossero come una guida per imparare a guidare su un campo da golf vuoto. I nuovi test di questo studio ti fanno guidare nel traffico di Roma alle 17:00.

Se vogliamo che i computer siano sicuri quando calcolano cose importanti (dai voli spaziali all'intelligenza artificiale), dobbiamo smettere di allenarci su campi da golf e iniziare a praticare nel traffico reale. Questo studio ci dà la mappa per farlo.

In sintesi: Gli autori hanno guardato il "mondo reale" del codice, hanno scoperto che i nostri vecchi test erano troppo semplificati, e hanno creato nuovi, veri e propri "palestre" per addestrare gli strumenti di sicurezza informatica a gestire la complessità della vita vera.