Stato attuale
Questa è la pagina canonica sullo stato dell'implementazione pubblica per seed. La specifica della lingua corrente è seed/docs/lang-spec.md; i suoi capitoli grammaticali e semantici si trovano sotto seed/compiler/llvm. Un elemento della tabella di marcia non viene implementato semplicemente perché proposto; i cancelli completati richiedono la prova di chiusura nominativa.
Compilatore
seed/compiler/llvm è il compilatore e lanciatore del repository operativo. Gates 0-24 sono completi per i loro ambiti registrati. La pipeline verificata è:
source → lexer/parser → semantic graph → typed HIR/CFG
→ ownership/provenance/effects/loans → cleanup planning/verification
→ MIR → target layout/ABI → verified low MIR → LLVM
Importazioni di origine e .sdi l'emissione esegue la stessa catena di sicurezza obbligatoria. Il normale e ASan/UBSan le suite superano 1.496 controlli del compilatore più sette binari di unità alla base attuale. Gate-prove specifiche sono sotto seed/compiler/llvm/tests/GATE*_BASELINE.md.
Compilatore self-hosted
Il self-hosting completo è un percorso attivo Linux x86-64 governato da roadmap-self-hosted.md. Il compilatore operativo LLVM rimane l'oracolo semantico e ABI fino al cutover SH20.
SH0 ha congelato il file Linux x86-64 contratto di bootstrap, limite di dipendenza e tracciabilità. SH1 ha chiuso le librerie di livello compilatore e il substrato host. SH2 è in corso con l'implementazione di token, lexer, AST, parser, formattatore e sezioni minime di comandi frontend. Analisi semantica, IR del compilatore, the LLVM ponte, nativo x86-64/ELF l'emissione, il bootstrap nativo a virgola fissa, il runtime, il linker, la provenienza del rilascio e il passaggio operativo rimangono le porte successive. Non-Linux le porte vengono esplicitamente rinviate fino a dopo il primo passaggio.
Il Linux-l'allocatore nativo utilizza precise classi di lastre da 16 byte a 8 KiB, una cache di lastre vuote limitata a livello di processo e rimuove la mappatura di lastre vuote in eccesso. box<t> è un proprietario a puntatore singolo, mentre ?box<t> utilizza la sua nicchia nulla controllata e quindi occupa anche un puntatore. Schema-11 .sdi preserva la rappresentazione nominale di nicchia nulla attraverso la compilazione separata. Gate 18 interfacce schema-12 aggiungono ricevitori mutabili esclusivi, modelli generici, provenienza di ritorno preso in prestito e contratti fallibili sui limiti dell'applicazione. Gate 19 interfacce schema-13 aggiungono esatto target/profile/runtime identità e organismi pubblici in linea verificati. Gate 20 interfacce schema-14 preservano inoltre costanti scalari, testo, tuple, struct e array annidati immutabili pubblici per i consumatori elisi nel codice sorgente; il compilatore emette valori globali di sola lettura digitati e proiezioni controllate. Gate 21 ha una primitiva di capacità non inizializzata controllata utilizzata internamente dai buffer di byte e I/O; io.input_stream fornisce letture incrementali limitate, copie di crescita geometrica solo prefissi inizializzati e capacità di riserva diretta I/O è coperto dalla sua linea di base.
Gli alberi del compilatore sostituiti sono stati rimossi dopo il cutover. Le loro classificazioni comportamentali rilevanti sopravvivono in compiler/llvm/COMPATIBILITY.md e nelle regressioni migranti; non definiscono la semantica corrente del compilatore.
Gate stato
| Gates | Stato | Risultato |
|---|---|---|
| 0-9 | completo | contratto linguistico, pipeline del compilatore, sicurezza, native/freestanding esecuzione, rafforzamento, cutover operativo |
| 10 | completo | modello copy/move/borrow/clone/drop coerente |
| 11 | completo | propagazione generale place/ownership/provenance tra aggregati, generici, attività, valori di funzione e .sdi |
| 12 | completo | componenti modulari compiler/runtime e scalabilità forzata con controllo completo di 100.000 |
| 13 | completo | profili di rilascio sicuro e corpus di confronto C/Rust riproducibile |
| 14 | completo | Windows chiuso sotto richiesto Vino; macOS chiuso dall'esecuzione Intel nativa richiesta, con arm64 mantenuto come host verificato separatamente |
| 15 | completo | riproducibile package/lock/cache, perseguibile JSON diagnostica, LSP, doc/lint, build incrementali esatte, controlli di pubblicazione e risultati delle attività digitate |
| 16 | completo | sicuro numeric/range/text/buffer/collection ergonomia, staging automatico della libreria principale, riduzione nativa prevedibile e prestazioni applicative rappresentative |
| 17 | completo | artefatti dinamici e transazionali riutilizzabili coerenti con il profilo user/system installazione di binari, librerie e .sdi interfacce |
| 18 | completo | ergonomia delle applicazioni basate sul linguaggio, librerie process/parse/I/O/math/buffer/slice/collection di base e migrazioni sicure dei benchmark |
| 19 | completo | artefatti coerenti con il profilo, corpi in linea tra moduli, partizioni modificabili disgiunte controllate, archivi di campi diretti e metadati di alias con ambito di prova |
| 20 | completo | costanti aggregate immutabili ricorsive, dati statici indirizzabili e interfacce schema-14 elise dal codice sorgente |
| 21 | completo | buffer di proprietà in grado di riconoscere la capacità, trasferimento del prefisso inizializzato, crescita geometrica e streaming I/O |
| 22 | completo | callback qualificati per l'effetto più attività strutturata neutrale in termini di runtime ABI e errore di allocazione esplicita dell'attività |
| 23 | completo | cortocircuito da sinistra a destra &&/` |
| 24 | completo | chiusure senza fuga, move/copy acquisizioni, callback mantenuti in scatola, interfacce schema-16 e associazioni mobili |
Codifica sorgente e testo
.sdi file sorgente sono UTF-8 per contratto.stringè posseduto valido UTF-8.strè una vista UTF-8 di sola lettura presa in prestito con puntatore più lunghezza byte.- I valori letterali stringa hanno un archivio statico e digitano
str. - I commenti e il contenuto delle stringhe possono contenere Unicode.
lenriporta la lunghezza in byte. Il pacchetto ordinariotextconvalida e esegue l'iterazione degli scalari Unicode senza allocazione; la segmentazione del grafema, la normalizzazione e il comportamento locale rimangono lavoro della biblioteca.- Gli identificatori di origine rimangono intenzionalmente minuscoli ASCII; costanti sono ASCII maiuscole e minuscole.
Il caricatore convalida ogni sorgente come canonica UTF-8 prima della lexing e rifiuta i NUL incorporati, le codifiche troppo lunghe, i surrogati, il troncamento e i valori oltre lo scalare massimo di Unicode. Vengono convalidati anche i valori letterali stringa decodificati.
È implementata l'interpolazione f-string di fase 1 str, preso in prestito string, boole numeri interi incorporati. La costruzione produce effimero format_args senza allocazione heap; usi di produzione diretta file.write_*_format, mentre .to_string()? materializza esplicitamente una stringa di proprietà. La fase 2 implementa la conversione della base intera; delimitato width/fill/alignment; esatto fisso e deterministico scientific/general f32/f64 conversione senza libc; e la formattazione personalizzata statica diretta tramite prestiti senza allocazione display.display() -> str e debug.debug() -> str implementazioni.
Superficie linguistica implementata
- immutable/mutable/linear vincoli e costanti del serpente superiore;
- funzioni, metodi del ricevitore implicito, distruttori, generici, tratti, impl;
- strutture serpente inferiore, ADT, unioni grezze, array, fette, tuple, option/result;
- blocchi orientati all'espressione e
if, inoltrewhile, senza assegnazionefor, esaustivomatch,break,continuee prestoret; - controllata l'indicizzazione per tutte le larghezze intere integrate; le letture dell'indice variabile lo sono
supportato sui parametri della funzione
[]u8e sulla sezione originale dabytes.view(). Applica l'ambito delle viste modificabili all'interno di un blocco e utilizza i parametri della funzione[]u8di sola lettura o la sezione originale per l'accesso all'indice variabile; - memoria grezza
unsafeesplicita, atomici, accesso volatile, spazi di indirizzi, FFI, chiamate di sistema, accesso raw union e intrinseci dell'architettura; - strutturato
spawn, regioni, profili di runtime e compilazione separata. - chiusure senza fuga senza allocazione, chiusure boxed esplicite fallibili, effetti di callback dedotti e contratti richiamabili con elisione della sorgente schema-16;
- stringhe f digitate phase-1/2 con valutazione singola, escape con parentesi graffe letterali, specifiche del formato, statiche display/debug tratti distintivi, produzione segmentata senza allocazione e materializzazione posseduta fallibile.
La grammatica pulita attualmente non implementa l'eredità enum, nomi nominali in maiuscolo, return, # commenti, integrati chan<t>/send/recv, spawn distaccato, chiusure ricorsive, generatori, macro, eccezioni, async/await o sintassi della durata.
Proprietà e sicurezza
Il modello comune è: copiare scalari, spostare risorse, prendere in prestito visualizzazioni a copia zero e clonare esplicitamente. La pulizia viene eseguita esattamente una volta sulle uscite strutturate. Il panico, la trappola e l'interruzione non si rilassano né si svolgono nel lessico cleanup/destructors.
Ownership/place/provenance i fatti si propagano attraverso alias, blocchi, rami, punti fissi del loop, fields/nested campi, indici di array noti, tuple, ADT, option/result, aggregati generici, channels/tasks, funzione values/indirect chiamate, parameters/returns e eliso alla fonte .sdi. Gli spostamenti dell'indice dinamico degli elementi di risorsa rimangono rifiutati.
linear t ha una semantica esattamente una volta nelle stesse forme implementate. Le viste @borrow receiver/input-derived mantengono la provenienza senza sintassi di durata. Il codice non sicuro presuppone obblighi grezzi espliciti ma non disabilita la proprietà sicura dei valori circostanti.
Le chiusure semplici sono stack-backed e senza escape. Cattura la copia o lo sposta nel primo ordine di uso lessicale, rimane immutabile e viene pulito esattamente una volta. box |...| alloca esplicitamente un richiamabile di escape e restituisce result<box fn(...) -> t, alloc_error>; i callable boxed sono di solo spostamento, non clonabili, non inviabili e confinati nella regione quando viene allocata la regione. I callback seed utilizzano descrittori code/environment a puntatore singolo, mentre i puntatori alle funzioni della piattaforma rimangono sottili e accettano solo funzioni con nome.
Testo, byte e regioni
- mosse
stringdi proprietà;.clone()crea un proprietario indipendente esplicito; bytesè una proprietà binaria mutabile unica;shared_bytesè un handle condiviso di sola lettura con esplicitamente retain/clone;- le visualizzazioni owner/array compatibili sono prive di allocazione e la provenienza è controllata;
- le conversioni possedute restituiscono
result<..., alloc_error>; region(capacity) { body }fornisce l'allocazione dei bump controllati allineati nidificati;- la cassaforte values/views/pointers legata ad una regione non può sfuggirle;
- le attività legate alla regione si uniscono prima della pulizia della regione.
str.sliceimpone UTF-8 confini, mentrestr.equale delimitatore ASCII la ricerca rimane esente da assegnazione;- l'ordinario
text,box,vec, esorti pacchetti forniscono token sicuri intervalli, proprietà ricorsiva, mutazione controllata e ordinamento statico.
Concorrenza
spawn è strutturato: i gruppi di attività si esauriscono su ogni bordo lasciando il loro proprietario lessicale prima della pulizia. Cattura la copia o lo spostamento in base alle capacità; la condivisione è esplicita e i valori tra attività richiedono send/sync a seconda dei casi.
compiler/llvm/libs/task è una libreria generica ordinaria che fornisce canali di suddivisione della proprietà, unioni di attività one-shot digitate, eventi, cancellazioni, gruppi di attesa, semafori, barriere e blocchi. Il corpo generato direttamente ABI ritorna ancora void, quindi suffisso ? non può attraversare direttamente il confine dell'attività. Gate 15 aggiunge la superficie della libreria tipizzata task_result_new, task_result_complete_ok/error, e task_result_wait sugli stessi punti finali lineari e lessicalmente uniti. Possono essere utilizzati valori di funzione e chiusure dedotte @no_runtime_effects fn(...) richiedere un riepilogo completo e vuoto degli effetti di runtime; le chiamate indirette sconosciute e non qualificate rimangono rifiutate nei profili limitati. Le richiamate boxed non possono incrociarsi spawn perché non forniscono send.
Biblioteche e collegamenti
.sdi le interfacce preservano i tipi pubblici, generici templates/common istanze, effetti, proprietà, provenienza, distruttore, clone, bersaglio, build/runtime profilo, dipendenza e ABI identità. Lo schema 13 preserva i corpi in linea e gli hash dei corpi verificati; lo schema 14 aggiunge payload costanti immutabili ricorsivi pubblici verificati; lo schema 15 aggiunge contratti ad effetto richiamabili; lo schema 16 aggiunge firme richiamabili in un riquadro, corpi di chiusura in linea e identità di rappresentazione richiamabile. Un wrapper di libreria non pubblica una specializzazione del metodo orfano il cui proprietario del metodo generico proviene da un pacchetto importato; i consumatori elisi alla fonte rimaterializzano quell'istanza dal modello della dipendenza. Ospitato seed le librerie si collegano dinamicamente per impostazione predefinita; --static seleziona statico seed dipendenze. La pubblicazione degli artefatti è atomica e corrotta, con schema obsoleto, profilo, destinazione o ABI-Le interfacce non corrispondenti non vengono chiuse.
Il launcher incrementale build/run il percorso mette in scena pacchetti sicuri per i tipizzati I/O, visualizzazioni di processi, analisi di numeri interi, matematica portabile, buffer di byte, sezioni, box, rete, serializzazione, attività, raccolte generiche e wrapper di sistema. Gate 18 aggiunge lo schema-12 @mut vettori e sicuri benchmark/application consumatori; Gate 19 aggiunge lo schema-13 in linea math/system foglie e partizioni di fette disgiunte. Questi rimangono normali pacchetti importati, non linguaggi integrati nascosti.
Risoluzione del registro, lockfiles/download cache, pacchetto add/update, potatura della cache, generazione di documentazione, LSP e incrementale object/interface cache sono implementati da Gate 15 utensili. Gate 17 fasi del nucleo nudo e delle dipendenze manifeste ordinarie profile/target-qualified archivia dinamicamente per impostazione predefinita, riutilizza le generazioni installate senza ricompilazione e implementa la transazione user/system seed install più consapevole dei riferimenti seed uninstall. Esplicito --static e --static=all rimangono scelte di collegamento indipendenti.
Costruisci profili e prestazioni
--release utilizza seed-safe-o2-v1; --release-small utilizza seed-safe-oz-v1. Limiti, discriminanti, provenienza, proprietà e protezioni per la pulizia rimangono a meno che LLVM non li dimostri ridondanti. ThinLTO, PGO e collegamento statico sono opzioni esplicite indipendenti. Non esiste alcun profilo operativo non controllato.
Gate 13 confronta carichi di lavoro equivalenti numerici, di analisi, di raccolta, allocation/string, di attività strutturate, di rete, di chiamate dinamiche, di avvio, RSS e di dimensioni di artefatti con Clang C e Rust. Sull'host di chiusura, seed rimane entro l'obiettivo di runtime ordinario dello 0-10% per il corpus imposto. Questa è una prova del carico di lavoro controllato, non un'affermazione universale secondo cui ogni programma seed batte C/Rust.
Gate La mediana del controllo completo da 100.000 host di chiusura di 12 è di 0,41 s a 177.504 KiB contro budget di 3,00 s e 196.608 KiB. Vedi GATE12_BASELINE.md e GATE13_BASELINE.md per hardware/toolchain metadati e interpretazione.
Stato dell'obiettivo
Il supporto degli oggetti non è uguale al supporto ospitato degli eseguibili. La matrice canonica è compiler/llvm/tests/GATE14_TARGET_MATRIX.tsv.
| Obiettivo | Livello attuale dichiarato |
|---|---|
| Linux x86-64 | ospitato chiuso compile/link/run, static/dynamic librerie, impostazione predefinita nativa priva di libc |
| Linux AArch64 | ospitato compile/link/runtime con policy runner; Comportamento static/dynamic coperto al livello dichiarato |
| Linux RISC-V64 | riga ospitata di soli oggetti; il bagagliaio indipendente è separato |
| Windows x86-64 | deterministico PE/DLL, servizi runtime inclusi owned/shared byte e file read/seek, FFI con parametri aggregati Microsoft x64, attività strutturate, rete, pacchetto ABI, rafforzamento del caricatore e riposizionabile SDL3 passaggio del pacchetto di giochi con Wine richiesto |
| macOS x86-64 | Gate 14 chiuso dall'eseguibile Intel nativo richiesto, dylib/static, runtime, pthread, rete, pacchetto ABI e prove del caricatore |
| macOS braccio64 | Nativo basato su SDK compile/link/run, runtime/ABI, scheduler, networking e prove di pacchetto su Apple Silicon; mantenuto separatamente dalla riga di chiusura Intel richiesta |
| Android braccio64 | LLVM/object/static/shared/executable obiettivi più runtime JNI, packaging Gradle, API 21/29/37 Esecuzione ARM64 AVD, API-37 scenari di rilascio, prove del ciclo di vita strumentate dall'allocatore Garden e un ambito API-35 slice del dispositivo fisico; MP4 lifecycle/services trasmettere tutti e tre gli AVD del fumo |
| Android x86-64 | LLVM/object/static/shared/executable compile/link compatibilità; no emulator/device richiesta di esecuzione |
| iOS braccio64 | LLVM/object/archive/device-link e la prova del consumatore C/Swift/XCFramework generata, oltre all'oggetto Seed Garden model/assets/Apple-audio completo e alla creazione incrociata del pacchetto di applicazioni non firmato; L'esecuzione fisica del Garden, la firma e le prove di rilascio rimangono nell'ambito del lavoro del dispositivo |
| iOS braccio simulatore64 | iOS Simulatore 26.5 ARM64 lifecycle/services, bytes/async, Interfaccia utente adattiva phone/tablet, input, rotazione, semantica, accessibilità XCUITest, esecuzione core MP4 condivisa e Seed Garden context/persistence/continuous-frame/Apple-AudioQueue copertura del prodotto |
| wasm32-WASI | riga a livello di oggetto con servizi ospitati assenti mantenuta esplicita nella matrice Gate 14 |
| libera installazione x86-64/AArch64/RISC-V64 | prova di avvio senza libc sotto QEMU a Gate 7 livelli dichiarati |
Gate 14 richiede Intel Runner, SDK, ABI, FFI, libreria dinamica, compilazione separata, corruzione, caricatore e regressione vengono superati. macOS arm64 rimane un host nativo etichettato in modo indipendente piuttosto che un sostituto della riga di chiusura Intel.
CLI e utensili
Il launcher del repository fornisce new, check, format, incrementale build, run, test, risoluzione del pacchetto, install/uninstall, doc, lint, LSP e publish --check, oltre all'inoltro diretto del flag del compilatore e file.sd -o output. Registro remoto publication/signing non è implementato; il comando di pubblicazione esistente esegue solo la convalida locale.
Il compilatore diretto formatta l'origine, stampa semantic/IR forme, emits/reads/hashes .sdi, emette LLVM/object/shared/static/binary artefatti, installazioni target/ABI- librerie qualificate ed esegue target supportati. Il suo aiuto eseguibile è l'elenco dei flag autorevoli:
seed/compiler/llvm/build/seed --help
Documentazione fonte di verità
| Argomento | Pagina |
|---|---|
| Specifica della lingua attuale | seed/docs/lang-spec.md |
| Grammatica | seed/compiler/llvm/LANGUAGE_GRAMMAR.md |
| Semantica | seed/compiler/llvm/SEMANTIC_RULES.md |
| Utente syntax/CLI | Riferimento lingua |
| Proprietà | Proprietà |
| Integrazioni principali | Core integrati |
| Runtime/backend | Primitive di sistema |
| Gates | seed/compiler/llvm/ROADMAP.md |
I documenti storici possono descrivere llvm-v1, il prototipo v2 o directory di stub di assembly che non esistono più. Devono essere etichettati esplicitamente e non devono essere utilizzati come guida corrente in un linguaggio pulito.