Repository navigation
Parte I Primi passi
Triad è un linguaggio di programmazione autonomo che unisce tre paradigmi in una sintassi a blocchi:
| influenza | idea ripresa in Triad |
|---|---|
| Julia |
function … end, struct, tipi con ::, multiple dispatch, operatori come funzioni, if/for/while/let
|
| Prolog |
fact, rule, unificazione con occurs-check, backtracking, solve con variabili logiche ?x
|
| Lisp | codice come dato (Node), :( … )/quote con $, macro |
A questi si aggiungono, come parte del linguaggio e non di una libreria: errori come dati
(Err), contratti (requires/ensures), budget (with budget), tracce
(with trace) ed effetti dichiarati (!io, !state).
Lo standard definisce due profili di conformità (SPEC §16.1):
-
Triad-Core (
SPEC-CORE.md): interi, Bool, stringhe, simboli,nothing, liste, funzioni, lambda e chiusure,if/elseif/else,while,let,begin, ternario,return/break/continue, più alcuni primitivi di bootstrap. È abbastanza piccolo da essere implementato in codice macchina scritto a mano e abbastanza espressivo da scriverci l'interprete di tutto Triad. -
Triad-Full (
SPEC.md): tutto il linguaggio.
Ogni programma Triad-Core (esclusi i primitivi di bootstrap) è anche un programma Triad-Full valido e deve comportarsi allo stesso modo.
Triad non vuole dipendere da nessun linguaggio ospite. Il piano (BOOTSTRAP.md):
S0 seed: interprete Triad-Core in codice macchina x86-64 (dump esadecimale nel repo)
S1 interprete di tutto Triad scritto in Triad-Core (selfhost/, in corso)
S2 compilatore nativo scritto in Triad (non iniziato)
S3 compilatore self-hosted: S2 compilato da S2 (non iniziato)
S4 Triad completo: REPL, CLI, tooling, parità Linux (non iniziato)
Gli strumenti in Node.js (seed/dev/*.js, conformance/run.mjs, cli/) sono strumenti di
sviluppo: aiutano a generare e verificare, ma non fanno parte della catena S0→S4.
- Node.js ≥ 18 (la CI usa Node 20) per l'interprete JS, il runner di conformance e la CLI.
- Su Windows, nient'altro per il seed:
seed.exesi ottiene decodificandoseed.hexconcertutil. - Git per clonare il repository:
git clone https://github.com/GPuntobit/triad2.0.git.
| piattaforma | comando |
|---|---|
| Linux / macOS | node seed/dev/triad_core.cjs file.triad arg1 arg2 |
| Windows (seed) |
seed\windows-x86_64\seed.exe file.triad oppure bin\triad.cmd file.triad
|
| qualsiasi (stdin, interprete JS) | echo 'println(7 * 6)' | node seed/dev/triad_core.cjs - |
Esempi pronti che girano oggi: tutti i conformance/core/cases/*/program.td.
node seed/dev/triad_core.cjs conformance/core/cases/ricorsione/program.td # 120, 55bin\triad.cmd conformance\core\cases\ricorsione\program.tdIl sorgente del seed è il dump esadecimale; l'eseguibile si ottiene con un decodificatore di sistema:
Remove-Item seed\windows-x86_64\seed.exe -ErrorAction SilentlyContinue
certutil -decodehex seed\windows-x86_64\seed.hex seed\windows-x86_64\seed.exe# Linux: seed ELF allo stadio E0 (stampa solo "Triad seed Linux OK")
xxd -r -p seed/linux-x86_64/seed.hex seed/linux-x86_64/seed && chmod +x seed/linux-x86_64/seedAggiungendo bin/ al PATH si usa triad file.triad. I launcher cercano, in ordine:
-
bin/triad-native(eseguibile standalone, non ancora prodotto: arriverà con S2–S3); -
seed/<piattaforma>/seed(su Windowsseed\windows-x86_64\seed.exe).
Su Linux il launcher trova il seed ELF E0, che non interpreta ancora programmi: per
eseguire codice su Linux usa direttamente l'interprete JS. triad --build stampa un messaggio
ed esce con codice 2.
| codice | significato |
|---|---|
0 |
successo |
1 |
errore di parsing o di esecuzione (messaggio su stderr), file non leggibile |
2 |
uso non valido (es. nessun file) |
Le opzioni di SPEC §14 (-e, -E, -l, -i, --tree, --help, REPL) non sono ancora
implementate: il seed Windows esce con codice 0 senza output, l'interprete JS le tratta come
nome di file.
bin/triad-cli status # ambiente e seed trovato (Windows: bin\triad-cli.cmd)
bin/triad-cli test conformance # conformance Core
bin/triad-cli ai verify -v # verifica le soluzioni di ai/tasks/
bin/triad-cli seed generate windows # rigenera seed.hex e stampa lo SHA-256
node conformance/run.mjs # runner di conformance diretto (Core)I launcher bin/triad-cli* eseguono npm install in cli/ al primo avvio. In alternativa si
usa l'eseguibile standalone triad-cli.exe / triad-cli allegato alla
release beta. Dettagli nel
capitolo 39.
Crea ciao.triad:
#!/usr/bin/env triad
# il mio primo programma Triad
nome = "Triad"
println("ciao, " * nome)
println(6 * 7)Output:
ciao, Triad
42
Eseguilo:
node seed/dev/triad_core.cjs ciao.triad # Linux/macOSseed\windows-x86_64\seed.exe ciao.triad # WindowsCosa notare:
- la prima riga
#!(shebang) è ignorata: inizia con#, quindi è un commento; -
printlnstampa i suoi argomenti senza separatori e aggiunge un a capo; -
*tra stringhe è la concatenazione (non+); - non c'è una funzione
main: le istruzioni al top level si eseguono in ordine.
Gli argomenti dopo il nome del file sono in ARGS, una lista di stringhe (senza il nome del
programma). Esempio con l'interprete JS:
printf 'println(ARGS)\nprintln(length(ARGS))\n' > args.triad
node seed/dev/triad_core.cjs args.triad uno due # [uno, due] poi 2Il seed Windows documenta solo l'uso
seed.exe FILE:ARGSnon è tra le funzionalità elencate inseed/windows-x86_64/README.md. Usa l'interprete JS per i programmi con argomenti.
- scrivi il programma usando solo Triad-Core (Parte II);
- eseguilo con l'interprete JS (
node seed/dev/triad_core.cjs); - se deve girare anche sul seed Windows, controlla la tabella del capitolo 15;
- se è un comportamento del linguaggio da fissare, trasformalo in un caso di conformance (capitolo 38).
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