Menu
Coddy logo textTech

Playground Zero

Lire la documentation

Écrivez, exécutez et partagez des extraits de code — sans installation.

main.0
Output
Click Run to see the output here.

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 --json produit des plans de réparation typés, et chaque sous-commande de la CLI accepte --json pour 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.write et observe comment l'annotation raises t'oblige à gérer le chemin d'erreur avec check. 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 fun qui renvoie une String, appelle-la depuis main et 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 ?
Zero est un systems language expérimental de Vercel Labs, sorti pour la première fois en mai 2026. Il compile vers de petits exécutables natifs (souvent sous 10 KiB) et a été construit en pensant aux agents IA : le compilateur émet des diagnostics JSON structurés, chaque sous-commande de la CLI accepte --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 ?
Non. Coddy fait tourner la toolchain 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 ?
Parce que Zero v0.1.3 n'expose pas encore d'API stdin. Le langage atteint le monde extérieur uniquement par les capabilities du paramètre 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 ?
Zero n'a pas de namespace global implicite pour l'I/O. Une fonction qui veut écrire de la sortie, lire des fichiers ou taper sur le réseau doit recevoir une valeur 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 ?
Zero gère les erreurs de manière explicite, sans exceptions. Une fonction qui peut échouer annote sa signature avec 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.