本文永久链接 – https://tonybai.com/2025/06/19/language-design-in-the-era-of-llm
大家好,我是Tony Bai。
大型语言模型 (LLM) 的浪潮正以前所未有的速度和深度席卷软件开发领域。从代码生成、Bug 修复到文档撰写,AI 似乎正成为每一位开发者身边无所不能的“副驾驶”。在这股浪潮中,一个略显“刺耳”但又无法回避的论调开始浮现,正如一篇引人深思的博文《Programming Language Design in the Era of LLMs: A Return to Mediocrity?》中所指出的那样:“一切都更容易用 Python 实现 (Everything is Easier in Python)”——当然,这里指的是在 LLM 的强力辅助下。
这并非危言耸听。文章中展示的图表(来源于论文 “Knowledge Transfer from High-Resource to Low-Resource Programming Languages for Code LLMs“)清晰地揭示了一个趋势:LLM 在那些训练数据量巨大的“高资源”语言(如 Python, JavaScript, Java, C# 等)上,代码生成和任务解决的效能显著高于像 Go、Rust 这样的“低资源”语言:
如果 LLM 能够如此轻松地用 Python(或其他高资源语言)根据自然语言需求生成大部分“胶水代码”甚至核心逻辑,那么我们不禁要问:
今天,我们就来聊聊在 LLM 时代,DSL 和像 Go 这样的通用语言,其未来的价值究竟何在。
领域特定语言 (DSL) 的核心价值在于“专为特定领域而生”。通过精心设计的语法和语义,DSL 能够:
文章中那个视频游戏对话的例子就非常典型:从繁琐的 API 调用序列
# example code for a VN
character.draw("alice", character.LEFT, 0.1)
character.draw("bob", character.RIGHT, 0.1)
character.say("alice", "hello there!")
character.say("bob", "hi!")
character.state("alice", "sad")
character.say("alice", "did you hear the news?")
到简洁的 DSL 描述
# example DSL for dialog
[ alice @ left in 0.1, bob @right in 0.1 ]
alice: hello there!
bob: hi!
alice[sad]: did you hear the news?...
DSL 的优势一目了然。
然而,LLM 的出现,似乎正在侵蚀 DSL 的这些传统护城河。当开发者可以用自然语言向 Copilot 或 ChatGPT 描述“我想要一个能让 Alice 和 Bob 在屏幕两侧对话的场景”,并且 LLM 能够直接生成 Python 或 JavaScript 代码来实现这个功能时,我们不禁要问:为什么还要费心去学习、设计、构建和推广一个全新的 DSL 呢?
这里隐含的“机会成本”的问题非常现实:
这引发了一个令人担忧的趋势:DSL 的发展是否会因此停滞不前?语言设计的多样性是否会因此受到冲击,最终导致“人人皆写 Python (在 LLM 辅助下)”的局面?
Go语言虽然在全球拥有数百万开发者,并且在云原生、后端开发等领域占据主导地位,但在 LLM 的训练数据占比上,相较于 Python、JavaScript 等拥有更长历史和更广泛应用场景(尤其是 Web 前端、数据科学等产生大量开源代码的领域)的语言,仍然处于“低资源”状态。
这意味着,LLM 在直接生成高质量、复杂 Go 代码方面的能力,目前可能还无法与它在 Python 等语言上的表现相媲美。 这对 Go 社区和开发者来说,既是挑战,也是反思和寻求新机遇的契机。
挑战:
然而,Go 语言的独特优势在 LLM 时代或许会更加凸显:
面对大型语言模型(LLM)带来的挑战,编程语言的设计(无论是领域特定语言(DSL)还是通用语言如 Go)并非只能被动应对。学术界正在探索一些富有前景的新方向,旨在实现语言设计与 LLM 的协同进化,而非零和博弈。
首先,有研究提出教会 LLM 理解 DSL 的方法,核心思路是利用 LLM 擅长的语言(如 Python 的受限子集)来表达核心逻辑。由于 LLM 对特定 DSL 的理解和生成能力有限,开发者可以设计工具或方法,将这些 Python 表达式“提升”或自动翻译到目标 DSL 中。这一思路启示未来的 DSL 设计者应考虑为其语言提供一个 LLM 友好的“语义映射层”,例如用 Python 或其他高资源语言来描述其核心概念和操作。
其次,在 DSL 中弥合“形式化”与“非形式化”的鸿沟也是一个重要方向。开发者在编写复杂系统内核时,往往需要精确控制每一行代码,此时 LLM 的帮助有限。然而,在编写不常用的“一次性”脚本时,LLM 能够根据自然语言描述生成“胶水代码”,使得开发者只需关注核心的“有趣”部分。因此,未来的 DSL 设计可以探索如何无缝集成“非形式化”自然语言描述,作为规范、注释,甚至直接融入代码中。与此同时,是否可以从 DSL 的类型系统或静态分析结果中,自动生成高质量的自然语言规范,反过来帮助 LLM 更好地理解和生成 DSL 代码,值得深入研究。
最后,面向 LLM 辅助验证的语言设计也成为一种趋势。研究者们不再满足于 LLM 生成“能运行”的代码,而是期望 LLM 能生成带有形式化规约(specifications)的代码,并利用验证语言(如 Dafny、Boogie)来证明这些代码的正确性。这一趋势对 DSL 和通用语言(如 Go)的设计提出了新要求,开发者需要考虑如何更好地支持“规约即代码”和“验证即开发”的模式。例如,Go 语言的强类型和接口设计,为形式化验证提供了一定的基础,未来的改进可以在此基础上进一步发展。
通过以上几个方向的探索,编程语言设计有望与 LLM 实现更为紧密的协同进化,推动软件开发的进步和创新。
LLM 的崛起,无疑对整个编程语言生态带来了深刻的冲击和前所未有的挑战。那种“学会一门语言,用好一个框架,就能高枕无忧”的时代可能正在远去。
“一切皆可用 Python (在 LLM 辅助下)”的论调,虽然略显夸张,但也点出了一个事实:对于那些仅仅是为了减少样板代码、提供简单抽象的 DSL,或者在表达力和生态丰富度上不及 Python 的通用语言,其生存空间确实受到了挤压。
然而,这并不意味着语言设计本身会走向“平庸化”或消亡。相反,LLM 可能会迫使我们重新思考编程语言的核心价值:
最终,技术的浪潮会淘汰掉不适应变化的,也会催生出新的、更强大的生命体。对于我们开发者而言,保持学习的热情,理解不同工具的本质和边界,拥抱变化,或许才是应对这个“AI 定义一切”时代的不二法门。
你认为 LLM 会如何改变你使用的编程语言?Go 和 DSL 的未来将走向何方?欢迎在评论区留下你的真知灼见!
精进有道,更上层楼
极客时间《Go语言进阶课》上架刚好一个月,受到了各位读者的热烈欢迎和反馈。在这里感谢大家的支持。目前我们已经完成了课程模块一『语法强化篇』的 13 讲,为你系统突破 Go 语言的语法认知瓶颈,打下坚实基础。
现在,我们即将进入模块二『设计先行篇』,这不仅包括 API 设计,更涵盖了项目布局、包设计、并发设计、接口设计、错误处理设计等构建高质量 Go 代码的关键要素。
这门进阶课程,是我多年 Go 实战经验和深度思考的结晶,旨在帮助你突破瓶颈,从“会用 Go”迈向“精通 Go”,真正驾驭 Go 语言,编写出更优雅、
更高效、更可靠的生产级代码!
扫描下方二维码,立即开启你的 Go 语言进阶之旅!
感谢阅读!
如果这篇文章让你对AI时代的DSL和通用语言设计和未来有了新的认识,请帮忙转发,让更多朋友一起学习和进步!
商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。
© 2025, bigwhite. 版权所有.