seed Lingua: requisiti del prodotto

Questa pagina registra i requisiti di prodotto attivi per seed. Non è una seconda pagina di grammatica o di stato dell'implementazione. Il comportamento del linguaggio normativo vive in seed/docs/lang-spec.md; le dichiarazioni implementate e i livelli target sono disponibili in Stato corrente.

Obiettivo del prodotto

seed è un linguaggio di sistema tipizzato staticamente per programmi nativi che necessitano di:

Il prodotto principale è il software di sistema controllato: CLI strumenti, servizi interni, binary/text elaborazione, librerie native e lavoro indipendente ai livelli di destinazione esplicitamente chiusi dalle porte del compilatore.

Non gol

seed non richiede né promette:

Requisiti linguistici

Requisito Criterio di accettazione attuale Prove
Tipi statici con inferenza Ogni programma accettato viene digitato prima di MIR; le interfacce pubbliche preservano i tipi specificazione della lingua e .sdi test
Proprietà prevedibile Copia scalare; le risorse si spostano; clone è esplicito; i proprietari dal vivo puliscono esattamente una volta sulle uscite strutturate Gates 10–11 e test di proprietà
Prestiti sicuri senza sintassi a vita Le visualizzazioni hanno la provenienza lexical/input/receiver e non possono sopravvivere allo spazio di archiviazione di backup ownership/provenance test e interfacce dello schema
Errore di allocazione esplicita Le API di allocazione sicura restituiscono result<..., alloc_error> o un altro errore dichiarato option/result e test della libreria
Accesso ai dati controllato Indicizzazione, affettatura, discriminanti e partizioni modificabili sicure convalidano i loro contratti Gates 6, 16 e 19
Confine non sicuro esplicito Memoria grezza, puntatori, FFI, chiamate di sistema, unioni, atomi, accesso volatile, spazi di indirizzi e assembly richiedono unsafe contratto di sicurezza e test negativi
Semantica di rilascio deterministica --release e --release-small preservano i controlli sicuri a meno che LLVM non li dimostri ridondanti Gate 13 test di profilo
Concorrenza strutturata Il lavoro generato drena ai confini lessicali; il trasferimento e la condivisione richiedono capacità Gate 6 task/runtime test
Guasto ordinario reversibile Opzioni, risultati, suffisso ?e i risultati delle attività digitate preservano la proprietà e la pulizia Gate 6 e Gate 15 test
UTF-8 sorgente e testo Il testo di origine e di proprietà rifiuta il formato errato UTF-8; la lunghezza in byte e i limiti della libreria Unicode rimangono espliciti caricatore e test di testo

Modello di memoria

Il modello comune richiesto è:

  1. Copia di valori con capacità di copia.
  2. Le risorse di proprietà si spostano in base all'assegnazione, alle chiamate, ai resi, alle acquisizioni e all'aggregazione costruzione.
  3. Preso in prestito str, []t, e mut []t le visualizzazioni mantengono la provenienza.
  4. .clone() è esplicito e i suoi effetti allocation/retain fanno parte del appalto pubblico.
  5. La pulizia viene eseguita una volta in ordine inverso di inizializzazione riuscita su strutturato esce.
  6. linear t aggiunge un obbligo esattamente una volta senza modificare la rappresentazione.
  7. Le regioni forniscono un'assegnazione verificata del bump lessicale e rifiutano la fuga sicura proprietari, visualizzazioni e puntatori.
  8. Panic, trap e abort non svolgono né eseguono distruttori lessicali.

Gli attuali dettagli operativi sono documentati in Proprietà.

Requisiti del compilatore

Il compilatore operativo è seed/compiler/llvm. La pipeline richiesta è:

source → lexer/parser → semantic graph → typed HIR/CFG
       → ownership/provenance/effects/loans → cleanup planning/verification
       → MIR → target layout/ABI → verified low MIR → LLVM

Il Linux x86-64 la sostituzione self-hosted è una migrazione controllata attiva in roadmap-self-hosted.md. Fino al suo cutover SH20, seed/compiler/llvm rimane il compilatore operativo e l'oracolo semantico. Le altre porte della piattaforma self-hosted vengono rinviate a dopo la prima Linux x86-64 taglio.

Ogni percorso di interfaccia sorgente e eliminato dal sorgente deve superare la stessa tipizzazione, proprietà, provenienza, effetti, pulizia, ABI e controlli del profilo prima della generazione del codice.

Il compilatore deve fornire:

I compilatori OCaml, QBE, stile TCC e assembly-stub sostituiti rappresentano solo la cronologia di compatibilità e non soddisfano i requisiti attuali del prodotto.

Requisiti di runtime e target

Il supporto target deve essere descritto come una matrice di capacità, non come un valore booleano. L'analisi, LLVM, l'oggetto, l'archivio, la libreria condivisa, l'eseguibile, l'esecuzione ospitata, i servizi di runtime, l'FFI, lo scheduler, gli artefatti del pacchetto e l'evidenza di avvio vengono monitorati separatamente.

La matrice canonica è seed/compiler/llvm/tests/GATE14_TARGET_MATRIX.tsv. Linux x86-64 è la destinazione ospitata chiusa principale. Gate 14 è completo dopo la prova nativa macOS x86-64 richiesta; macOS arm64 ha la riga host nativa verificata separatamente e non sostituisce il requisito di chiusura Intel. WebAssembly/WASI è attualmente solo oggetto.

I profili indipendenti e kernel devono dichiarare i servizi runtime disponibili. Gli effetti di allocazione, blocco, panico, I/O, rete e pianificazione possono essere utilizzati solo quando il profilo selezionato li fornisce.

Requisiti della biblioteca

Il nucleo linguistico rimane piccolo. File, rete, analisi, formattazione, raccolte, attività e wrapper di sistema sono librerie ordinarie con interfacce esplicite anziché integrate nascoste.

Il set di repository operativi si trova sotto seed/compiler/llvm/libs ed è documentato in Riferimento libreria. Le biblioteche devono:

L'albero grove/ di livello superiore più grande è un corpus di compatibilità e porting finché un singolo pacchetto non passa il compilatore operativo e riceve un contratto manifest/interface corrente.

Requisiti degli strumenti

L'avvio del repository e il compilatore diretto insieme devono supportare:

L'eseguibile seed --help rimane autorevole per i flag del compilatore diretto. Il riferimento linguistico documenta l'avvio del repository.

Requisiti di prestazione e qualità

Le dichiarazioni sulle prestazioni richiedono prove controllate. Gli attuali cancelli di chiusura impongono:

L'attuale snapshot multilingue è in Benchmarks. Si tratta di un corpus misurato a livello locale, non di una classifica a livello linguistico.

Lacune attuali del prodotto

Le principali lacune rimanenti nei prodotti sono:

I nuovi requisiti dovrebbero essere aggiunti qui solo quando descrivono l'intento del prodotto. La grammatica appartiene alla specifica della lingua, lo stato di implementazione a status.mde il lavoro del compilatore pianificato in seed/compiler/llvm/ROADMAP.md.