加载失败
作者用 Claude Code(Anthropic 的代码生成模型变体)让模型生成了一个新编程语言及其实现、单元测试与示例,且声称自己未逐行阅读生成的代码而以模型产出的“guardrails”为保障。讨论围绕三方面展开:语言设计在 LLM 主导开发中是否仍然关键、是否应该为 LLM 优化语言(如提高令牌效率、局部可证明性和并发表达力)、以及把实现与测试完全托付给 LLM 的可靠性与责任归属问题。评论引用了 Rust(内存安全)、Typescript(强类型)、Django/Rails(框架保障)的现实对照,给出失败的生成示例(如 Claude 生成错误的 lexer/浮点解析),并提到用 Haskell/Lisp 快速做 DSL 的历史先例。相关技术名词包括 LLM、RAG(检索增强生成)、token(令牌)效率与 literate programming(将提示与模型输出线性混合的文档化编程风格)。
评论者普遍认为即便代码由 LLM 生成,语言的约束、类型系统与编译器保证仍会显著影响正确性与性能。评论中以 Rust 为例,强调其内存安全和借用检查能减少内存类错误,而由 LLM 书写更冗长但更安全的代码时这种代价对开发速度影响较小;同样,Typescript 的强类型和 linting 在“vibe coding”场景下被提到能帮助 LLM 产生更可靠的代码。有人还把框架(如 Django / Rails)比作额外保障层,指出这些现有工具能让 LLM 在高层保证认证与组织结构方面少犯错。多名评论者强调最终责任仍在开发者,不能完全不读或不审查生成的代码。
部分评论者认为现在更适合设计专门为 LLM 优化的语言,因为机器写代码时的优势可以被语言设计放大。有人列出明确目标:最大化局部推理、最小化全局复杂度、使大多数错误或非法状态无法表达、提高并发编码的表达力,并通过可选开关在类/函数层面微调性能,这些都是为了让 LLM 更容易产生可验证的正确代码。令牌效率(token efficiency)被反复提及:更紧凑或面向机器的语法能节省 tokens、降低调用成本并提升上下文利用率,因此在某些场景下更简洁的 DSL 比为人类可读的冗长语法更有价值。支持者还认为语言本身的约束能让 LLM 更快到达目标,从而降低人工审查成本并提高可靠性。
怀疑者提出重要问题:一个全新、几乎无人使用的语言没有训练数据,谁会用、谁来维护、以及 LLM 如何可靠支持它?有评论认为把新语言“slurp”进下一次训练并不现实,建议使用 RAG(检索增强生成)或让 LLM 直接读取语言文档以弥补训练空白;同时也有人回应,只要提供清晰的示例与上下文,模型可以在不依赖大量预训练的情况下使用该语言。讨论因此分为两派:一派乐观地认为 AI 会随着更新自动学会新语法,另一派认为生态与部署才是真正门槛,需要文档、示例和检索策略来解决。
对将全部实现与测试都交给 LLM 的做法有强烈批评,评论指出所谓的“guardrails”(由 LLM 生成的单元测试和示例)极易被错误代码通过或自身包含缺陷。一个具体案例是有人用 Claude 生成解析器的浮点字面量解析代码,结果不符合规范,最终把模型产出的代码全部舍弃;另有评论直接称仅靠模型生成的测试是“silly putty”,难以作为可靠保障。因此评论普遍认为自动化验证不足以替代人工审查与严格的工具链,在正式运行或发布前仍需人工或更严格的静态/动态检查。
也有评论指出快速搭建语言原型并非新鲜事,使用 Haskell 或 Lisp 系列语言可以在周末或课程项目里做出可用的编译器/DSL 原型。历史上确实存在短期内实现运行时或语言子集的先例(例如有人短期内实现 Perl 6 的运行时),因此用 LLM 做原型只是工具变了而已。尽管原型易得,评论也提醒从“画圈”(快速证明概念)走向完整、可靠并可维护的系统仍然很困难,完成复杂工程比起起草原型要难得多。
LLM: LLM(Large Language Model,大型语言模型):基于大规模神经网络训练、能生成自然语言与代码的模型(例如 Claude、GPT 系列),常用于代码生成、自动化测试与文档生成,但在精确实现规范与长期正确性上有局限。
RAG: RAG(Retrieval-Augmented Generation,检索增强生成):在生成时结合外部检索器或文档上下文的方法,使模型能利用最新或专门文档(如语言规范或示例)来弥补训练数据的缺口。
token / 令牌效率: token(令牌)是子词级别的输入单位,令牌效率指用更少 token 表达同样信息的能力;在按 token 计费或受上下文长度限制的 LLM 场景下,语法的紧凑性会直接影响成本、延迟与可用上下文量。
guardrails: guardrails(保护措施):在用 LLM 生成代码时设立的验证层,例如单元测试、示例输入输出、类型检查或编译器约束,用来检测与限制模型输出,但评论指出由同一 LLM 生成的 guardrails 本身也可能不可靠。