标签 Rust 下的文章

数据打脸刻板印象:Go 的“样板代码”竟然和 Rust 一样多?

本文永久链接 – https://tonybai.com/2026/02/08/go-boilerplate-code-vs-rust-data-refutes-stereotypes

大家好,我是Tony Bai。

在编程语言的鄙视链中,Go 语言常常因为其“繁琐”而饱受诟病。

“if err != nil 写断手”、“缺乏语法糖”、“到处都是重复的样板代码”…… 这些似乎已经成为了 Go 的标签。

相比之下,Rust 往往被视为“表达力”的代表,拥有强大的宏、模式匹配和类型系统,能够用更少的代码做更多的事。

然而,Ben Boyter 最近的一项硬核研究,通过分析 GitHub 上各语言 Top 100 仓库(总计约 4 亿行代码),得出了一个令编程语言社区大跌眼镜的结论:

在代码重复率和“样板代码”密度上,Go 和 Rust 几乎处于同一水平线。

不仅是行数:ULOC 指标

传统的 SLOC(源代码行数)往往无法真实反映项目的复杂度和冗余度。Ben Boyter 使用了他开发的工具 scc 中的一个特殊指标:ULOC (Unique Lines of Code,唯一代码行数)

ULOC 指标并非简单的“全量去重”,而是通过剥离“结构性噪音”来更精准地衡量系统的真实复杂度。其计算逻辑如下:

  • 剔除结构化冗余:不仅排除了空行,还排除了单纯的闭合大括号行(})以及在不同文件中大量重复出现的公共引用代码(如 include 或 import)。
  • 过滤文件级模板:有效识别并扣除在项目中每个文件顶部几乎完全相同的 License(许可证)声明头,避免这些非逻辑性的“样板文字”虚增代码总量。
  • 计入注释成本:与传统 SLOC 不同,ULOC 会保留注释统计。作者认为,注释与代码一样需要同等的维护精力,反映了开发者的思考过程,因此属于“有效工作量”。

通过这种方式计算出的 Dryness(干度),代表了剔除“语法支架”和“版权模板”后,真正的业务逻辑与注释在代码中的占比。百分比越高,说明重复代码越少,信息密度越高;百分比越低,说明“样板代码”或重复结构越多。

令人震惊的对比:Go vs Rust

让我们直接看数据(数据来源:GitHub Top 100 仓库分析,2026年2月):

发现了吗?Rust (60.5%) 和 Go (58.78%) 的差距微乎其微,甚至可以说在统计学上是等价的。

Ben Boyter 在文章中坦言,他之前也持有“Go 的样板代码比 Rust 多得多”的刻板印象。但数据表明,虽然两者的“啰嗦”方式不同,但结果是一样的:

  • Go 的啰嗦:体现在显式的错误处理、显式的循环结构,以及为了简单性而不得不写的重复逻辑。
  • Rust 的啰嗦:体现在复杂的类型系统设置、Trait 的实现(impl blocks)、以及为了满足借用检查器而编写的“仪式性”代码。

正如作者所总结的:

Go 狂热者:“Go 很简单!” -> “是的,简单到你需要把同一件事写很多遍。”
Rust 狂热者:“Rust 完美表达!” -> “是的,但你花了 40% 的时间在写 setup 代码和 trait 实现。”

其他颠覆性的发现

除了 Go 和 Rust 的“握手言和”,这份报告还有几个极具冲击力的发现:

1. Lisp 家族是“干度之王”

Clojure 以 77.91% 的惊人密度位居榜首。Haskell 紧随其后。

这验证了一个古老的观点:如果你想要最高的“人类思想 vs 击键次数”比率,Lisp 和函数式语言依然是王者。它们几乎每一行代码都是纯粹的业务逻辑。

2. Java 居然比 Go 和 Rust 都“干”?

Java 的得分为 65.72%,显著高于 Go、Rust 和 C#。

这听起来反直觉,毕竟 Java 以 PublicStaticVoidMain 这种冗长著称。但这可能说明:

  • 现代 Java 及其生态(Spring 等)通过注解等方式极大地消除了样板代码。
  • 或者,Top 100 的 Java 项目多为成熟的业务系统,核心逻辑占比大,而 Go/Rust 项目中系统级代码(通常包含更多底层重复逻辑)较多。

3. 脚本语言的特异性

Shell Script 的密度极高(72.24%),但这主要是因为 Shell 脚本通常很短且高度定制化(Bespoke),很难复用,因此“唯一性”很高。

小结:复杂度的守恒

这个研究告诉我们一个道理:语言特性(Features)并不一定能消除复杂度,它往往只是转移了复杂度。

Go 选择了少量的特性,导致逻辑必须通过显式的重复代码来表达;Rust 选择了丰富的特性(宏、泛型、Trait),导致开发者必须编写大量的结构性代码来支撑这些特性。

对于 Gopher 来说,这或许是一种宽慰:别再为 if err != nil 感到羞愧了。隔壁写 Rust 的兄弟,虽然代码看起来很酷,但他们为了让编译器开心而敲击键盘的次数,并不比你少。

毕竟,软件工程没有银弹,只有取舍。

资料链接:https://boyter.org/posts/boilerplate-tax-ranking-popular-languages-by-density/


聊聊你的“啰嗦”体验

看完这个数据,你是感到“意料之中”还是“大吃一惊”?在你的实际开发中,你觉得 Go 的 if err != nil 更磨人,还是 Rust 的类型体操和 Trait 实现更让你头大?你认同“复杂度守恒”这个观点吗?

欢迎在评论区留下你的看法,让我们来一场理性的“语言之争”!


还在为“复制粘贴喂AI”而烦恼?我的新专栏 AI原生开发工作流实战 将带你:

  • 告别低效,重塑开发范式
  • 驾驭AI Agent(Claude Code),实现工作流自动化
  • 从“AI使用者”进化为规范驱动开发的“工作流指挥家”

扫描下方二维码,开启你的AI原生开发之旅。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

Rust 输了?在 AI Agent 的战场上,TypeScript 才是唯一的“神”

本文永久链接 – https://tonybai.com/2026/01/31/rust-vs-typescript-ai-agent-battleground-winner

大家好,我是Tony Bai。

如果把 2025 年定义为 Coding Agent(编程智能体) 的元年,那么刚刚开启的 2026 年,毫无疑问是 Personal AI Agent(个人助理智能体) 的元年。

openclaw(曾用名Clawdbot/Moltbot)为代表的开源项目,一夜之间席卷了 GitHub,让无数开发者为之疯狂。但在这一片繁荣的景象背后,作为一名敏锐的技术观察者,我发现了一个极其有趣的现象。

请环顾四周,看看那些最顶尖、最流行、体验最好的 AI Agent 项目:

  • Claude Code (Anthropic 官方):TypeScript。
  • Gemini CLI (Google 官方):TypeScript。
  • openclaw(100k+ Star):TypeScript。
  • opencode以及配套的oh-my-opencode:TypeScript。

再看看Go语言,虽然没有占据头把交椅,但也稳稳地守住了一席之地。Gastowncrush 这些专注于并发和后端服务的 Agent 或Agent编排框架,依然拥有自己的一批拥趸。

但是,那个在过去几年呼声最高、号称“内存安全、性能无敌、将重写一切”的 Rust 去哪了?

在 AI Agent 的应用层战场上,尤其是像上述这些火出圈的AI Agent项目中,Rust 几乎“失声”了。除了 OpenAI 的 Codex 这个孤勇者之外,我们很难在主流的开源 Agent 列表中看到 Rust 的身影。

难道在 AI 时代的Agentic AI(智能体AI应用)阶段,Rust 输了吗?为什么被视作“玩具语言”的 TypeScript,反而成了 AI Agent的“母语”?

今天,我们不谈信仰,只谈架构。让我们深入剖析这场语言战争背后的第一性原理。

数据说话:统治 Agent 界的“TS 军团”

在下结论之前,我们先来看一组数据。

我统计了目前 GitHub Trending 上排名前 20 的 AI Agent 相关项目(排除单纯的模型推理框架,仅统计应用层 Agent),结果令人震惊:

  • TypeScript / JavaScript:占比约 75%。
    这是绝对的统治地位。无论是官方的 SDK,还是社区的野生项目,TS 都是默认选项。openclaw的作者 Peter Steinberger 本人就是 iOS 和 C++ 出身,但他依然选择了 TS 来构建他的个人AI助理。
  • Python:占比约 15%。
    依靠着 LangChain 和 AutoGen 的早期积累,Python 依然有存量优势,但在构建交互式 CLI全栈应用 时,Python 的体验明显不如 TS 丝滑。
  • Go:占比约 8%。
    Go 凭借其单文件分发(Single Binary)和强大的并发模型,在Agent编排框架、Coding Agent,尤其是 DevOps 类的 Agent(如 K8s 运维助手)中表现亮眼。
  • Rust:占比 < 2%。
    除了 OpenAI 这种拥有无限工程资源的巨头敢用 Rust 重写 Codex,绝大多数独立开发者和创业公司似乎都对其敬而远之。

这个数据说明了什么?

说明在 Agent 这个特定的垂直领域,开发效率(Velocity) 已经彻底压倒了 运行效率(Performance)

对于一个每秒钟只能输出 50 个 Token 的 LLM 来说,你的程序是 1ms 响应还是 10ms 响应,用户根本感觉不到区别。但你能否在 1 天内上线一个新功能,用户感知极强。

第一性原理:为什么是 TypeScript?

TypeScript 之所以能赢,绝不是因为运气,而是因为它在基因层面契合了 AI Agent 的特性。

AI 的“母语”是 JSON,而 TS 是 JSON 的亲兄弟

这是最核心的原因之一。

大模型(LLM)与外部世界交互的通用协议是什么?是 JSON

无论是 Tool Calling(函数调用),还是 Structured Output(结构化输出),LLM 吐出来的都是 JSON。

  • TypeScript: 处理 JSON 是原生的。JSON.parse() 之后,直接当作对象操作。配合 TypeScript 的 Interface 定义,你可以获得极佳的类型提示,但又保留了运行时的灵活性。

    // TS: 轻松处理
    interface ToolCall { name: string; args: any }
    const call = JSON.parse(llmOutput) as ToolCall;
    
  • Rust/Go: 你需要定义严格的 Struct。如果 LLM 发疯,多返回了一个字段,或者把 int 写成了 string,你的 serde_json 或 json.Unmarshal 就会直接报错 panic。在 AI 开发中,你需要的是“宽容”,而 Rust/Go 给你的却是“严厉”。

“Vibe Coding” 需要松弛感

openclaw 作者提到的 Vibe Coding,本质上是一种“心流状态”。我想到了一个功能,告诉 AI,AI 生成代码,我运行,成功。整个过程行云流水。

  • TS 的体验: AI 生成了一段 TS 代码,可能类型有点小问题,用了 any,但能跑。我先跑起来看看效果,以后再修类型。It works > It is correct.
  • Rust 的体验: AI 生成了一段 Rust 代码。10分钟后编译器报错:“生命周期不匹配”、“借用检查失败”、“unwrap 可能会 panic”。你被迫停下来,花 30 分钟和编译器搏斗。你的 Vibe(氛围)瞬间没了。

在探索性开发(Exploratory Development)阶段,Rust 的严格性变成了阻碍。

生态位的降维打击:全栈与浏览器

Agent 不仅仅是在终端跑。它需要操作浏览器(比如使用Playwright),需要写 Chrome 插件,需要构建 Web UI。

在这些领域,TS 是唯一的王

如果你的 Agent 需要抓取网页数据,TS 有最成熟的库;如果你的 Agent 需要提供一个可视化的 Dashboard,TS 前后端通吃。

Rust 的尴尬与反击:退守“基础设施”

那么,Rust 真的输了吗?

从应用层来看,是的。但从基础设施层来看,Rust 依然是基石。

我们必须看清一个分层结构:

  • L0 (Infrastructure): 向量数据库 (LanceDB, Qdrant)、推理引擎 (像Candle)、高性能网关。这是 Rust 的领地。
  • L1 (Application): Agent 业务逻辑、流程编排、工具调用。这是 TypeScript 的领地。

Rust 并没有输,它只是退到了幕后。 Rust 成了 AI 的“地基”之一,而 TS 成了 AI 的“胶水”。

Agent 本质上就是把 LLM、数据库(记忆)、API 粘合在一起的胶水层。在这个层面上,灵活的胶水(TS)永远比坚硬的水泥(Rust)好用。

Go 的中间路线:CLI 界的“钉子户”

在这场战争中,Go 语言处于一个非常有趣的位置。它不像 TS 那么动态,也不像 Rust 那么死板。

Go 在 Agent 领域依然有一席之地,主要得益于两点:

  1. Single Binary (单文件分发):
    如果你写一个 CLI Agent 分发给用户,Go 编译出来就是一个二进制文件,扔过去就能跑。TS 还需要用户装 Node.js,装依赖(npm install 地狱)。对于 openclaw 这种本地工具,其实 Go 也是一个极佳的选择(虽然作者选了 TS)。
  2. 并发模型 (Goroutine):
    当我们需要构建 Agent Swarm (蜂群),比如同时启动 100 个 Agent 去爬取数据、分析情报时,Go 的 Goroutine 模型比 TS 的 Promise.all 更轻量、更可控,性能也更佳。

像 Beads 和 Gastown 这样的项目选择 Go,正是看中了它在工程化和并发上的平衡。

小结:语言没有优劣,只有“生态位”

Openclaw 的爆火和 Claude Code 的选择,向我们揭示了 AI 时代的一个新真理:

在 Agent 应用层,灵活性(Flexibility)和容错性(Forgiveness)是第一生产力。

  • 如果你想快速构建一个能够“听懂人话、调用工具”的 Agent,请毫不犹豫地选择 TypeScript
  • 如果你想构建一个高性能的 llm 路由网关、MCP Server 或 并发Agent编排工具,又或是Cli Agent,Go 是你不错的好帮手。
  • 如果你想造一个新的 向量数据库推理引擎,请拥抱 Rust

不要带着旧时代的“语言鄙视链”进入新时代。

在 AI 眼里,代码只是它实现目标的工具。它写 TS 最顺手,那 TS 就是最好的语言。

Rust 没有输,它只是太“硬”了,不适合在这个充满幻觉和不确定性的 Agent 世界里跳舞。


你的“Agent 母语”

TypeScript 的统治力看似不可动摇,但技术圈永远不缺变数。在你心目中,开发 AI Agent 的最佳语言是哪一门?你愿意为了开发效率而忍受 TypeScript 的类型体操,还是为了极致性能去啃 Rust 的硬骨头?

欢迎在评论区捍卫你的“本命语言”!让我们看看谁才是真正的 Agent 之王。

如果这篇文章颠覆了你的技术选型观,别忘了点个【赞】和【在看】,并转发给还在纠结学什么的兄弟!


还在为“复制粘贴喂AI”而烦恼?我的新专栏 AI原生开发工作流实战 将带你:

  • 告别低效,重塑开发范式
  • 驾驭AI Agent(Claude Code),实现工作流自动化
  • 从“AI使用者”进化为规范驱动开发的“工作流指挥家”

扫描下方二维码,开启你的AI原生开发之旅。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 AI原生开发工作流实战 Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com
这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats