Repository navigation
Libro 00 Prefazione
Questo libro racconta Triad: un linguaggio di programmazione giovane, nato con un'ambizione precisa e un po' ostinata. Non vuole essere l'ennesimo dialetto ospitato da un altro linguaggio, né una libreria travestita da sintassi. Vuole essere un linguaggio autonomo, definito da una specifica scritta, verificato da una suite di test che chiunque può eseguire, e capace, un giorno, di compilare se stesso partendo da poche migliaia di byte di codice macchina scritti a mano.
È un'ambizione che si capisce meglio leggendo il codice che la sta realizzando. Per questo il libro ha due anime. La prima insegna a programmare in Triad: parte dai mattoni più semplici, i numeri e le variabili, e arriva fino alle chiusure, alle liste, alla manipolazione dei byte di una stringa e alla costruzione di un piccolo interprete. La seconda accompagna il lettore dentro il progetto: come è fatta la suite di conformità, come lavora l'interprete di riferimento, come si scrive un interprete in codice macchina senza assembler, come si prepara il salto verso l'auto-ospitalità.
A chi sa già programmare in almeno un linguaggio e vuole capire Triad a fondo, non solo usarlo. Non serve conoscere Julia, Prolog o Lisp, anche se chi li conosce riconoscerà molte idee; non serve conoscere l'assembly x86-64 per leggere la quarta parte, anche se aiuta. Ogni concetto viene introdotto spiegando prima perché esiste, poi come si usa, infine dove lo si trova nel repository.
- Parte prima — Fondamenti. Che cos'è Triad, quali promesse fa, come è diviso in due profili (Core e Full) e come si prepara l'ambiente per scrivere il primo programma.
- Parte seconda — Programmare in Triad-Core. Il cuore pratico del libro. Triad-Core è la parte del linguaggio che oggi si può eseguire davvero; ogni esempio di questa parte è stato eseguito e il suo output è riportato fedelmente. Si chiude con un progetto guidato: un tokenizer e un valutatore di espressioni scritti in Triad.
- Parte terza — Il linguaggio completo. Triad-Full: tipi e multiple dispatch, programmazione logica, codice come dato e macro, e le "garanzie" (errori come dati, contratti, budget, tracce, effetti). Questa parte descrive lo standard: i programmi non girano ancora sul runtime attuale, e il testo lo dice ogni volta.
- Parte quarta — Dentro il progetto. L'anatomia del repository, l'interprete di riferimento, il seed in codice macchina, il lavoro verso il self-hosting, gli strumenti di sviluppo.
In fondo trovi le appendici: il riferimento dei builtin, i cataloghi completi dei casi di
conformità, i sorgenti degli esempi e di selfhost/, le copie dei documenti normativi, un indice
analitico e un manuale di consultazione rapida.
Gli esempi di codice sono scritti così:
println("ciao")Quando un esempio è seguito dalla parola Output: e da un riquadro di testo, quel testo è
esattamente ciò che il programma stampa, verificato eseguendolo con l'interprete di riferimento
node seed/dev/triad_core.cjs:
println(6 * 7)Output:
42
Gli esempi della parte terza riportano invece, quando c'è, l'output di riferimento (i "golden" della suite Full), segnalato come tale.
I riquadri che iniziano con Nota, Attenzione o Perché contengono approfondimenti: si possono saltare a una prima lettura, ma spiegano spesso le scelte di progetto più interessanti.
Triad è in costruzione, e un libro onesto deve dirlo. Oggi esistono uno standard completo
(SPEC.md), un sottoinsieme eseguibile (Triad-Core, SPEC-CORE.md), un interprete in codice
macchina per Windows che ne esegue gran parte, un interprete di riferimento in JavaScript usato
per lo sviluppo, e i primi passi di un interprete scritto in Triad stesso. Il resto è strada da
percorrere. Dove il libro descrive qualcosa che non gira ancora, lo dichiara; dove descrive
qualcosa che gira, lo dimostra.
Buona lettura.
Parte prima
Parte seconda 4. Le parole del linguaggio 5. Valori e tipi 6. Espressioni, operatori e variabili 7. Decidere e ripetere 8. Funzioni e ricorsione 9. Lambda, chiusure e visibilità dei nomi 10. Liste e dati strutturati 11. Stringhe, simboli e byte 12. Quando le cose vanno storte 13. Progetto: un piccolo interprete
Parte terza 14. Tipi, struct e multiple dispatch 15. Programmazione logica 16. Codice come dato e macro 17. Garanzie, costrutti Full e interfaccia
Parte quarta 18. Anatomia del progetto e contratto di conformità 19. L'interprete di riferimento 20. Il seed in codice macchina 21. Verso il self-hosting 22. Gli strumenti di sviluppo
Appendici
- Riferimento dei builtin Core
- Catalogo conformance Core
- Catalogo conformance Full
- Sorgenti degli esempi
- Sorgenti self-hosted
- Documenti di riferimento
- Indice analitico
Manuale di consultazione