v0.2.0 MIT Spec normativa Conformance 33/33

Un linguaggio a sé, definito dal suo standard

Triad è un linguaggio di programmazione autonomo: sintassi a blocchi e tipi dichiarati, multiple dispatch, programmazione logica integrata (fact, rule, solve), codice come dato. Errori, contratti, budget, tracce ed effetti sono parte del linguaggio, non di una libreria.

struct Point x::Float y::Float end function dist(a::Point, b::Point)::Float requires a.x != b.x || a.y != b.y sqrt((a.x - b.x)^2 + (a.y - b.y)^2) end fact parent(:alice, :bob) rule grandparent(?x, ?z) :- parent(?x, ?y), parent(?y, ?z) result = solve grandparent(:alice, ?who) limit 5 println(result) # [{who = :dave}]

Perché Triad

Una specifica normativa indipendente dall'implementazione, una suite di conformità eseguibile, un percorso di bootstrap verso il self-hosting.

📜

Specifica normativa

SPEC.md (0.2.0): lessico, grammatica, tipi, semantica, esecuzione, errori, contratti, effetti, logica, CLI. §1–§14 e §16 normativi.

✅

Conformance eseguibile

Casi golden con stdout ed exit code attesi. Qualsiasi implementazione (seed in codice macchina, Triad-Core, compilatore nativo) deve passarli.

🧬

Bootstrap autonomo

Seed S0 in codice macchina (PE Windows + ELF Linux). Roadmap S1–S4 verso Triad senza linguaggi ospiti. Vedi BOOTSTRAP.md.

🧠

Logica integrata

fact, rule, unificazione con occurs-check, backtracking, solve con variabili logiche ?x. Come in Prolog, ma nel linguaggio.

🪞

Codice come dato

Albero uniforme Node, quote :( … ) con $, macro. Introspezione e metaprogrammazione native.

🛡️

Contratti ed effetti

requires/ensures, budget (with budget), tracce (with trace), effetti dichiarati (!io, !state). Errori come dati (Err).

Triad-Core in azione

Un programma digitato carattere per carattere ed eseguito con l'interprete JS: l'output mostrato è quello reale.

Soglia di apprendimento

Dai capitoli di TUTORIAL.md e MANUALE.md: Triad-Core si impara facendo, Triad-Full oggi solo leggendo. Alla soglia di Triad-Full la padronanza reale si ferma, mentre quella teorica continua a salire.

Avvio rapido

L'implementazione di riferimento è in Julia (transitoria per il bootstrap), zero pacchetti esterni.

# REPL julia --startup-file=no triad.jl # esegui un file julia --startup-file=no triad.jl examples/assaggio.td # valuta un'espressione julia --startup-file=no triad.jl -E '1 + 2' # launcher (bin/ nel PATH) triad examples/assaggio.td

Documentazione