Esempi
Tutti i programmi di esempio, con il codice, i comandi per eseguirli e i risultati verificati dai test, quando disponibili.
Il sito legge il codice dai file del progetto. Gli esempi dopo il primo gruppo servono anche a verificare il compilatore: a ogni modifica vengono compilati ed eseguiti in tre configurazioni. Quando un programma ha un risultato atteso, la pagina lo mostra sotto il comando e i test lo confrontano byte per byte con quello ottenuto durante l’esecuzione. Se manca una libreria C necessaria, i test saltano l’esempio.
Comincia dal primo gruppo: ogni esempio spiega un aspetto del linguaggio, seguendo un ordine di lettura. Questi file vengono controllati dal compilatore, ma il loro output non viene ancora verificato dai test. Nei gruppi successivi trovi programmi più completi, tra cui un lettore di JSON, un interprete, un registro contabile in SQLite e calcoli con librerie grafiche.
Da dove partire · Lettura e analisi del testo · Numeri e algoritmi · Strutture dati · File e riga di comando · Librerie C · Thread · Giochi e simulazioni
- 68programmi
- 120file
- 18.836righe
Da dove partire
-
00-firstIl primo programma eseguito dal compilatore: stampa un numero.
Leggi il codice -
01-pointsCome creare record e chiamare una funzione con la sintassi di un metodo.
Leggi il codice -
02-tokensUn valore che può assumere forme diverse e un match per gestirle tutte.
Leggi il codice -
03-fallibleGli errori sono valori con un tipo: Heroes non usa null o eccezioni.
Leggi il codice -
04-loopsDue modi per ripetere operazioni, con un segno esplicito per ogni modifica a un valore.
Leggi il codice -
05-mutationOgni valore è una copia indipendente: modificarne uno non cambia gli altri.
Leggi il codice -
06-genericsUna funzione può lavorare con tipi diversi, che il compilatore deduce a ogni chiamata.
Leggi il codice -
07-stringsCome leggere i byte di una stringa e come scorrerne i caratteri.
Leggi il codice -
08-ffiCome usare le librerie C per le funzioni che Heroes non include.
Leggi il codice -
09-holesCon ??? puoi lasciare un’espressione incompleta e chiedere al compilatore quale tipo serve.
Leggi il codice -
10-mapsLa ricerca in una mappa restituisce un valore oppure un errore se la chiave manca.
Leggi il codice -
11-treesUn albero di espressioni, con i nodi figli conservati in array.
Leggi il codice -
12-interpolationMettere un valore dentro una stringa, e lasciare che il compilatore dica quando non ha un testo.
Leggi il codice -
13-leasePassare a una libreria C un testo che quella terrà, e dire quando si è finito.
Leggi il codice
Lettura e analisi del testo
-
calculatorUna calcolatrice che legge e risolve espressioni aritmetiche con variabili.
Leggi il codice -
interpreterUn interprete che legge, analizza ed esegue un piccolo linguaggio.
Leggi il codice -
jsonUn lettore di JSON che ricostruisce la struttura del documento e lo riscrive in un formato uniforme.
Leggi il codice -
markdownUn programma che converte Markdown in testo semplice, diviso in quattro moduli.
Leggi il codice -
csvUn lettore di file CSV che gestisce virgole e virgolette anche dentro i campi.
Leggi il codice -
iniUn lettore di file di configurazione INI che distingue i diversi errori di formato.
Leggi il codice -
templateUn programma che inserisce valori in un modello di testo usando una mappa.
Leggi il codice -
rpnUna calcolatrice in notazione polacca inversa, dove gli operatori seguono i numeri.
Leggi il codice -
assemblerUn programma che traduce semplici istruzioni e le esegue su una macchina a registri.
Leggi il codice -
romanUn programma che converte numeri interi in numeri romani e viceversa.
Leggi il codice -
wordsUn programma che conta quante volte compare ogni parola in un testo.
Leggi il codice -
wrapUn programma che manda a capo il testo entro una larghezza prestabilita.
Leggi il codice
Numeri e algoritmi
-
sieveUn programma che trova i numeri primi eliminando i multipli, con risultati verificati su fonti indipendenti.
Leggi il codice -
nbodyUna simulazione del moto di cinque corpi sotto l’effetto della gravità.
Leggi il codice -
spectralIl valore singolare massimo di una matrice, calcolato senza conservarla tutta in memoria.
Leggi il codice -
fannkuchTutte le disposizioni di sette carte, capovolte a gruppi finché la carta uno arriva in cima.
Leggi il codice -
binarytreesUn programma che costruisce alberi binari, li percorre e ne libera la memoria.
Leggi il codice -
checksumCRC-32 e Adler-32 per controllare i dati, Base64 per convertirli in testo e recuperarli.
Leggi il codice -
diffUn programma che confronta due versioni di un testo e trova la sequenza più lunga comune a entrambe.
Leggi il codice -
datesUn programma che calcola i giorni tra due date e riconosce gli anni bisestili.
Leggi il codice -
floatsCome riconoscere e gestire infinito e NaN nei calcoli in virgola mobile.
Leggi il codice -
widthsCome convertire numeri tra tipi con dimensioni diverse e gestire i valori che non rientrano nel tipo scelto.
Leggi il codice -
paletteUn programma che rappresenta i colori con numeri interi e ne separa o combina le componenti.
Leggi il codice
Strutture dati
-
queryUn programma che genera una tabella con migliaia di righe, la salva, la rilegge e ne interroga i dati.
Leggi il codice -
spreadsheetUn programma che legge un foglio di calcolo e ne valuta le formule.
Leggi il codice -
treeUn’espressione rappresentata come albero, per calcolarne il valore, misurarne la profondità e stamparla.
Leggi il codice -
routesUn programma che trova il percorso più breve tra due stazioni.
Leggi il codice -
deckUn mazzo di carte o numeri da distribuire, tagliare, invertire e mescolare.
Leggi il codice -
readingsUn riepilogo di una settimana di rilevazioni di sensori, con map, filter, fold, find, any e all.
Leggi il codice -
shapesUn programma diviso in moduli su più livelli di cartelle, per verificare come vengono risolti i percorsi.
Leggi il codice
File e riga di comando
-
todoUna lista di cose da fare salvata in un file.
Leggi il codice -
logsUn programma che legge un file di log e ne produce un riepilogo.
Leggi il codice -
argvUn programma che legge gli argomenti della riga di comando in due modi.
Leggi il codice -
tallyUn programma che conta righe, parole e byte ricevuti dallo standard input.
Leggi il codice -
pipelineUn programma che legge righe di testo e produce un report usando due moduli con lo stesso nome.
Leggi il codice
Librerie C
-
sqliteUn programma Heroes che apre, interroga e chiude un database SQLite.
Leggi il codice -
ledgerUn registro contabile in SQLite, con i totali calcolati e verificati anche in Heroes.
Leggi il codice -
curlUn programma Heroes che chiama libcurl, anche con un numero variabile di argomenti.
Leggi il codice -
raylibUn programma che usa raylib per fare calcoli su colori, punti e rettangoli, passando strutture C per valore.
Leggi il codice -
sdlUn programma che chiama SDL3 da Heroes e verifica la disponibilità della libreria.
Leggi il codice -
ctimeAnno, mese, giorno e ora letti da una struct del C, una struttura che li raggruppa.
Leggi il codice
Thread
-
threadsCome avviare thread, passare loro dati e raccogliere i risultati.
Leggi il codice -
mandelbrotUn programma che conta le iterazioni per calcolare l’insieme di Mandelbrot, con più thread.
Leggi il codice -
matmulLa moltiplicazione di due matrici, con un gruppo di righe assegnato a ogni thread.
Leggi il codice -
dotproductIl prodotto scalare di due vettori, calcolato dividendo il lavoro tra più thread.
Leggi il codice -
montecarloUna stima di pi greco ottenuta simulando lanci casuali, con più thread.
Leggi il codice -
nqueensIn quanti modi si possono disporre otto regine su una scacchiera senza che si attacchino.
Leggi il codice -
collatzLa catena di Collatz più lunga sotto un limite, cercata con più thread in parallelo.
Leggi il codice -
firsthitLa prima posizione che soddisfa una condizione, cercata in un intervallo con più thread.
Leggi il codice -
histogramQuante volte compare ogni cifra, con un thread dedicato a ciascuna.
Leggi il codice -
wordbandsUn programma che conta le parole in testi creati separatamente da più thread.
Leggi il codice
Giochi e simulazioni
-
adventureUn’avventura testuale eseguita con una sequenza di comandi prestabilita.
Leggi il codice -
mazeUn programma che trova e disegna il percorso più breve per uscire da un labirinto.
Leggi il codice -
boardUna simulazione di celle che nascono e muoiono, con una tabella di punteggi organizzata per due chiavi.
Leggi il codice
Poi: il linguaggio, un’idea alla volta, oppure la specifica completa in un file da dare a un modello. Come eseguire un esempio.