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.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video