Statut actuel
Il s'agit de la page canonique publique sur l'état de la mise en œuvre pour seed. La spécification linguistique actuelle est seed/docs/lang-spec.md; ses chapitres de grammaire et de sémantique vivent sous seed/compiler/llvm. Un élément de la feuille de route n’est pas mis en œuvre simplement parce qu’il est proposé ; les portes terminées nécessitent leur preuve de fermeture nommée.
Compilateur
seed/compiler/llvm est le compilateur et lanceur de référentiel opérationnel. Les Gates 0-24 sont complets pour leurs portées enregistrées. Le pipeline vérifié est :
source → lexer/parser → semantic graph → typed HIR/CFG
→ ownership/provenance/effects/loans → cleanup planning/verification
→ MIR → target layout/ABI → verified low MIR → LLVM
Importations d'origine et .sdi émission exécuter la même chaîne de sécurité obligatoire. La normale et ASan/UBSan les suites réussissent 1 496 vérifications du compilateur plus sept binaires unitaires à la base de référence actuelle. Gate-des preuves spécifiques sont sous seed/compiler/llvm/tests/GATE*_BASELINE.md.
Compilateur auto-hébergé
L'auto-hébergement complet est une piste active Linux x86-64 régie par roadmap-self-hosted.md. Le compilateur opérationnel LLVM reste l'oracle sémantique et ABI jusqu'au basculement SH20.
SH0 a gelé le Linux x86-64 Contrat d'amorçage, limite de dépendance et traçabilité. SH1 a fermé les bibliothèques de niveau compilateur et le substrat hôte. SH2 est en cours avec la mise en œuvre de tranches de jeton, lexer, AST, analyseur, formateur et commandes frontales minimales. Analyse sémantique, IR du compilateur, le LLVM pont, natif x86-64/ELF l'émission, l'amorçage natif à virgule fixe, le temps d'exécution, l'éditeur de liens, la provenance de la version et le basculement opérationnel restent des portes ultérieures. Non-Linux les ports sont explicitement différés jusqu'après le premier basculement.
Le Linux-l'allocateur natif utilise des classes de dalles précises de 16 octets à 8 Ko, un cache de dalles vides limité à l'échelle du processus et démappe les dalles vides en excès. box<t> est propriétaire d'un seul pointeur, tandis que ?box<t> utilise sa niche nulle auditée et occupe donc également un pointeur. Schéma-11 .sdi préserve la représentation nominale de niche nulle lors d’une compilation séparée. Gate 18 interfaces schéma-12 ajoutent des récepteurs mutables exclusifs, des modèles génériques, une provenance de retour emprunté et des contrats faillibles de limite d'application. Gate 19 interfaces schéma-13 ajoutent exactement target/profile/runtime identité et organismes publics en ligne vérifiés. Gate 20 interfaces schéma-14 préservent en outre les constantes publiques immuables scalaires, texte, tuple, structure et tableau imbriqué pour les consommateurs à source élidée ; le compilateur émet des globales typées en lecture seule et des projections vérifiées. Gate 21 a une primitive de capacité non initialisée auditée utilisée en interne par les tampons d'octets et I/O; io.input_stream fournit des lectures incrémentielles limitées, des copies de croissance géométrique uniquement les préfixes initialisés et une capacité de réserve directe I/O est couvert par sa ligne de base.
Les arborescences du compilateur remplacées ont été supprimées après le basculement. Leurs classifications comportementales pertinentes survivent dans les régressions compiler/llvm/COMPATIBILITY.md et migrées ; ils ne définissent pas la sémantique actuelle du compilateur.
Gate statut
| Gates | Statut | Résultat |
|---|---|---|
| 0-9 | complet | contrat de langue, pipeline du compilateur, sécurité, native/freestanding exécution, durcissement, basculement opérationnel |
| 10 | complet | cohérent copy/move/borrow/clone/drop modèle |
| 11 | complet | propagation générale de place/ownership/provenance à travers les agrégats, les génériques, les tâches, les valeurs de fonction et .sdi |
| 12 | complet | Composants modulaires compiler/runtime et évolutivité de contrôle complet renforcée à 100 000 |
| 13 | complet | profils de libération sûrs et reproductibles C/Rust corpus de comparaison |
| 14 | complet | Windows fermé sous le vin requis ; macOS fermé par l'exécution Intel native requise, avec arm64 maintenu comme hôte vérifié séparément |
| 15 | complet | reproductible package/lock/cache, exploitable JSON diagnostics, LSP, doc/lint, builds incrémentielles exactes, contrôles de publication et résultats de tâches saisis |
| 16 | complet | en sécurité numeric/range/text/buffer/collection ergonomie, mise en scène automatique de la bibliothèque centrale, réduction native prévisible et performances des applications représentatives |
| 17 | complet | artefacts dynamiques réutilisables et transactionnels cohérents avec le profil user/system installation de binaires, de bibliothèques et .sdi interfaces |
| 18 | complet | ergonomie des applications axée sur le langage, bibliothèques de base process/parse/I/O/math/buffer/slice/collection et migrations de référence sécurisées |
| 19 | complet | artefacts cohérents avec le profil, corps en ligne inter-modules, partitions mutables disjointes vérifiées, magasins de champs directs et métadonnées d'alias à portée de preuve |
| 20 | complet | constantes d'agrégation récursives immuables, données statiques adressables et interfaces à source schéma-14 |
| 21 | complet | Tampons propriétaires sensibles à la capacité, transfert de préfixe initialisé, croissance géométrique et streaming I/O |
| 22 | complet | rappels qualifiés par effet plus tâche structurée neutre en termes d'exécution ABI et échec explicite d'allocation de tâche |
| 23 | complet | court-circuit de gauche à droite &&/` |
| 24 | complet | fermetures sans évasion, move/copy captures, rappels conservés encadrés, interfaces schéma-16 et liaisons mobiles |
Encodage source et texte
.sdles fichiers sources sont UTF-8 par contrat.stringest possédé valide UTF-8.strest une vue UTF-8 empruntée en lecture seule avec pointeur et longueur d'octet.- Les littéraux de chaîne ont un stockage statique et tapent
str. - Les commentaires et le contenu des chaînes peuvent contenir du Unicode.
lenindique la longueur en octets. Le packagetextordinaire valide et itère les scalaires Unicode sans allocation ; la segmentation des graphèmes, la normalisation et le comportement des paramètres régionaux restent un travail de bibliothèque.- Les identifiants de source restent intentionnellement en minuscules ASCII ; constantes sont des boîtiers de serpent supérieurs ASCII.
Le chargeur valide chaque source comme étant canonique UTF-8 avant le lexing et rejette les NUL intégrés, les codages trop longs, les substituts, la troncature et les valeurs au-delà du scalaire maximum d'Unicode. Les littéraux de chaîne décodés sont également validés.
L'interpolation de chaîne f de phase 1 est implémentée pour str, emprunté string, bool, et des entiers intégrés. La construction produit de l’éphémère format_args sans allocation de tas ; utilisations de sortie directe file.write_*_format, tandis que .to_string()? matérialise explicitement une chaîne possédée. La phase 2 implémente la conversion de base entière ; délimité width/fill/alignment; exact fixe et déterministe scientific/general f32/f64 conversion sans libc ; et un formatage personnalisé statique direct grâce à des emprunts sans allocation display.display() -> str et debug.debug() -> str mises en œuvre.
Surface de langage implémentée
- immutable/mutable/linear liaisons et constantes du serpent supérieur ;
- fonctions, méthodes de réception implicite, destructeurs, génériques, traits, impls ;
- structures de serpent inférieur, ADT, unions brutes, tableaux, tranches, tuples, option/result;
- blocs orientés expression et
if, pluswhile, sans allocationfor, exhaustifmatch,break,continue, et tôtret; - indexation vérifiée pour toutes les largeurs entières intégrées ; les lectures à index variable sont
pris en charge sur les paramètres de fonction
[]u8et la tranche originale debytes.view(). Étendez les vues mutables dans un bloc et utilisez les paramètres de fonction[]u8en lecture seule ou la tranche d'origine pour l'accès à l'index variable ; - explicite
unsafemémoire brute, atomique, accès volatile, espaces d'adressage, FFI, appels système, accès brut aux syndicats et éléments intrinsèques de l'architecture ; - structuré
spawn, régions, profils d'exécution et compilation séparée. - fermetures sans évasion sans allocation, fermetures en boîte faillibles explicites, effets de rappel déduits et contrats appelables exclus du schéma 16 ;
- chaînes f typées phase-1/2 avec évaluation unique, échappement par accolade littérale, spécifications de format, statiques display/debug traits, sortie segmentée sans allocation et matérialisation faillible.
La grammaire propre n'implémente pas actuellement l'héritage enum, noms nominaux en majuscules, return, # commentaires, intégrés chan<t>/send/recv, apparition détachée, fermetures récursives, générateurs, macros, exceptions, async/await, ou syntaxe à vie.
Propriété et sécurité
Le modèle courant est le suivant : copier des scalaires, déplacer des ressources, emprunter des vues sans copie et cloner explicitement. Le nettoyage s'exécute exactement une fois sur les sorties structurées. Les opérations de panique, d'interruption et d'abandon ne déroulent pas et n'exécutent pas le lexical cleanup/destructors.
Ownership/place/provenance les faits se propagent à travers des alias, des blocs, des branches, des points fixes de boucles, fields/nested champs, index de tableau connus, tuples, ADT, option/result, granulats génériques, channels/tasks, fonction values/indirect appels, parameters/returns, et élidé à la source .sdi. Les déplacements à index dynamique des éléments de ressource restent rejetés.
linear t a une sémantique exactement une fois dans ces mêmes formes implémentées. Les vues @borrow receiver/input-derived conservent la provenance sans syntaxe à vie. Le code non sécurisé suppose des obligations brutes explicites mais ne désactive pas la propriété sécurisée des valeurs environnantes.
Les fermetures simples sont empilées et ne s'échappent pas. Capture la copie ou le déplacement dans le premier ordre d'utilisation lexicale, reste immuable et nettoie exactement une fois. box |...| alloue explicitement un appelable d'échappement et renvoie result<box fn(...) -> t, alloc_error>; Les callables en boîte sont à déplacement uniquement, non clonables, non envoyables et limités à une région lorsqu'une région est allouée. Les rappels de départ utilisent un pointeur unique code/environment descripteurs, tandis que les pointeurs de fonctions de plate-forme restent minces et n'acceptent que les fonctions nommées.
Texte, octets et régions
- déménagements appartenant à
string;.clone()crée un propriétaire indépendant explicite ; bytesest une propriété binaire mutable unique ;shared_bytesest un handle partagé en lecture seule avec explicite retain/clone;- Les vues owner/array compatibles sont sans allocation et leur provenance est vérifiée ;
- retour des conversions détenues
result<..., alloc_error>; region(capacity) { body }fournit une allocation de bosses vérifiées alignées et imbriquées ;- le coffre-fort values/views/pointers lié à une région ne peut y échapper ;
- les tâches liées à la région se joignent avant le nettoyage de la région.
str.sliceapplique UTF-8 frontières, tandis questr.equalet délimiteur ASCII la recherche reste sans allocation ;- l'ordinaire
text,box,vec, etsortles packages fournissent un jeton sécurisé plages, propriété récursive, mutation vérifiée et ordre statique.
Concurrence
spawn est structuré : les groupes de tâches s'écoulent sur chaque bord, laissant leur propriétaire lexical avant le nettoyage. Capture une copie ou un déplacement selon ses capacités ; le partage est explicite et les valeurs transversales nécessitent send/sync le cas échéant.
compiler/llvm/libs/task est une bibliothèque générique ordinaire fournissant des canaux de partage de propriété, des jointures de tâches typées en une seule fois, des événements, des annulations, des groupes d'attente, des sémaphores, des barrières et des verrous. Le corps engendré directement ABI revient toujours void, donc postfix ? ne peut pas franchir directement la limite de la tâche. Gate 15 ajoute la surface de la bibliothèque typée task_result_new, task_result_complete_ok/error, et task_result_wait sur les mêmes points finaux linéaires et lexicalement joints. Les valeurs de fonction et les fermetures déduites peuvent utiliser @no_runtime_effects fn(...) pour exiger un résumé complet et vide des effets d'exécution ; les appels indirects inconnus et non qualifiés restent rejetés dans les profils restreints. Les rappels encadrés ne peuvent pas se croiser spawn parce qu'ils ne fournissent pas send.
Bibliothèques et liens
.sdi les interfaces préservent les types publics, génériques templates/common instances, effets, propriété, provenance, destructeur, clone, cible, build/runtime profil, dépendance et ABI identité. Le schéma 13 préserve les corps en ligne et les hachages de corps vérifiés ; le schéma 14 ajoute des charges utiles constantes immuables récursives publiques vérifiées ; le schéma 15 ajoute des contrats à effet callable ; le schéma 16 ajoute des signatures appelables encadrées, des corps de fermeture en ligne et une identité de représentation appelable. Un wrapper de bibliothèque ne publie pas de spécialisation de méthode orpheline dont le propriétaire de méthode générique provient d'un package importé ; les consommateurs dont la source a été supprimée rematérialisent cette instance à partir du modèle de dépendance. Hébergé seed les bibliothèques sont liées dynamiquement par défaut ; --static sélectionne statique seed dépendances. La publication d'artefacts est atomique et corrompue, avec un schéma obsolète, un profil, une cible ou ABI-Les interfaces incompatibles échouent à la fermeture.
Le lanceur incrémental build/run chemin étapes paquets sûrs pour tapé I/O, vues de processus, analyse d'entiers, mathématiques portables, tampons d'octets, tranches, boîtes, mise en réseau, sérialisation, tâches, collections génériques et wrappers de systèmes. Gate 18 ajoute le schéma-12 @mut vecteurs et coffre-fort benchmark/application les consommateurs ; Gate 19 ajoute le schéma-13 en ligne math/system feuilles et cloisons de tranches disjointes. Il s’agit de packages importés ordinaires, et non de langages intégrés cachés.
Résolution du registre, lockfiles/download cache, paquet add/update, élagage du cache, génération de documentation, LSP et incrémentiel object/interface le cache sont implémentés par le Gate 15 outillages. Gate 17 étapes pour les dépendances manifestes de base et ordinaires profile/target-qualified les magasins dynamiques par défaut, réutilisent les générations installées sans recompilation et implémentent les transactions transactionnelles user/system seed install plus soucieux des références seed uninstall. Explicite --static et --static=all restent des choix de liaison indépendants.
Créer des profils et des performances
--release utilise seed-safe-o2-v1; --release-small utilise seed-safe-oz-v1. Les limites, les discriminants, la provenance, la propriété et les gardes de nettoyage demeurent à moins que LLVM les prouve redondants. ThinLTO, PGO et la liaison statique sont des options indépendantes explicites. Il n’existe aucun profil opérationnel non contrôlé.
Gate 13 compare les charges de travail équivalentes numériques, d'analyse, de collecte, allocation/string, de tâches structurées, de mise en réseau, d'appel dynamique, de démarrage, RSS et de taille d'artefact à Clang C et Rust. Sur l'hôte de fermeture, seed reste dans la plage cible d'exécution ordinaire de 0 à 10 % pour le corpus appliqué. Il s'agit d'une preuve de charge de travail contrôlée, et non d'une affirmation universelle selon laquelle chaque programme seed bat C/Rust.
Gate La médiane de vérification complète de 100 000 s de l'hôte de fermeture 12 est de 0,41 s à 177 504 Kio, contre des budgets de 3,00 s et 196 608 Ko. Voir GATE12_BASELINE.md et GATE13_BASELINE.md pour hardware/toolchain métadonnées et interprétation.
Statut cible
La prise en charge des objets n'est pas la même chose que la prise en charge des exécutables hébergés. La matrice canonique est compiler/llvm/tests/GATE14_TARGET_MATRIX.tsv.
| Cible | Niveau déclaré actuel |
|---|---|
| Linux x86-64 | Bibliothèques compile/link/run, static/dynamic hébergées fermées, par défaut natif sans libc |
| Linux AArch64 | hébergé compile/link/runtime avec politique de coureur ; Comportement static/dynamic couvert à son niveau déclaré |
| Linux RISC-V64 | ligne hébergée uniquement sur les objets ; le coffre autoportant est séparé |
| Windows x86-64 | déterministe PE/DLL, services d'exécution comprenant owned/shared octets et fichier read/seek, FFI à paramètres agrégés Microsoft x64, tâches structurées, mise en réseau, package ABI, le durcissement du chargeur et le déplacement SDL3 forfait de jeu pass sous le vin requis |
| macOS x86-64 | Gate 14 fermé par l'exécutable Intel natif requis, dylib/static, runtime, pthread, mise en réseau, package ABI, et preuve du chargeur |
| macOS bras64 | Natif piloté par SDK compile/link/run, runtime/ABI, planificateur, mise en réseau et preuves de packages sur Apple Silicon ; maintenu séparément de la rangée de fermeture Intel requise |
| Android bras64 | LLVM/object/static/shared/executable cibles plus le runtime JNI, l'empaquetage Gradle, API 21/29/37 Exécution ARM64 AVD, API-37 scénarios de publication, des preuves de cycle de vie instrumentées par Garden Allocator et une analyse de portée API-35 tranches de périphérique physique ; MP4 lifecycle/services transmettre les trois AVD de fumée |
| Android x86-64 | LLVM/object/static/shared/executable compile/link compatibilité; non emulator/device demande d'exécution |
| iOS bras64 | LLVM/object/archive/device-link et les preuves de consommation C/Swift/XCFramework générées, ainsi que l'objet Seed Garden model/assets/Apple-audio complet et la construction croisée de bundles d'applications non signés ; L'exécution physique du jardin, la signature et la publication des preuves restent un travail de périphérique limité |
| iOS bras de simulation64 | iOS 26.5 Simulateur ARM64 lifecycle/services, bytes/async, interface utilisateur adaptative phone/tablet, saisie, rotation, sémantique, accessibilité XCUITest, exécution du noyau MP4 partagé et Seed Garden context/persistence/continuous-frame/Apple-AudioQueue couverture du produit |
| wasm32-WASI | ligne au niveau de l'objet avec les services hébergés absents maintenue explicite dans la matrice Gate 14 |
| autoportant x86-64/AArch64/RISC-V64 | preuve de démarrage sans libc sous QEMU aux niveaux déclarés Gate 7 |
Gate 14 requis Intel Runner, SDK, ABI, FFI, bibliothèque dynamique, compilation séparée, corruption, chargeur et régression sont satisfaits. macOS arm64 reste un hôte natif étiqueté indépendamment plutôt qu'un substitut à la ligne de fermeture Intel.
CLI et outillage
Le lanceur de référentiel fournit new, check, format, incrémentiel build, run, test, résolution du paquet, install/uninstall, doc, lint, LSP et publish --check, plus le transfert direct des indicateurs du compilateur et file.sd -o output. Registre à distance publication/signing n'est pas mis en œuvre ; la commande de publication existante effectue uniquement une validation locale.
Le compilateur direct formate la source, imprime semantic/IR des formulaires, emits/reads/hashes .sdi, émet LLVM/object/shared/static/binary artefacts, installations target/ABI- des bibliothèques qualifiées et exécute les cibles prises en charge. Son aide exécutable est la liste des drapeaux faisant autorité :
seed/compiler/llvm/build/seed --help
Documentation source de vérité
| Sujet | Pages |
|---|---|
| Spécification linguistique actuelle | seed/docs/lang-spec.md |
| Grammaire | seed/compiler/llvm/LANGUAGE_GRAMMAR.md |
| Sémantique | seed/compiler/llvm/SEMANTIC_RULES.md |
| Utilisateur syntax/CLI | Référence linguistique |
| Propriété | Propriété |
| Intégrés de base | Core Built-ins |
| Runtime/backend | Primitives système |
| Gates | seed/compiler/llvm/ROADMAP.md |
Les documents historiques peuvent décrire llvm-v1, le prototype v2 ou des répertoires de stub d'assembly qui n'existent plus. Ils doivent être explicitement étiquetés et ne doivent pas être utilisés comme directives actuelles en langage clair.