HeadlinesBriefing favicon HeadlinesBriefing.com

Bend 2 dan Jebakan Vibe-Coding Dijelaskan

Hacker News •
×

18 September 2026 Bend berfungsi sebagai contoh yang berguna untuk poin umum saya mengenai vibe-coding, karena ia baru, memiliki profil tinggi, dan memiliki aspek yang membuatnya mudah digunakan sebagai contoh. Saya tidak tahu apa-apa tentang sejarah penulis dalam merancang bahasa atau apakah mereka benar-benar mempertimbangkan kompromiso di bawah ini dan membuat pilihan yang saya anggap buruk. Anda bebas mengganti “penulis” di bawah dengan “penulis hipotetis yang mungkin telah menciptakan hal yang sama”.

Saya jelas tidak menyukai keputusan desain yang dibuat di Bend dan saya ingin menyajikannya, namun hal ini telah terlalu banyak dicampur dengan poin utama yang saya coba sampaikan di bawah ini. Saya tidak ingin mengeditnya sekarang dan membuatnya terlihat seperti komentar yang ada sedang diberlakukan terlalu keras, sehingga saya merasa solusi terbaik adalah menjelaskan model mental saya tentang artikel saat saya menulisnya. Inilah komentar dari penulis Bend.

Bend 2 sedang dipromosikan sebagai bahasa untuk era kodifikasi dengan AI: manusia menulis “hukum”, AI menulis implementasi dan bukti, dan kompiler memeriksa apakah bukti tersebut valid. Semua ini terasa cukup mengesankan dan saya bisa memahami mengapa seseorang ingin bahasa yang bisa melakukan itu. Sebenarnya ada beberapa masalah besar dengan ide ini; namun, ini bukanlah topik artikel ini.

Sebaliknya, saya ingin membahas bagaimana Bend sendiri tampaknya telah terjatuh ke dalam jebakan umum dengan vibe-coding yang tidak sering disebutkan. Mari kita mulai dengan dasar dari apa yang Bend butuhkan dari pengembang untuk menulis demonstrasinya di halaman utama:https://github.com/bendlang/bend/blob/main/demos/app_win_is_bug_2d/LAWS.bend Saya tidak akan mereproduksinya di sini karena kode itu sendiri tidak terlalu penting. Yang penting untuk artikel ini adalah bahwa ini cukup banyak kode.

Ini adalah 58 baris kode hanya untuk menyatakan bahwa pemain tidak pernah bisa menyentuh bendera atau memenangkan permainan. Selain itu, ada masalah lain bahwa LLM dapat mendefinisikan ulang subprogram Game untuk melakukan apa pun; namun, ini sekali lagi bukan poin artikel. Selanjutnya, mari kita lihat apa yang perlu ditulis oleh LLM yang menulis kode untuk program ini untuk membuktikan “hukum”:https://github.com/bendlang/bend/blob/main/demos/app_win_is_bug_2d/PROOF.bend Itu banyak. 442 baris kode untuk membuktikan sifat-sifat sederhana tersebut.

Maka, apa masalah saya dengan ini? Mengapa saya menyebutnya jebakan vibe-coding? Masalahnya adalah bahwa vibe-coding memungkinkan seseorang membangun solusi yang besar sebelum mereka memahami masalah cukup untuk menyadari bahwa solusi yang jauh lebih baik ada. Seorang pengembang dapat menghasilkan sebuah bahasa dan kompiler sepenuhnya sambil melewatkan pendekatan yang akan langsung dihadapi mereka jika ada survei pengantar tentang bidang tersebut. Bidang yang dimaksud adalah verifikasi formal.

Hal yang menarik adalah bahwa kedua kata ini tidak muncul sama sekali di halaman web Bend atau dalam basis kode-nya. Pengembang telah membangun seluruh bahasa di sekitar sebuah bidang seolah-olah mereka tidak menyadari bahwa bidang tersebut ada. Untuk menunjukkan dengan jelas mengapa ini adalah masalah, mari kita buat ulang program yang sama yang digunakan Bend sebagai demonstrasi dalam SPARK, sebuah bahasa dan kompiler sumber terbuka untuk verifikasi formal.

Untuk adil terhadap Bend, saya sendiri telah melakukan vibe-coding untuk ini, saya hanya menyuruh seorang LLM untuk mereproduksi demonstrasi di SPARK tanpa petunjuk lebih lanjut: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...