Vercel hat eine Programmiersprache entwickelt

BBetter Stack
Computing/SoftwareInternet Technology

Transcript

00:00:00Vassel hat gerade eine neue Programmiersprache namens Xero herausgebracht, und angeblich
00:00:03unterscheidet sie sich dadurch, dass sie von Grund auf so entwickelt wurde, dass Menschen und KI-Agenten
00:00:07zusammen kleine native Programme entwickeln können. Aber machen wir das nicht sowieso schon alle?
00:00:12Was macht diese also besser, und ist es tatsächlich eine gute Idee oder nur ein weiteres Nebenprojekt,
00:00:16über das in ein paar Monaten niemand mehr spricht? Finden wir es heraus.
00:00:25Xero ist eine System-Sprache wie Rust oder Zig, also vielleicht etwas, worauf BUN eines Tages umsteigen könnte.
00:00:30Und so weit ich das beurteilen kann, ist die Grundidee, dass aktuelle Sprachen für Menschen gebaut wurden.
00:00:34Wir lesen also die Fehlermeldungen, die Warnungen und die Traces, aber KI arbeitet viel besser,
00:00:38wenn sie strukturierte Daten hat. Bei Xero wurde die gesamte Toolchain genau mit diesem Gedanken im Hinterkopf gebaut,
00:00:43was bedeutet, dass alles, was der Compiler ausgibt, als JSON formatiert werden kann.
00:00:46Allein basierend auf diesen Punkten und den ziemlich offensichtlich KI-generierten Sätzen auf dieser Website,
00:00:51bin ich immer noch ziemlich skeptisch, warum das existiert und wie gut es funktionieren wird,
00:00:56aber ich hebe mir meine Meinung für den Schluss auf. Erkunden wir zuerst die Sprache selbst,
00:00:59denn ich meine, sie ist trotzdem ziemlich cool. Wir beginnen mit dem klassischen Projekt
00:01:03beim Erlernen einer neuen Sprache: der Ausgabe eines ganz einfachen Strings. Das meiste davon ist leicht zu verstehen.
00:01:08Wir haben eine öffentliche Main-Funktion als Einstiegspunkt für dieses Programm. Diese Funktion gibt
00:01:12void zurück, und hier drin geben wir einen String aus. Aber die Art und Weise, wie dieser String
00:01:16ausgegeben wird, zeigt uns schon die ersten Features. Wir nutzen das sogenannte “world”-Capability. Man braucht dieses
00:01:21Capability, wenn man I/O-Operationen durchführt, wie Dateioperationen, Ausgaben, Netzwerkaufrufe,
00:01:26jeden I/O-Nebeneffekt – und das ist alles Teil des Explizitheitsprinzips dieser Sprache.
00:01:31Wenn eine Funktion dieses “world”-Capability hat, ist das ein direktes Signal, dass sie I/O-Operationen durchführt.
00:01:37Wenn sie es nicht hat, bedeutet das, dass sie völlig frei von I/O-Nebeneffekten ist.
00:01:40Das “world”-Capability ermöglicht es dem Compiler auch, nicht verfügbare Capabilities basierend auf dem
00:01:45Ziel zur Kompilierzeit statt zur Laufzeit abzulehnen. Wenn man also versucht, in dieser
00:01:50Funktion auf das Dateisystem zuzugreifen und dann einen WebAssembly-Build anstrebt, bricht der Compiler vorher ab,
00:01:54sodass man später im Verlauf nicht von einem Laufzeitfehler überrascht wird.
00:01:57Nach dem “world”-Capability haben wir in diesem Programm auch einige Schlüsselwörter.
00:02:00Wir haben hier “check”, womit Fehler behandelt werden. Wenn eine Funktion fehlschlagen kann,
00:02:05markiert man sie mit “raises”, und “check” wird dann verwendet, um diesen Fehler weiterzuleiten. Es ist ziemlich ähnlich
00:02:09zum Fragezeichen-Operator in Rust, nur eben als Schlüsselwort. Das ist also alles, was wir
00:02:13für unser erstes Programm in Xero wissen müssen, und wir können es jetzt mit “xero run hello.xero” ausführen.
00:02:19Beachte, dass dies die Dateiendung für die Sprache Xero ist. Wenn ich jetzt Enter drücke,
00:02:23sieht man, dass dort steht: “Hello, subscribe to Betastack.” Etwas, das du definitiv tun solltest.
00:02:26Weiter geht es jedoch nach unserem Hello-Programm. Da wir jetzt offensichtlich alle Xero-Experten sind:
00:02:30Die Sprache hat noch ein paar weitere Primitive, um die Grundlagen deiner Anwendungen abzudecken.
00:02:34Ich habe hier eine neue App erstellt, eine Zufalls-App, die klassifiziert, ob die Eingabe Text,
00:02:39numerisch oder gemischt ist. Wie man sieht, nutzt sie Funktionen wie Standardbibliotheken, wir haben
00:02:43Enums hier drin, wir haben “shapes” (ziemlich ähnlich zu Structs), und dann die üblichen
00:02:47Sprachfeatures, die man erwartet, wie If-Anweisungen. Wir haben eine While-Anweisung weiter unten, man kann auch
00:02:52For-Schleifen nutzen, und dann haben wir hier unten auch “match”, was im Grunde wie eine Switch-Anweisung ist.
00:02:56Also nichts allzu Unerwartetes oder Neues. Wenn es um fortgeschrittenere Konzepte wie Speicher geht, gilt bei Xero
00:03:00wiederum, dass alles explizit sein sollte. Wir haben veränderliche Spans für unsere beschreibbaren Ansichten, und es gibt auch Spans
00:03:05für lesbare Ansichten. Hier unten haben wir einen “owned” Typ. Das besagt im Wesentlichen, dass dieser Wert
00:03:10hier besessen wird, und wenn er den Gültigkeitsbereich verlässt, wird die “drop”-Funktion ausgeführt. Wir definieren die “drop”-Funktion
00:03:14selbst auf dem Shape hier. Hier würden wir also unsere Bereinigungslogik unterbringen. Eine andere Möglichkeit,
00:03:18das zu tun, ist die Verwendung des Schlüsselworts “defer” und das Platzieren einer Funktion dahinter. Was das im Wesentlichen
00:03:22bedeutet: Wenn diese Funktion fertig ist und ihren Gültigkeitsbereich verlässt, wird danach diese Funktion ausgeführt. Sie bietet
00:03:26also im Grunde alles, was man heute für eine sehr einfache Anwendung braucht. Es gibt noch ein paar weitere Features,
00:03:31aber ich möchte nicht, dass das hier ein Programmier-Tutorial wird. Aber trag ruhig gerne ein, dass du
00:03:35drei Minuten Xero-Erfahrung in deinem Lebenslauf hast. Wenn das alles geklärt ist, konzentrieren wir uns auf das,
00:03:39was meiner Meinung nach das eigentliche Verkaufsargument für Xero ist: die Toolchain und die Tatsache, dass sie für KI-Agenten gebaut wurde.
00:03:44Stell dir vor, ein KI-Agent schreibt etwas Xero-Code und baut ein paar Bugs ein. Nun, die Entwickler behaupten,
00:03:49dass man in den meisten Sprachen nur eine Textwüste zurückbekommt, und diese Fehlermeldungen sind für Menschen zum Lesen gedacht.
00:03:54In Xero kann man zwar auch die für Menschen lesbare Variante bekommen, und die wird in etwa so aussehen,
00:03:58aber wie man sieht, ist das keine strukturierte Ausgabe. Deshalb haben sie sichergestellt, dass
00:04:02jeder Teil der Toolchain tatsächlich eine JSON-Option hat. Wenn wir also dieselbe Funktion noch einmal ausführen,
00:04:07diesmal aber mit der JSON-Option, und ich leite das Ganze auch an JQ weiter, damit es im Terminal etwas schöner aussieht,
00:04:12sieht man, dass wir eine schöne strukturierte Fehlermeldung zurückbekommen. Wir haben hier Diagnose-Felder wie
00:04:16die Dringlichkeit, den Code und die Nachricht selbst. Wir sehen, wo der Fehler auftritt, seinen erwarteten Wert und den
00:04:21tatsächlichen Wert. Dann haben wir eine Hilfestellung für das LLM selbst sowie ein Feld für die Behebungssicherheit,
00:04:26das besagt, ob dies eine menschliche Überprüfung erfordert, und einige Informationen darüber, wie es repariert werden kann. Es wird
00:04:31also einfach versucht, dem LLM genügend Kontext zu geben, damit es den Fehler selbst beheben kann. Ein weiterer Befehl,
00:04:35der das gut zeigt, ist der Befehl “xero fix”. Diesen verwende ich im Plan-Modus sowie mit JSON und leite ihn
00:04:40ebenfalls an JQ weiter, damit es in unserem Terminal ordentlich aussieht. Wenn ich hier Enter drücke, führt er im Grunde
00:04:44eine Diagnose auf der fehlerhaften Klassifizierungsdatei durch, die ich ihm übergeben habe, und sagt im Wesentlichen: Was muss ich
00:04:49tun, um diese Datei tatsächlich zu reparieren? Wie man sieht, erhalten wir eine strukturierte Ausgabe zurück mit Feldern,
00:04:53die so ziemlich nur ein LLM wissen muss, wie Sicherheitsstufen, den Modus, Anwendungen, Edits. Wir haben hier unten Dinge
00:04:58wie die Richtlinie zur eigenständigen Reparatur. Dann folgt der Diagnosebereich, der im Grunde genau das Gleiche ist,
00:05:03was wir beim Befehl “xero check” gesehen haben, und hier unten steht auch die Behebung für diesen Fehlercode
00:05:07selbst. Wie wird das also normalerweise behoben? Ein Teil der Idee scheint zu sein: Was wäre, wenn die Sprache
00:05:12ihre eigene Dokumentation bereitstellt, wenn sie gebraucht wird? Wenn wir ein LLM auf diese neue Sprache ansetzen würden,
00:05:17müsste es eigentlich keine Dokumentation nachschlagen oder bestimmte Fähigkeiten nutzen. Es wäre einfach in der Lage,
00:05:21genügend Informationen aus der Toolchain zu beziehen, wenn es tatsächlich nötig ist. Um das auf die Probe zu stellen, habe ich
00:05:25unsere fehlerhafte Datei in ein brandneues Verzeichnis gepackt, das keinerlei Informationen darüber enthält, was die Sprache Xero ist. Und jetzt
00:05:30bitte ich Claude einfach, diese fehlerhafte Datei zu reparieren, und gebe ihm auch den Befehl mit, den es für diese
00:05:34Diagnose benötigt, da es ja einige Informationen darüber braucht, wie man die Toolchain überhaupt benutzt. Damit
00:05:38können wir weitermachen und sehen, ob Claude diese Datei tatsächlich reparieren kann. Nun, siehe da, nach 31 Sekunden hat es
00:05:43geschafft, alle Fehler in der Datei zu beheben. Ich hatte tatsächlich drei eingebaut, und es hat
00:05:47alle drei gefunden und behoben. Wir können nach oben scrollen und sehen, wie es das gemacht hat. Es hat einfach
00:05:51den “xero fix”-Befehl ausgeführt, den ich ihm gegeben habe. Diesmal haben wir “okay: true” zurückbekommen, so weiß es also, dass keine
00:05:56Fehler mehr übrig sind. Und wenn wir nach oben scrollen, sehen wir, dass es einige Codeänderungen vorgenommen hat. Das tat es, weil es im
00:06:00vorherigen Schritt “xero fix” ausgeführt und genaue Informationen darüber erhalten hat, wie genau dieses Problem zu beheben ist.
00:06:05Und das hat es bei allen drei Problemen gemacht, die wir hatten. Es hatte also keinerlei Vorabinformationen darüber, was die
00:06:10Sprache Xero ist. Es hat keine Websuche oder ähnliches genutzt, um die Dokumentation abzurufen. Es hat
00:06:14einfach die Informationen verwendet, die die Toolchain in Form von strukturierten Ausgaben bereitgestellt hat. Ich bin tatsächlich ein
00:06:18wenig beeindruckt davon. Dies ist eine brandneue Sprache, die ein LLM trotzdem debuggen kann, und zwar dank der Art,
00:06:22wie die Sprache aufgebaut wurde. Aber eine Frage bleibt mir offen: Ist das wirklich neu? Ich verstehe
00:06:28das ganze Verkaufsargument, dass Fehler und alles in der Toolchain strukturierte
00:06:31Ausgaben haben, aber das ist eigentlich kein neues Konzept. Wir haben seit Jahrzehnten strukturierte Fehlermeldungen. Schau
00:06:37dir das an: Ich habe im Grunde dasselbe Klassifizierungsprogramm in Rust gebaut, und es weist ähnliche Fehler auf,
00:06:41und ich kann die Ausgabe einfach in JSON anfordern. Ich bin mir nicht wirklich sicher, ob wir eine ganze Sprache brauchten,
00:06:46die um diese Idee herum gebaut ist. Vielleicht hätte man auch einfach die bestehenden verbessern können, wenn man dachte,
00:06:51dass es dort eine Informationslücke gibt. Ich bin mir auch ziemlich sicher: Wenn ich diesen fehlerhaften Rust-Code nehmen und
00:06:55Claude bitten würde, ihn zu reparieren, würde er das mit Leichtigkeit tun – selbst wenn er keine strukturierten
00:07:00Ausgaben verwenden würde. Ich finde, LLMs machen bei normalen Meldungen einen absolut soliden Job, oder vielleicht bin ich nur noch
00:07:05nicht auf dieses Problem gestoßen. Hinzu kommt die Tatsache, dass LLMs mit Unmengen an bestehenden
00:07:10Programmiersprachen wie Rust trainiert wurden, sodass sie ziemlich gut im Debuggen darin sein werden, da es viele
00:07:14Beispiele in ihren Trainingsdaten gibt. Aber bei Xero haben sie absolut keine. Das bedeutet nun nicht, dass man
00:07:19niemals versuchen sollte, eine neue Sprache einzuführen. Es bedeutet nur, dass man beim Bau einer komplexen App wohl eher nicht
00:07:24zu Xero greifen würde. Aber um ehrlich zu sein, vermarkten sie es so ja ohnehin nicht.
00:07:28Alles in allem denke ich, dass dies einfach ein nettes Experiment ist. Wenn überhaupt, zeigt es, dass man immer noch eine neue Sprache bauen
00:07:32und LLMs den erforderlichen Kontext geben kann, ohne dass sie auf dieser Sprache trainiert sein müssen. Aber ich bin mir einfach nicht sicher,
00:07:37ob das wirklich nötig war. Das soll alles nicht heißen, dass die Sprache selbst nicht cool ist. Wie gesagt, sie lässt sich
00:07:42eigentlich gar nicht so schlecht bedienen, und sie kompiliert zu einer angenehmen Größe herunter. Ich bezweifle nur,
00:07:47dass ich diese jemals etablierten Sprachen wie Rust, Zig oder Go vorziehen werde. Ich bin mir sicher, dass es dazu viele
00:07:51Meinungen geben wird, also lasst mich in den Kommentaren unten wissen, was ihr denkt, oder klickt auf Abonnieren.
00:07:55Und wie immer: Wir sehen uns im nächsten Video.

Key Takeaway

Die neue System-Programmiersprache Xero ermöglicht LLMs das fehlerfreie Debuggen von Code ohne vorherige Trainingsdaten allein durch strukturierte JSON-Ausgaben der Toolchain, obwohl etablierte Sprachen wie Rust ähnliche JSON-Formate besitzen.

Highlights

  • Vercel hat die neue System-Programmiersprache Xero entwickelt, die speziell für die Zusammenarbeit zwischen Menschen und KI-Agenten optimiert ist.

  • Die gesamte Toolchain von Xero formatiert Compiler-Ausgaben optional als strukturiertes JSON, um LLMs präzisen Kontext zum Debuggen zu liefern.

  • Das Explizitheitsprinzip der Sprache fordert die Kennzeichnung von I/O-Operationen über das sogenannte world-Capability, was Fehler zur Laufzeit verhindert.

  • Im Test reparierte das LLM Claude eine fehlerhafte Xero-Datei mit drei eingebauten Fehlern innerhalb von 31 Sekunden ohne vorheriges Training oder Websuche.

  • Die Funktion xero fix bietet im Plan-Modus Diagnosefelder für Sicherheitsstufen, den Modus, Anwendungen, Edits und Richtlinien zur eigenständigen Reparatur.

  • Bestehende Sprachen wie Rust unterstützen bereits seit Jahrzehnten strukturierte Fehlermeldungen im JSON-Format über die Kommandozeile.

Timeline

Die Kernphilosophie und Toolchain von Xero

  • Xero ist eine System-Programmiersprache wie Rust oder Zig, die für die gemeinsame Entwicklung durch Menschen und KI-Agenten konzipiert ist.
  • Aktuelle Programmiersprachen richten sich mit Textmeldungen an menschliche Entwickler, während KI-Agenten strukturierte Daten benötigen.
  • Die Toolchain von Xero gibt sämtliche Compiler-Ausgaben bei Bedarf als strukturiertes JSON aus.

Herkömmliche Sprachen setzen auf Fehlermeldungen, Warnungen und Traces, die für das menschliche Auge optimiert sind. KI-Agenten arbeiten jedoch effizienter mit klar definierten Datenstrukturen. Xero löst dieses Problem durch eine konsequente Ausrichtung der gesamten Toolchain auf das JSON-Format.

Sprachmerkmale und das Explizitheitsprinzip

  • Die Ausführung von Programmen erfolgt über den Terminal-Befehl xero run mit der Dateiendung .xero.
  • Das world-Capability signalisiert I/O-Operationen wie Datei- und Netzwerkzugriffe explizit im Code.
  • Der Compiler lehnt fehlende Capabilities beim Erstellen von WebAssembly-Builds bereits zur Kompilierzeit ab.

Das Explizitheitsprinzip zieht sich durch die gesamte Syntax der Sprache. Neben dem world-Capability verfügt Xero über das Schlüsselwort check zur Fehlerbehandlung, das analog zum Fragezeichen-Operator in Rust funktioniert. Funktionen mit potenziellen Fehlern erhalten die Kennzeichnung raises. Primitive wie Enums, Shapes für Datenstrukturen sowie Schleifensteuerungen über While, For und Match bilden das Fundament der Sprache. Für das Speichermanagement stehen veränderliche sowie lesbare Spans, owned-Typen mit eingebauten drop-Funktionen und das Schlüsselwort defer zur Verfügung.

Automatisierte Fehlerbehebung durch KI-Agenten

  • Der Befehl xero fix liefert im Plan-Modus strukturierte JSON-Daten mit konkreten Reparaturanweisungen für LLMs.
  • Diagnosefelder im JSON-Format enthalten Angaben zur Dringlichkeit, zum Fehlercode, zur Nachricht sowie zur Behebungssicherheit.
  • Ein KI-Modell ohne spezifische Trainingsdaten korrigiert fehlerhaften Code ausschließlich anhand der strukturierten Compiler-Daten.

In einem praktischen Experiment korrigierte das Modell Claude drei eingebaute Fehler in einer Xero-Datei innerhalb von 31 Sekunden. Das Modell besaß keine Dokumentation und führte keine Websuche durch. Die Toolchain lieferte über JSON alle notwendigen Informationen wie Sicherheitsstufen, Edits und Richtlinien zur eigenständigen Reparatur, sodass die Sprache ihre eigene Dokumentation situativ bereitstellt.

Vergleich mit etablierten System-Sprachen

  • Strukturierte Fehlermeldungen im JSON-Format existieren bereits in etablierten Sprachen wie Rust.
  • Moderne LLMs zeigen hohe Erfolgsquoten beim Debuggen von Standard-Textmeldungen herkömmlicher Sprachen.
  • Xero eignet sich als Experiment für kontextbasiertes Lernen, ersetzt jedoch vorerst keine etablierten Sprachen wie Rust, Zig oder Go.

Das Kernargument der strukturierten Ausgabe ist kein Alleinstellungsmerkmal von Xero, da Rust ähnliche Funktionalitäten besitzt. Zudem verfügen LLMs über massive Trainingsdaten für bestehende Sprachen, was das Debuggen dort ohnehin erleichtert. Xero beweist zwar, dass neue Sprachen ohne vorheriges KI-Training durch guten Toolchain-Kontext nutzbar sind, bietet jedoch für komplexe Anwendungen noch keinen ausreichenden Mehrwert gegenüber der etablierten Konkurrenz.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video