HeadlinesBriefing favicon HeadlinesBriefing.com

Bend 2 und die Vibe-Coding-Falle erklärt

Hacker News •
×

18. September 2026 Bend dient als nützliches Beispiel für meinen allgemeinen Punkt hinsichtlich Vibe-Coding, da es aktuell, hochprofilt ist und Eigenschaften aufweist, die es einfach machen, es als Beispiel zu verwenden. Ich weiß nichts über die Geschichte des Autors beim Entwurf von Sprachen oder ob er tatsächlich die unten genannten Kompromisse berücksichtigt und die Wahl getroffen hat, die ich für eine schlechte halte.

Sie dürfen gerne „den Autor“ unten durch „einen hypothetischen Autor, der das Gleiche hätte erschaffen können“ ersetzen. Offensichtlich mag ich die Designentscheidungen, die in Bend getroffen wurden, nicht und ich wollte sie vorstellen, jedoch wurde dies übermäßig mit dem Hauptpunkt vermischt, den ich unten zu machen versuche. Ich möchte dies jetzt nicht bearbeiten und den Eindruck erwecken, dass vorhandene Kommentare übermäßig hart sind, daher glaube ich, dass die beste Lösung darin besteht, mein mentales Modell des Artikels während des Schreibens zu erklären.

Hier ist ein Kommentar des Autors von Bend. Bend 2 wird als Sprache für die Ära des KI-Codings beworben: Menschen schreiben „Gesetze“, KI schreibt Implementierungen und Beweise, und der Compiler überprüft, ob die Beweise korrekt sind. Das klingt alles ziemlich beeindruckend, und ich kann verstehen, warum jemand eine Sprache möchte, die das tut.

Tatsächlich gibt es einige größere Probleme mit dieser Idee; jedoch ist das nicht der Gegenstand dieses Artikels. Stattdessen möchte ich darüber sprechen, wie Bend selbst offenbar in eine häufige Falle beim Vibe-Coding getappt ist, die nicht oft erwähnt wird. Lassen wir mit einer Basislinie beginnen, was Bend vom Entwickler für seine Demo auf der Startseite verlangt:https://github.com/bendlang/bend/blob/main/demos/app_win_is_bug_2d/LAWS.bend Ich werde es hier nicht wiedergeben, weil der Code selbst nicht zu wichtig ist.

Was für diesen Artikel wichtig ist, ist, dass es ziemlich viel Code ist. Es sind 58 Zeilen Code nur dafür, dass der Spieler niemals die Flagge berühren oder das Spiel gewinnen kann. Außerdem gibt es andere Probleme darin, dass das LLM die Game-Unterprogramme neu definieren kann, um alles zu tun; jedoch ist das wiederum nicht der Punkt des Artikels.

Als Nächstes schauen wir uns an, was das LLM, das den Code für dieses Programm schreibt, schreiben muss, um die „Gesetze“ zu beweisen:https://github.com/bendlang/bend/blob/main/demos/app_win_is_bug_2d/PROOF.bend Das ist viel. 442 Zeilen Code, um diese einfachen Eigenschaften zu beweisen. Also, was ist mein Problem damit? Warum nenne ich es eine Vibe-Coding-Falle? Das Problem ist, dass Vibe-Coding es ermöglicht, eine substantielle Lösung zu bauen, bevor man genug über das Problem gelernt hat, um zu erkennen, dass eine viel bessere Lösung existiert. Ein Entwickler kann eine komplette Sprache und einen Compiler entwickeln, während er einen Ansatz übersehen hat, den eine Einführungsuntersuchung des Bereichs direkt vor ihnen platziert hätte.

Der betreffende Bereich ist die formale Verifizierung. Es ist erwähnenswert, dass diese beiden Wörter nirgendwo auf Bend’s Webseite oder in dessen Codebasis auftauchen. Der Entwickler hat eine ganze Sprache um ein Feld herum gebaut, ohne zu merken, dass dieses Feld existiert.

Um deutlich zu zeigen, warum dies ein Problem ist, lass uns das gleiche Programm, das Bend als Demo verwendet, in SPARK nachbauen – einer Open-Source-Sprache und einem Compiler für formale Verifizierung. Um fair zu Bend zu sein, habe ich das selbst vibe-coded: Ich habe einfach einem LLM gesagt, die Demo in SPARK nachzubauen, ohne weitere Anleitung:package Game with SPARK_Mode issubtype Column is Integer range 0 .. 11;subtype Row is Integer range 0 .. 7;type State is record X : Column; Y : Row; Won : Boolean;end record; Start : constant State := (8, 5, False);function Wall (X : Column; Y : Row) return Boolean is(((X = 3 or X = 11) and Y <= 3)or ((Y = 3 or Y = 7) and X <= 3));function Cell (X : Column; Y : Row) return Character is(if Wall (X, Y) then '#' elsif X = 1 and Y = 1 then 'F' else '.');-- Inductive invariant: outside the sealed room, off walls, not won.function Safe (G : State) return Boolean is((G. X > 2 or G.

Y > 2) and not Wall (G. X, G. Y) and not G.

Won)with Ghost;procedure Step (G : in out State; Key : Character)with Post => (if Safe (G'Old) then Safe (G));-- Both Bend laws, including the actual cell drawn by the terminal.function Replay (Keys : St...