Playground Zero
Lire la documentationÉcrivez, exécutez et partagez des extraits de code — sans installation.
Essayez Zero dans le navigateur
Zero est le nouveau langage de programmation système de Vercel Labs, sorti pour la première fois en mai 2026. En surface il ressemble à Rust — pub fun, let mut, ->, crochets génériques — mais son objectif de conception est inhabituel : toute la toolchain est pensée pour être lue, modifiée et réparée par des agents IA aussi facilement que par des humains. Les diagnostics sortent en JSON structuré avec des codes d'erreur stables, le compilateur sait émettre des plans de réparation typés et les binaires tiennent sous 10 KiB. Le playground te donne un éditeur clair pour bricoler le langage sans rien installer.
L'idée la plus marquante de Zero, c'est l'I/O basée sur les capabilities. Pas de globales implicites ni de stdout ambiant — une fonction qui veut écrire dans le terminal doit accepter un paramètre World et appeler world.out.write(...). Les erreurs se propagent avec raises et check plutôt qu'avec des exceptions ou des panics, et les valeurs optionnelles utilisent .has / .value au lieu de null. Appuie sur Run, l'éditeur compile ton code côté serveur et affiche la sortie. Stdin n'est pas encore branché parce que Zero v0.1.3 n'a pas publié d'API stdin — utilise std.args via le panneau Args.
Ce qui rend Zero intéressant
- I/O basée sur les capabilities : chaque effet de bord (stdout, fichiers, réseau) passe par un paramètre
World, donc la signature d'une fonction te dit exactement à quoi elle a accès. Pas de globales cachées, pas d'allocator implicite, pas d'async surprise. - Toolchain pensée pour les agents :
zeroémet des diagnostics JSON stables,zero fix --plan --jsonproduit des plans de réparation typés, et chaque sous-commande de la CLI accepte--jsonpour que les agents pipent la sortie au lieu de la parser avec des regex. - Binaires natifs minuscules, souvent sous 10 KiB. Le compilateur utilise des emitters directs pour ELF, Mach-O, PE et WebAssembly, donc pas de dépendance LLVM à traîner.
- Syntaxe familière, sécurité plus tranchante : ça ressemble à Rust sur le papier, mais sans panic-on-null, sans GC implicite et sans flux de contrôle caché. Les erreurs sont juste des valeurs que tu propages avec
check.
À essayer dans le playground Zero
- Affiche quelque chose via
world.out.writeet observe comment l'annotationraisest'oblige à gérer le chemin d'erreur aveccheck. C'est tout l'idiome de Zero pour la sécurité sans exceptions, dans un mini exemple. - Lis un argument de ligne de commande avec
std.args.get(N)et déballe l'optional avec.has/.value. Modifie les valeurs dans le panneau Args sous l'éditeur — elles sont passées à ton programme au Run, exactement comme un vrai argv. - Écris une petite
funqui renvoie uneString, appelle-la depuismainet regarde les types se tisser tout seuls. Zero infère les génériques plus agressivement que Rust, donc la plupart des appels ne demandent aucune annotation.
Questions fréquentes sur Zero
Qu'est-ce que le langage de programmation Zero ?
--json, et un mode séparé zero fix --plan produit des plans de réparation typés que les agents appliquent directement. Côté syntaxe, il se situe entre Rust et Zig. L'idée phare, c'est l'I/O basée sur les capabilities via un paramètre World.Faut-il installer le compilateur Zero pour utiliser ce playground ?
zero côté serveur dans un container isolé : tu écris ton code dans le navigateur et tu appuies sur Run. La version du compilateur est fixée (actuellement v0.1.3) et la sandbox est identique à chaque exécution. Si tu veux aussi développer en local, le projet Zero publie des binaires précompilés sur sa page de releases GitHub.Pourquoi le playground Zero n'a-t-il pas de champ stdin ?
World (world.out, world.err), plus std.args pour les arguments de ligne de commande et std.env pour les variables d'environnement. En attendant que Vercel Labs publie une capability stdin, utilise le panneau Args sous l'éditeur — c'est comme ça que tu fournis une entrée à ton programme.C'est quoi la capability World et pourquoi main en reçoit une ?
World et appeler des méthodes dessus (world.out.write, world.err.write, etc.). Ça transforme la signature en une déclaration honnête des effets de bord — si une fonction ne prend pas de World, elle ne peut prouvablement pas toucher au monde extérieur. main en reçoit une parce que c'est le runtime qui accorde la capability initiale.Que veulent dire raises et check ?
raises (avec éventuellement la liste des noms d'erreurs) et l'appelant écrit check expr pour propager l'échec vers le haut. Vois ça comme l'opérateur ? de Rust avec des types d'erreur nommés : les échecs sont des valeurs, pas des surprises de flux de contrôle.