<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tony Bai &#187; 性能</title>
	<atom:link href="http://tonybai.com/tag/%e6%80%a7%e8%83%bd/feed/" rel="self" type="application/rss+xml" />
	<link>https://tonybai.com</link>
	<description>一个程序员的心路历程</description>
	<lastBuildDate>Mon, 08 Jun 2026 23:32:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>“用 Go 打天下，用 Rust 救火”：这才是 2026 年后端架构的唯一正解</title>
		<link>https://tonybai.com/2026/05/11/go-vs-rust-backend-architecture-the-2026-strategy/</link>
		<comments>https://tonybai.com/2026/05/11/go-vs-rust-backend-architecture-the-2026-strategy/#comments</comments>
		<pubDate>Sun, 10 May 2026 22:58:44 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[BackendArchitecture]]></category>
		<category><![CDATA[BusinessLogic]]></category>
		<category><![CDATA[cloudnative]]></category>
		<category><![CDATA[ConcurrencyModel]]></category>
		<category><![CDATA[DevelopmentEfficiency]]></category>
		<category><![CDATA[EngineeringTradeoffs]]></category>
		<category><![CDATA[ExtremeControl]]></category>
		<category><![CDATA[GarbageCollection]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[GoLanguage]]></category>
		<category><![CDATA[Go语言]]></category>
		<category><![CDATA[infrastructure]]></category>
		<category><![CDATA[latency]]></category>
		<category><![CDATA[MemorySafety]]></category>
		<category><![CDATA[Microservices]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[SystemsProgramming]]></category>
		<category><![CDATA[TechSelection]]></category>
		<category><![CDATA[Throughput]]></category>
		<category><![CDATA[业务逻辑]]></category>
		<category><![CDATA[云原生]]></category>
		<category><![CDATA[内存安全]]></category>
		<category><![CDATA[后端架构]]></category>
		<category><![CDATA[吞吐量]]></category>
		<category><![CDATA[响应时间]]></category>
		<category><![CDATA[垃圾回收]]></category>
		<category><![CDATA[基础设施]]></category>
		<category><![CDATA[工程权衡]]></category>
		<category><![CDATA[并发模型]]></category>
		<category><![CDATA[开发效率]]></category>
		<category><![CDATA[微服务]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[技术选型]]></category>
		<category><![CDATA[极致控制]]></category>
		<category><![CDATA[系统编程]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=6298</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/05/11/go-vs-rust-backend-architecture-the-2026-strategy 大家好，我是Tony Bai。 如果你经常逛各大技术社区，你一定会发现一个永远充满火药味的话题：Go 和 Rust，到底谁才是未来的后端霸主？ 两派的支持者常常吵得不可开交。Go 开发者嘲笑 Rust 编译器像个严厉的教导主任，写个代码能让人掉光头发；Rust 开发者则鄙视 Go 的 GC（垃圾回收）带来的延迟毛刺，觉得它就是个“性能玩具”。 但在真实的商业战场上，这种“非黑即白”的零和博弈毫无意义。 最近，海外技术团队 CodeStax.Ai 发表了一篇文章，题目非常霸气：《Rust vs Go：2026 年唯一有意义的后端语言对决》。 这篇文章没有去纠结语法的优劣，而是直接从企业成本、团队扩张、以及系统演进的宏观视角，给出了一个极具颠覆性，却又务实到令人拍案叫绝的架构结论： “用 Go 来构建（Build）系统，用 Rust 来优化（Optimize）系统。” 今天，我们就来拆解这套现代后端的终极生存哲学，看看顶级的架构师们，是如何在这对“冰与火”的语言中找到完美平衡的。 无情的现实：每一个后端系统，最终都会撞上“那堵墙” 在讲语言之前，我们必须先认清系统演进的残酷规律。 当你刚刚启动一个新项目时，一切都很美好。 你用微服务框架快速拉起几个 API，部署到 AWS 的容器服务（ECS）里，挂上消息队列（SQS）。一切都运转良好：接口响应很快，团队每个星期都能迭代新功能，老板很开心，每月的云服务器账单也完全在可控范围内。 直到有一天，增长（Growth）发生了。 流量呈指数级上升。突然之间，原本平稳的系统开始出现各种诡异的症状： 系统的内存占用越来越大，云账单的增长速度开始远远超过业务的增长速度。 在毫无征兆的流量高峰期，API 出现了莫名其妙的延迟毛刺（Latency Spikes）。 微小的性能低下，在每天几亿次的调用中，被复利放大成了拖垮整个集群的致命瓶颈。 这就是所有后端系统迟早都会撞上的“那堵墙（The Wall）”。 当撞墙的那一刻，老板问你的问题，将不再是：“我们最快多久能把这个功能做出来？” 而是变成了极其致命的灵魂拷问： “我们如何在不拖慢业务团队开发速度的前提下，让这个庞大的系统保持稳定、高效，并且把那该死的云账单降下来？” 正是在这堵墙面前，Go 和 Rust 的选择，才真正具有了生死攸关的意义。 Go 的主场：敏捷与编排的绝对王者 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/go-vs-rust-backend-architecture-the-2026-strategy-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/05/11/go-vs-rust-backend-architecture-the-2026-strategy">本文永久链接</a> &#8211; https://tonybai.com/2026/05/11/go-vs-rust-backend-architecture-the-2026-strategy</p>
<p>大家好，我是Tony Bai。</p>
<p>如果你经常逛各大技术社区，你一定会发现一个永远充满火药味的话题：<strong>Go 和 Rust，到底谁才是未来的后端霸主？</strong></p>
<p>两派的支持者常常吵得不可开交。Go 开发者嘲笑 Rust 编译器像个严厉的教导主任，写个代码能让人掉光头发；Rust 开发者则鄙视 Go 的 GC（垃圾回收）带来的延迟毛刺，觉得它就是个“性能玩具”。</p>
<p>但在真实的商业战场上，这种“非黑即白”的零和博弈毫无意义。</p>
<p>最近，海外技术团队 CodeStax.Ai 发表了一篇文章，题目非常霸气：<strong>《<a href="https://codestax.medium.com/rust-vs-go-the-only-backend-language-comparison-that-actually-matters-in-2026-6b8303dbb7c2">Rust vs Go：2026 年唯一有意义的后端语言对决</a>》</strong>。</p>
<p>这篇文章没有去纠结语法的优劣，而是直接从<strong>企业成本、团队扩张、以及系统演进</strong>的宏观视角，给出了一个极具颠覆性，却又务实到令人拍案叫绝的架构结论：</p>
<p><strong>“用 Go 来构建（Build）系统，用 Rust 来优化（Optimize）系统。”</strong></p>
<p>今天，我们就来拆解这套现代后端的终极生存哲学，看看顶级的架构师们，是如何在这对“冰与火”的语言中找到完美平衡的。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/system-programming-in-go-pr.png" alt="" /></p>
<h2>无情的现实：每一个后端系统，最终都会撞上“那堵墙”</h2>
<p>在讲语言之前，我们必须先认清系统演进的残酷规律。</p>
<p>当你刚刚启动一个新项目时，一切都很美好。</p>
<p>你用微服务框架快速拉起几个 API，部署到 AWS 的容器服务（ECS）里，挂上消息队列（SQS）。一切都运转良好：接口响应很快，团队每个星期都能迭代新功能，老板很开心，每月的云服务器账单也完全在可控范围内。</p>
<p><strong>直到有一天，增长（Growth）发生了。</strong></p>
<p>流量呈指数级上升。突然之间，原本平稳的系统开始出现各种诡异的症状：</p>
<ul>
<li>系统的内存占用越来越大，云账单的增长速度开始远远超过业务的增长速度。</li>
<li>在毫无征兆的流量高峰期，API 出现了莫名其妙的延迟毛刺（Latency Spikes）。</li>
<li>微小的性能低下，在每天几亿次的调用中，被复利放大成了拖垮整个集群的致命瓶颈。</li>
</ul>
<p><strong>这就是所有后端系统迟早都会撞上的“那堵墙（The Wall）”。</strong></p>
<p>当撞墙的那一刻，老板问你的问题，将不再是：<em>“我们最快多久能把这个功能做出来？”</em></p>
<p>而是变成了极其致命的灵魂拷问：</p>
<p><em>“我们如何在不拖慢业务团队开发速度的前提下，让这个庞大的系统保持稳定、高效，并且把那该死的云账单降下来？”</em></p>
<p>正是在这堵墙面前，Go 和 Rust 的选择，才真正具有了生死攸关的意义。</p>
<h2>Go 的主场：敏捷与编排的绝对王者</h2>
<p>在跨越“那堵墙”之前的大部分时间里，以及在墙外 80% 的业务场景中，<strong>Go 语言是毫无争议的默认王者。</strong></p>
<p>为什么？因为现代的后端架构，本质上不再是写一个庞大的单体应用，而是在做<strong>“服务编排（Orchestration）”</strong>。</p>
<p>你需要一个 API 网关来接收请求，需要一个个微服务去读写数据库（RDS），需要 Worker 去消费消息队列（Kafka），还需要后台的定时任务去跑批处理。</p>
<p>这些错综复杂的分布式场景，对语言的要求出奇的一致：</p>
<ul>
<li><strong>启动要极快</strong>：为了适应容器和 Serverless（Lambda）的弹性伸缩。</li>
<li><strong>并发要极简</strong>：遇到高并发？随手 go func() 就能轻松应对 SQS 消费和扇出（Fan-out）模型。</li>
<li><strong>心智负担要极低</strong>：代码必须像白开水一样直白。今天刚入职的应届生，明天就能看懂并修改跑了三年的核心代码。</li>
</ul>
<p>Go 语言完美地满足了这一切。它的设计哲学就是：<strong>“天下武功，唯快不破；保持简单，拒绝炫技。”</strong></p>
<p>在 Go 的世界里，开发者的个人时间，永远比 CPU 的计算时间更昂贵。它用“相对够用”的性能，换取了团队极高的迭代速度和代码的一致性。</p>
<p>这就是为什么，<strong>Go 语言统治了业务服务的“编排层（Orchestration Layer）”。</strong></p>
<h2>Rust 的拔剑：在深水区里，手撕性能瓶颈</h2>
<p>然而，当你的系统撞上“那堵墙”，当系统中某些特定的组件，变成了吞噬资源的黑洞时，Go 语言的 GC（垃圾回收）和相对粗放的内存管理，就会显得力不从心。</p>
<p>这个时候，就是 <strong>Rust</strong> 拔剑出鞘的时刻。</p>
<p>Rust 不适合用来写那些三天两头变需求的业务 CRUD 接口，它真正的主战场，是系统里那些承担<strong>“重体力劳动（Heavy-lifting components）”</strong>的深水区：</p>
<ul>
<li><strong>高吞吐量的消息处理器</strong>：比如每天要吞吐数百亿条记录的 Kafka 消费者集群。</li>
<li><strong>实时流处理和欺诈检测引擎</strong>：在这些场景下，哪怕是几十毫秒的 GC 停顿，都会导致不可估量的经济损失。</li>
<li><strong>成本敏感的边缘计算（Edge Compute）</strong>：在资源极其受限的环境中榨干最后一滴 CPU 性能。</li>
</ul>
<p>在这些领域，Rust 的设计哲学展现出了降维打击般的威力：<strong>“控制所有重要的事情。”</strong></p>
<p>Rust 假设：线上的 Bug 是极其昂贵的；规模化后的性能低下是致命的。因此，它用极其严苛的编译器，强迫你在写代码的阶段就解决掉所有可能的内存泄漏和并发竞争。</p>
<p>它没有 GC，内存效率极高。在 CPU 密集型的任务中，它通常比 Go 快 2 到 5 倍。</p>
<h2>终极兵法：双剑合璧的实战演练</h2>
<p>聪明的架构师早就看透了：<strong>我们不需要在 Go 和 Rust 之间二选一，我们需要的是将它们各自部署在正确的战线上。</strong></p>
<p>在真实的硅谷大厂和独角兽公司中，最经典的架构模式已经浮出水面：</p>
<p><strong>Pattern 1：用 Go 写服务层，用 Rust 写热点路径（Hot Path）</strong></p>
<ul>
<li>让 Go 去处理绝大多数的 API 路由、微服务间通信和业务编排。这保证了团队的开发速度。</li>
<li>一旦监控发现某个模块成了 CPU 或内存的瓶颈（比如音视频转码、核心推荐算法），立刻将其剥离，用 Rust 重写，作为一个独立的高性能微服务被 Go 调用。这种“好钢用在刀刃上”的策略，避免了过度工程化。</li>
</ul>
<p><strong>Pattern 2：为成本和延迟而战</strong></p>
<ul>
<li>当你的 AWS ECS 集群因为某个 Go 写的聚合管道而不断扩容，云账单即将失控时；或者当你的金融系统要求绝对可预测的执行时间，不能容忍任何 GC 暂停时。</li>
<li>毫无犹豫地让 Rust 进场接管。它省下的机器成本，足以支付重写代码的代价。</li>
</ul>
<h2>小结：别为了追求“最好”，而忘记了“为什么出发”</h2>
<p>最后，我想分享一下我最喜欢的一段话：</p>
<blockquote>
<p>“在这个世界上，你永远无法通过选择一门‘最好的语言’来赢得战争。”</p>
<p>“你赢得战争的方式是：<strong>深刻理解你的系统会在哪里崩溃；知道哪种工具能精准地解决那个特定的问题；并且，只有在确实能带来巨大回报的地方，才引入复杂性。</strong>”</p>
</blockquote>
<p>如果你的系统还在为了活下去而疯狂堆功能，请闭上眼睛，用 <strong>Go 语言</strong>全力冲刺。</p>
<p>如果你的系统已经庞大到每次发版都在流血，每多消耗 1MB 内存都在烧钱，那么，请翻开 <strong>Rust</strong> 的手册。</p>
<p><strong>用 Go 来构建你的商业帝国，用 Rust 来捍卫它的边界。</strong></p>
<p>这，才是 2026 年，一个成熟架构师应有的顶级大局观。</p>
<p>资料链接：https://codestax.medium.com/rust-vs-go-the-only-backend-language-comparison-that-actually-matters-in-2026-6b8303dbb7c2</p>
<hr />
<p><strong>今日互动探讨：</strong></p>
<p>在你的公司里，是否也遇到了系统“撞墙”的时刻？你们目前是如何解决性能瓶颈的？有没有考虑过，或者正在尝试引入 Rust 来重写核心的 Go 模块？</p>
<p>欢迎在评论区分享你的实战经验与踩坑血泪史！</p>
<hr />
<p>还在为写 Agent 框架频频死循环、上下文爆炸而束手无策？我的新专栏 <strong>《<a href="http://gk.link/a/12IzL">从0 开始构建 Agent Harness</a>》</strong> 将带你：</p>
<ul>
<li>抛弃臃肿框架，回归“驾驭工程 (Harness Engineering)”的第一性原理</li>
<li>用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等，复刻极简OpenClaw</li>
<li>构建坚不可摧的 Safety Middleware 与飞书人工审批防线</li>
<li>在底层实现 Token 成本审计、链路追踪与自动化跑分评估</li>
<li>从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”</li>
</ul>
<p>扫描下方二维码，开启从 0 开始构建Agent Harness 的实战之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/build-agent-harness-from-scratch-qr.png" alt="" /></p>
<hr />
<p><strong>原「Gopher部落」已重装升级为「Go &amp; AI 精进营」知识星球，快来加入星球，开启你的技术跃迁之旅吧！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等，掌握 AI 时代新技能。 </li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/05/11/go-vs-rust-backend-architecture-the-2026-strategy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bun 创始人带头“叛逃”：放弃 Zig，用 AI 把项目重写成 Rust？</title>
		<link>https://tonybai.com/2026/05/08/bun-founder-abandons-zig-for-rust-ai-rewrite/</link>
		<comments>https://tonybai.com/2026/05/08/bun-founder-abandons-zig-for-rust-ai-rewrite/#comments</comments>
		<pubDate>Thu, 07 May 2026 23:13:04 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[Agent]]></category>
		<category><![CDATA[AInative]]></category>
		<category><![CDATA[AIProgramming]]></category>
		<category><![CDATA[AI原生]]></category>
		<category><![CDATA[AI编程]]></category>
		<category><![CDATA[Allocators]]></category>
		<category><![CDATA[ArchitectureDesign]]></category>
		<category><![CDATA[bun]]></category>
		<category><![CDATA[Compiler]]></category>
		<category><![CDATA[DevelopmentEfficiency]]></category>
		<category><![CDATA[ecosystem]]></category>
		<category><![CDATA[ErrorHandling]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[infrastructure]]></category>
		<category><![CDATA[JarredSumner]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[OpenSourceProject]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Pointers]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[SupplyChainSecurity]]></category>
		<category><![CDATA[TechStack]]></category>
		<category><![CDATA[toolchain]]></category>
		<category><![CDATA[Zig]]></category>
		<category><![CDATA[供应链安全]]></category>
		<category><![CDATA[分配器]]></category>
		<category><![CDATA[基础设施]]></category>
		<category><![CDATA[工具链]]></category>
		<category><![CDATA[开发效率]]></category>
		<category><![CDATA[开源项目]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[技术栈]]></category>
		<category><![CDATA[指针]]></category>
		<category><![CDATA[智能体]]></category>
		<category><![CDATA[架构设计]]></category>
		<category><![CDATA[生态系统]]></category>
		<category><![CDATA[编译器]]></category>
		<category><![CDATA[迁移]]></category>
		<category><![CDATA[错误处理]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=6279</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/05/08/bun-founder-abandons-zig-for-rust-ai-rewrite 大家好，我是Tony Bai。 在过去的两年里，Bun 以其闪电般的速度，成为了前端世界挑战 Node.js 霸权的“重量级选手”。 而它成功的秘诀之一，就是其创始人 Jarred Sumner 极其激进、甚至有些“偏执”的技术选型——全面押注 Zig 语言。 当全世界都在用 C++、Go、Rust 这些“主流”语言构建底层基础设施时，Bun 却像一个孤独的叛逆者，将自己的身家性命，全部压在了小众但优雅的 Zig 身上。 但就在前几天，这位“叛逆者”似乎也“背叛”了自己的信仰。 X 平台上的开发者 Luke Parker 突然发现，Bun 的官方 GitHub 仓库里，出现了一个名为 claude/phase-a-port 的神秘分支。点进去一看，所有人都惊呆了：Bun 的创始人 Jarred Sumner，正在将 Bun 的核心代码，从 Zig 迁移到 Rust！ 更令人震撼的是，这次迁移的主导者，似乎并不是 Jarred 本人，而是一个 AI Agent。 仓库里一份名为 PORTING.md 的文件，赫然写着给 AI 的指令： “你正在将一个 Zig 文件翻译成 Rust。在写任何代码之前，请先读完这份文档。A 阶段的目标，是生成一份能忠实捕捉原始逻辑的 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/bun-founder-abandons-zig-for-rust-ai-rewrite-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/05/08/bun-founder-abandons-zig-for-rust-ai-rewrite">本文永久链接</a> &#8211; https://tonybai.com/2026/05/08/bun-founder-abandons-zig-for-rust-ai-rewrite</p>
<p>大家好，我是Tony Bai。</p>
<p>在过去的两年里，Bun 以其闪电般的速度，成为了前端世界挑战 Node.js 霸权的“重量级选手”。</p>
<p>而它成功的秘诀之一，就是其创始人 Jarred Sumner 极其激进、甚至有些“偏执”的技术选型——<strong>全面押注 Zig 语言</strong>。</p>
<p>当全世界都在用 C++、Go、Rust 这些“主流”语言构建底层基础设施时，Bun 却像一个孤独的叛逆者，将自己的身家性命，全部压在了小众但优雅的 Zig 身上。</p>
<p><strong>但就在前几天，这位“叛逆者”似乎也“背叛”了自己的信仰。</strong></p>
<p>X 平台上的开发者 Luke Parker 突然发现，Bun 的官方 GitHub 仓库里，出现了一个名为 <a href="https://github.com/oven-sh/bun/tree/claude/phase-a-port">claude/phase-a-port</a> 的神秘分支。点进去一看，所有人都惊呆了：<strong>Bun 的创始人 Jarred Sumner，正在将 Bun 的核心代码，从 Zig 迁移到 Rust！</strong></p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/bun-founder-abandons-zig-for-rust-ai-rewrite-2.png" alt="" /></p>
<p>更令人震撼的是，这次迁移的主导者，似乎并不是 Jarred 本人，而是一个 <strong>AI Agent</strong>。</p>
<p>仓库里一份名为 PORTING.md 的文件，赫然写着给 AI 的指令：</p>
<blockquote>
<p>“你正在将一个 Zig 文件翻译成 Rust。在写任何代码之前，请先读完这份文档。A 阶段的目标，是生成一份能忠实捕捉原始逻辑的 .rs 草稿文件——<strong>它甚至不需要能编译通过</strong>。”</p>
</blockquote>
<p>这条消息瞬间引爆了整个技术圈。</p>
<ul>
<li>Zig 社区感到被“背叛”和抛弃。</li>
<li>Rust 社区则一片欢腾，迎来了“又一位巨星的加盟”。</li>
<li>而更多的开发者则在问：<strong>这背后到底发生了什么？为什么连 Zig 最忠实的信徒，也投向了 Rust 的怀抱？</strong></li>
</ul>
<p>今天，我们就来深度扒开这场顶级项目的“技术叛逃”，看看在 AI 编程席卷一切的时代，编程语言的选择标准，正在发生怎样翻天覆地的变化。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/system-programming-in-go-pr.png" alt="" /></p>
<h2>铁证如山：从 CLAUDE.md 到 2.8 万行代码变更</h2>
<p>起初，很多人以为这只是一个愚人节玩笑。</p>
<p>但随着 Simon Willison 等社区大佬的深挖，越来越多的“铁证”浮出水面：</p>
<ol>
<li><strong>巨大的代码量</strong>：这个实验性的分支，在一次提交中就变更了 <strong>12 个文件，新增了 2.8 万行代码</strong>，这绝不是小打小闹。</li>
<li><strong>写给 AI 的“说明书”</strong>：那份长达 622 行的 PORTING.md，极其详细地将 Zig 的指针、分配器、错误处理等核心概念，一一映射到了 Rust 的等价物上。这显然是一份给 AI Agent（很可能是 Anthropic 的 Claude Code）看的“操作手册”。</li>
<li><strong>创始人的亲自下场</strong>：所有的提交，都来自于 Jarred Sumner 本人。</li>
</ol>
<p>种种迹象表明：<strong>Bun 真的在严肃地考虑，或者至少是在深度探索，用 Rust 来重写自己的 Zig 内核。</strong></p>
<h2>动机拆解：我们为什么要背叛“全世界最好的语言”？</h2>
<p>这就引出了所有人都想问的那个问题：<strong>为什么？</strong></p>
<p>Zig 语言以其简单的语法、对 C 语言的无缝兼容、以及对底层内存的精准控制而著称。Jarred Sumner 本人也曾是 Zig 最狂热的布道者。</p>
<p>但在 X 平台的激烈讨论中，社区大佬们给出了几个推测：</p>
<p><strong>1. 生态的贫瘠 vs Rust 的(相对)富饶</strong></p>
<p>这是最核心的原因。Zig 虽然优雅，但它的社区生态，相比于已经“枝繁叶茂”的 Rust 来说，依然是一片“荒漠”。</p>
<p>当你需要一个成熟的异步运行时、一个功能完备的 HTTP 客户端、或者一个高性能的序列化库时，在 Rust 的 crates.io 上有很多个经过生产环境检验的“轮子”可用。</p>
<p>而在 Zig 的世界里，很多时候你都不得不“从零手搓”。</p>
<p><strong>2. 人才的稀缺 vs 社区的规模</strong></p>
<p>Bun 作为一个商业项目，需要不断地招聘顶尖的系统程序员。但现实是，精通 Zig 的开发者凤毛麟角，而 Rust 开发者社区的规模，则要大上几个数量级。</p>
<p>选择 Rust，就是选择了一个更庞大、更多元的人才库。</p>
<p><strong>3. 工具链的成熟度</strong></p>
<p>从强大的 rust-analyzer (LSP)，到无所不能的 cargo，再到各种静态分析、模糊测试工具……Rust 的工具链生态，在过去几年里已经达到了一个相当高的成熟度。</p>
<p>而 Zig，在这方面依然还有很长的路要走。</p>
<p><strong>4. 对 AI 的“友好度”</strong></p>
<p>这是一个极其微妙、却又越来越重要的因素。</p>
<p>Rust 强大的类型系统、详尽的错误信息、以及海量的开源代码（作为训练数据），使得 AI Agent 在生成和修复 Rust 代码时，表现得异常出色。<br />
AI 就像一个不知疲倦的实习生，而 Rust 严苛的编译器，就是那个最完美的、能 24 小时进行 Code Review 的“导师”。</p>
<h2>AI 作案现场：当“代码重构”成为一种“指令集”</h2>
<p>这次事件中最具未来感的，是 Jarred Sumner 选择的重构方式。</p>
<p>他没有去组建一个庞大的“重写小组”，而是把自己的架构思想，沉淀成了一份给 AI 看的“技术规范”。</p>
<blockquote>
<p><strong>A 阶段：AI 只管“翻译”，不管对错。</strong><br />
  目标是快速地将 Zig 的逻辑，“像素级”地平移到 Rust 文件中。这个阶段的代码，甚至不需要能编译。</p>
<p><strong>B 阶段：AI 负责“修复”，直到编译通过。</strong><br />
  在这个阶段，AI 将扮演一个“修复工”的角色，不断地与 Rust 编译器搏斗，修复所有权、生命周期等各种编译错误。</p>
</blockquote>
<p><strong>看懂了吗？</strong></p>
<p>这是一种全新的、堪称“流水线”式的 AI 协同开发模式。<strong>人类架构师负责定义“做什么（What）”和“怎么做（How）”，而 AI Agent 负责具体的“执行（Execution）”。</strong></p>
<h2>反思：在 AI 时代，我们该如何选择技术栈？</h2>
<p>Bun 与 Zig 的这次“决裂”，像一面镜子，照出了 AI 时代技术选型的新法则。</p>
<p><strong>法则一：生态的“引力”，正在变得比语法本身更重要</strong></p>
<p>一门语言的语法再优美，如果它的生态里没有足够多的“轮子”，那么在追求快速迭代的今天，它就必然会被边缘化。<strong>AI 加速了代码的生成，也同样加速了对“成熟生态”的依赖。</strong></p>
<p><strong>法则二：“对 AI 的友好度”，正在成为一门语言的核心竞争力</strong></p>
<p>一门语言的文档是否完善、错误信息是否清晰、社区代码风格是否统一……这些在过去被认为是“软实力”的因素，在今天，直接决定了 AI 在这门语言上的生产力上限。</p>
<p><strong>法则三：没有永恒的“信仰”，只有永恒的“取舍（Trade-offs）”</strong></p>
<p>Jarred Sumner 对 Zig 的热爱毋庸置疑。但作为一个顶级项目的负责人，他必须在“个人技术品味”与“项目长期发展”之间，做出最理性的、甚至是痛苦的权衡。</p>
<p><strong>在工程的世界里，从来没有“最好的”语言，只有“最合适的”工具。</strong></p>
<h2>小结：一场没有硝烟的“换核”战争</h2>
<p>Bun 的这次实验性“叛逃”，无论最终是否会合并到主干，都已经为我们揭示了未来十年技术演进的残酷真相：</p>
<p>在 AI 这头“效率巨兽”的面前，所有的技术壁垒、社区信仰、甚至是个人情感，都可能被无情地碾碎。</p>
<p>当你的第三个员工是一个名叫 Claude Code 的 AI 时，选择一个它最擅长、能让它发挥最大威力的语言，似乎成了一个无可辩驳的“最优解”。</p>
<p>这场从 Zig 到 Rust 的“换核”战争，或许只是未来无数场“AI 驱动的技术栈重构”的第一次预演。</p>
<p>下一个，会是谁？</p>
<p>资料链接：</p>
<ul>
<li>https://x.com/i/trending/2051505180647227556</li>
<li>https://github.com/oven-sh/bun/blob/46d3bc29f270fa881dd5730ef1549e88407701a5/docs/PORTING.md</li>
<li>https://github.com/oven-sh/bun/tree/claude/phase-a-port</li>
</ul>
<hr />
<p><strong>今日互动探讨：</strong></p>
<p>你如何看待 Bun 创始人“抛弃”Zig 的行为？是理性的商业决策，还是对开源精神的背叛？在 AI 时代，你认为 Go、Rust、Zig 这三门语言，谁的未来更光明？</p>
<p>欢迎在评论区分享你的看法！</p>
<hr />
<p>还在为写 Agent 框架频频死循环、上下文爆炸而束手无策？我的新专栏 <strong>《<a href="http://gk.link/a/12IzL">从0 开始构建 Agent Harness</a>》</strong> 将带你：</p>
<ul>
<li>抛弃臃肿框架，回归“驾驭工程 (Harness Engineering)”的第一性原理</li>
<li>用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等，复刻极简OpenClaw</li>
<li>构建坚不可摧的 Safety Middleware 与飞书人工审批防线</li>
<li>在底层实现 Token 成本审计、链路追踪与自动化跑分评估</li>
<li>从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”</li>
</ul>
<p>扫描下方二维码，开启从 0 开始构建Agent Harness 的实战之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/build-agent-harness-from-scratch-qr.png" alt="" /></p>
<hr />
<p><strong>原「Gopher部落」已重装升级为「Go &amp; AI 精进营」知识星球，快来加入星球，开启你的技术跃迁之旅吧！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等，掌握 AI 时代新技能。 </li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/05/08/bun-founder-abandons-zig-for-rust-ai-rewrite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为什么人人爱 Rust，但 RedMonk 榜单却给它泼了一盆冷水？</title>
		<link>https://tonybai.com/2026/04/25/rust-popularity-vs-redmonk-ranking-reality-check/</link>
		<comments>https://tonybai.com/2026/04/25/rust-popularity-vs-redmonk-ranking-reality-check/#comments</comments>
		<pubDate>Fri, 24 Apr 2026 23:43:32 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[BorrowChecker]]></category>
		<category><![CDATA[CrossingTheChasm]]></category>
		<category><![CDATA[DeveloperExperience]]></category>
		<category><![CDATA[EcosystemFragmentation]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[GoLanguage]]></category>
		<category><![CDATA[Go语言]]></category>
		<category><![CDATA[Industrialization]]></category>
		<category><![CDATA[LearningCurve]]></category>
		<category><![CDATA[ownership]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[ProgrammingLanguageRankings]]></category>
		<category><![CDATA[redmonk]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[safety]]></category>
		<category><![CDATA[ShippingSpeed]]></category>
		<category><![CDATA[standardlibrary]]></category>
		<category><![CDATA[SupplyChainSecurity]]></category>
		<category><![CDATA[TechSelection]]></category>
		<category><![CDATA[TIOBE]]></category>
		<category><![CDATA[供应链安全]]></category>
		<category><![CDATA[借用检查器]]></category>
		<category><![CDATA[学习曲线]]></category>
		<category><![CDATA[安全性]]></category>
		<category><![CDATA[工业化]]></category>
		<category><![CDATA[开发者体验]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[所有权]]></category>
		<category><![CDATA[技术选型]]></category>
		<category><![CDATA[标准库]]></category>
		<category><![CDATA[生产效率]]></category>
		<category><![CDATA[生态碎片化]]></category>
		<category><![CDATA[编程语言排名]]></category>
		<category><![CDATA[跨越鸿沟]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=6225</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/04/25/rust-popularity-vs-redmonk-ranking-reality-check 大家好，我是Tony Bai。 在过去几年的技术圈，Rust 是当之无愧的“流量之王”。 它连续多年在 Stack Overflow 开发者调研中蝉联“最受喜爱的语言”；它是 Linux 内核 30 年来引入的唯一非 C 语言；它是微软、亚马逊等大厂重塑底层安全架构的希望。 如果只看社交媒体和社区讨论，你会觉得 Rust 已经“统治了世界”。在一片赞歌中，大家默认 Rust 杀进主流榜单前十、取代传统语言只是时间问题。 但就在 2026 年 4 月，一份来自权威分析机构 RedMonk 的2026.1编程语言排行榜，却给所有“Rust 狂热者”泼了一盆透心凉的冷水。 数据呈现了一个极其残酷的反差： 在这份以“开发者真实选择”为核心指标的榜单上，Rust 的排名并没有像预期的那样一飞冲天，而是停滞在了第 20 位，甚至被曾被视为小众的 Dart 所超越。相比之下，那个常被调侃“无趣”的 Go 语言，依然稳稳地坐在第 12 位，并在云原生领域保持着统治地位。 为什么人人爱 Rust，但它在工业界的大规模普及却显得如此缓慢？为什么它“攻陷”了最硬核的 Linux 内核，却迟迟进不了普通开发者的日常？ 今天，我想结合近期社区的深度讨论，扒开 Rust 这层华丽的外衣，带大家看看这门“天选之子”背后的生存现状与真实挑战。 口碑与数据的鸿沟：被锁死在“塔尖”的生产力 在开发者 Alejandra 最近整理的一份清单里，Rust 的“战绩”堪称辉煌：Windows 11 的核心组件、AWS [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/rust-popularity-vs-redmonk-ranking-reality-check-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/04/25/rust-popularity-vs-redmonk-ranking-reality-check">本文永久链接</a> &#8211; https://tonybai.com/2026/04/25/rust-popularity-vs-redmonk-ranking-reality-check</p>
<p>大家好，我是Tony Bai。</p>
<p>在过去几年的技术圈，Rust 是当之无愧的“流量之王”。</p>
<p>它连续多年在 Stack Overflow 开发者调研中蝉联“最受喜爱的语言”；它是 Linux 内核 30 年来引入的唯一非 C 语言；它是微软、亚马逊等大厂重塑底层安全架构的希望。</p>
<p>如果只看社交媒体和社区讨论，你会觉得 Rust 已经“统治了世界”。在一片赞歌中，大家默认 Rust 杀进主流榜单前十、取代传统语言只是时间问题。</p>
<p><strong>但就在 2026 年 4 月，一份来自权威分析机构 RedMonk 的2026.1编程语言排行榜，却给所有“Rust 狂热者”泼了一盆透心凉的冷水。</strong></p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/rust-popularity-vs-redmonk-ranking-reality-check-2.png" alt="" /></p>
<p>数据呈现了一个极其残酷的反差：</p>
<p>在这份以“开发者真实选择”为核心指标的榜单上，Rust 的排名并没有像预期的那样一飞冲天，而是<strong>停滞在了第 20 位</strong>，甚至被曾被视为小众的 Dart 所超越。相比之下，那个常被调侃“无趣”的 Go 语言，依然稳稳地坐在第 12 位，并在云原生领域保持着统治地位。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/rust-popularity-vs-redmonk-ranking-reality-check-3.png" alt="" /></p>
<p>为什么人人爱 Rust，但它在工业界的大规模普及却显得如此缓慢？为什么它“攻陷”了最硬核的 Linux 内核，却迟迟进不了普通开发者的日常？</p>
<p>今天，我想结合近期社区的深度讨论，扒开 Rust 这层华丽的外衣，带大家看看这门“天选之子”背后的生存现状与真实挑战。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/system-programming-in-go-pr.png" alt="" /></p>
<h2>口碑与数据的鸿沟：被锁死在“塔尖”的生产力</h2>
<p>在开发者 Alejandra 最近<a href="https://blog.goose.love/posts/what-actually-uses-rust/">整理的一份清单</a>里，Rust 的“战绩”堪称辉煌：Windows 11 的核心组件、AWS 的 Firecracker 虚拟化、Cloudflare 的下一代代理服务器 Pingora……</p>
<p>但这恰恰揭示了 Rust 目前最大的尴尬：它是一个“属于 1% 的神兵利器”。</p>
<p>这些成功的 Rust 项目，无一例外都属于“系统级基础设施”领域。它们雇佣的是全球前 1% 的顶级程序员，拥有极其漫长的研发周期和近乎奢侈的调试成本。</p>
<p>正如 RedMonk 的分析师在<a href="https://redmonk.com/sogrady/2026/04/14/language-rankings-1-26">报告</a>中一针见血地指出：</p>
<blockquote>
<p>“Rust 依然面临着非专家程序员难以逾越的学习门槛。专家们愿意投入时间，但更广泛的主流采用似乎面临着巨大的惯性。”</p>
</blockquote>
<p>开发者 Alejandra 在其博文的自白中也坦言：</p>
<blockquote>
<p>“无论我们如何自我安慰 Rust 已经进入主流，事实是：它离 C++ 甚至 Java 的普及程度，依然有着深不见底的鸿沟。大学教的第一门语言依然是 Java，飞机上依然在用 C++，网页里依然全是 Javascript。”</p>
</blockquote>
<p><strong>Rust 已经完成了从 0 到 1 的“极客突围”，却正在撞向从 1 到 N 的“工业化之墙”。</strong></p>
<h2>标准库的困局：当“技术洁癖”变成“协作负担”</h2>
<p>除了学习曲线，Rust 进军主流的第二个障碍，也许就是它那小而美的标准库。</p>
<p>这篇名为<strong>《Unpopular opinion: Rust should have a larger standard library》（非主流观点：Rust 应该有一个更大的标准库）</strong>的帖子，戳中了无数一线开发者的泪点：</p>
<p>在我之前写过的一篇文章《<a href="https://tonybai.com/2026/04/09/stop-being-small-and-beautiful-rust-petition-to-learn-from-go/">别搞“小而美”了！Rust 开发者请愿：求求标准库学学 Go 吧</a>》中也曾提过社区对 Rust 标准库的述求：</p>
<blockquote>
<p>“我不想写个程序就要拉几百个三方库！生成一个随机数，std 里没有；想要个异步运行时，std 里也没有。我不得不把信任托付给几百个散落在 GitHub 各地、由个人维护的小型包（Crate）。”</p>
</blockquote>
<p><strong>这种对“核心精简”的极致追求，正在引发严重的“供应链安全焦虑”。</strong></p>
<p>在 Go 的世界里，你可以用标准库完成 90% 的后端开发，这意味着你的核心链路是由 Google 顶尖团队直接背书的。但在 Rust 的世界里，开发者面临着“碎片化依赖”的内耗。</p>
<p>这种“标准库贫血”导致了一个反直觉的现象：Rust 是一门为了“安全”而生的语言，但它极度依赖社区包的机制，却在客观上增加了<strong>供应链被“投毒”</strong>的风险。</p>
<p>正如评论区所感慨的：“标准库是模块最终的坟场。”Rust 团队为了避免标准库变得臃肿，却无意中将“复杂性”和“审计成本”全部转嫁给了一线开发者。这种“技术洁癖”在处理顶级项目时是美德，但在处理追求效率的通用业务时，却成了巨大的阻碍。</p>
<h2>Go vs Rust：工业生产力的两种极致审美</h2>
<p>为什么 Go 能在 RedMonk 榜单上稳坐第 12，而 Rust 只能在第 20 徘徊？</p>
<p>这是两种完全不同的<strong>工程学审美</strong>，也决定了它们在大规模协作中的不同命运：</p>
<ul>
<li><strong>Go 的审美是“工厂流水线”</strong>：它不鼓励个人英雄主义，它用 gofmt 强制所有人的代码长得一模一样。它追求的是<strong>“平均生产力的最大化”</strong>。即便是一个普通水准的程序员，在 Go 的框架下也很难写出摧毁系统的灾难性代码。这种“无聊”和“简单”，正是大厂进行大规模兵团作战时的首选。</li>
<li><strong>Rust 的审美是“顶级艺术工作室”</strong>：它追求极致的精准、极致的控制。每一个 borrow，每一个 lifetime 都是在进行微雕。它追求的是<strong>“个体生产力的上限”</strong>。</li>
</ul>
<p>但在现代软件工业中，<strong>“下限的稳定性”往往比“上限的惊艳度”更具普适价值。</strong> 绝大多数公司需要的不是一个能手搓编译器的天才，而是一群能够按照既定流程、稳健产出、且易于维护代码的合格工程师。</p>
<h2>AI 时代的变数：谁才是对机器最友好的母语？</h2>
<p>RedMonk 的报告里还提出了一个极具前瞻性的观察：<strong>理论上，AI 编码辅助工具应该能抹平 Rust 的学习曲线，但现实并非如此。</strong></p>
<p>为什么？</p>
<p>大模型（LLM）的本质是模式识别和概率预测。</p>
<p>对于语法单一、推崇“唯一路径”的 Go 语言来说，AI 生成的代码准确率极高，且人类审查的认知负荷极低。</p>
<p>而对于规则极其复杂、生命周期标记繁琐的 Rust 来说，AI 生成的代码极易出现“微妙的语法错误”或“不地道的生命周期设计”。人类开发者在审查 AI 生成的 Rust 代码时，往往比自己重写一遍还要痛苦。</p>
<p>在“机器写代码”即将接管开发流程的未来，简单、标准、甚至有些“死板”的语言，反而拥有更宽、更深的护城河。《<a href="https://tonybai.com/2026/04/23/hashicorp-founder-admits-go-is-alive-thanks-to-ai/">HashiCorp 创始人亲口“认错”：AI 让我重新爱上了 Go (文末福利)</a>》一文中Hashicorp创始人Mitchell Hashimoto 因 AI 重新爱上Go，以及Pandas 之父近期更喜欢让 AI 用Go写代码也印证了这一点。</p>
<h2>小结：架构师的清醒与权衡</h2>
<p>作为一个架构师，我们不必因为 Rust 在榜单上的“冷水”而否定它的伟大。</p>
<p>Rust 正在解决软件工程中最难的问题——在不牺牲性能的前提下，从根源上消灭内存漏洞。它的价值，已经在 Linux 内核和那些“不容有失”的领域得到了证明。</p>
<p>但我们也必须清醒地认识到：<strong>技术的流行度（Popularity）与技术的高级感（Elegance）并不总是正相关。</strong></p>
<p>如果你在构建下一代安全操作系统、数据库内核或高性能边缘网关，Rust 是你不二的利剑。</p>
<p>但如果你在构建一个需要快速迭代、支撑公司核心营收、且由几十甚至上百人协作的后端业务系统，请务必保持客观：那个排名第 12、虽然有些“平庸”但永远能准时交付、且对 AI 极度友好的 Go，或许才是那个更优的工程方案。</p>
<p>再次祭出那句话：你的技术护城河，从来不是由你用什么语言决定的，而是由你解决问题的深度，以及你在各种极端权衡（Trade-offs）中做出的选择决定的。</p>
<p>资料链接：</p>
<ul>
<li>https://blog.goose.love/posts/what-actually-uses-rust/</li>
<li>https://www.reddit.com/r/rust/comments/1sqyjxa/blog_ok_what_actually_uses_rust/</li>
<li>https://redmonk.com/sogrady/2026/04/14/language-rankings-1-26/</li>
</ul>
<hr />
<p><strong>今日互动探讨：</strong></p>
<p>看完这份“人人爱 Rust，但榜单很冷酷”的现实反差，你觉得 Rust 挺进主流最大的障碍是什么？你认为“大标准库”是未来编程语言的必然趋势吗？</p>
<p>欢迎在评论区分享你的看法！</p>
<hr />
<p>还在为写 Agent 框架频频死循环、上下文爆炸而束手无策？我的新专栏 <strong>《<a href="http://gk.link/a/12IzL">从0 开始构建 Agent Harness</a>》</strong> 将带你：</p>
<ul>
<li>抛弃臃肿框架，回归“驾驭工程 (Harness Engineering)”的第一性原理</li>
<li>用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等，复刻极简OpenClaw</li>
<li>构建坚不可摧的 Safety Middleware 与飞书人工审批防线</li>
<li>在底层实现 Token 成本审计、链路追踪与自动化跑分评估</li>
<li>从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”</li>
</ul>
<p>扫描下方二维码，开启从 0 开始构建Agent Harness 的实战之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/build-agent-harness-from-scratch-qr.png" alt="" /></p>
<hr />
<p><strong>原「Gopher部落」已重装升级为「Go &amp; AI 精进营」知识星球，快来加入星球，开启你的技术跃迁之旅吧！</strong></p>
<p>我们致力于打造一个高品质的 <strong>Go 语言深度学习</strong> 与 <strong>AI 应用探索</strong> 平台。在这里，你将获得：</p>
<ul>
<li><strong>体系化 Go 核心进阶内容:</strong> 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏，夯实你的 Go 内功。</li>
<li><strong>前沿 Go+AI 实战赋能:</strong> 紧跟时代步伐，学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等，掌握 AI 时代新技能。 </li>
<li><strong>星主 Tony Bai 亲自答疑:</strong> 遇到难题？星主第一时间为你深度解析，扫清学习障碍。</li>
<li><strong>高活跃 Gopher 交流圈:</strong> 与众多优秀 Gopher 分享心得、讨论技术，碰撞思想火花。</li>
<li><strong>独家资源与内容首发:</strong> 技术文章、课程更新、精选资源，第一时间触达。</li>
</ul>
<p>衷心希望「Go &amp; AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚，享受技术精进的快乐！欢迎你的加入！</p>
<p><img src="http://image.tonybai.com/img/tonybai/gopher-and-ai-tribe-zsxq-small-card.jpg" alt="img{512x368}" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/04/25/rust-popularity-vs-redmonk-ranking-reality-check/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>金融级基础设施重构：放弃 Rust 拥抱 Go，务实主义的最终胜利？</title>
		<link>https://tonybai.com/2026/02/23/financial-infrastructure-rust-to-go-pragmatism-victory/</link>
		<comments>https://tonybai.com/2026/02/23/financial-infrastructure-rust-to-go-pragmatism-victory/#comments</comments>
		<pubDate>Mon, 23 Feb 2026 01:09:42 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[BackendDevelopment]]></category>
		<category><![CDATA[BorrowChecker]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[CognitiveLoad]]></category>
		<category><![CDATA[ConcurrencyModel]]></category>
		<category><![CDATA[Correctness]]></category>
		<category><![CDATA[DevelopmentEfficiency]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[DistributedSystems]]></category>
		<category><![CDATA[FinancialInfrastructure]]></category>
		<category><![CDATA[GarbageCollection]]></category>
		<category><![CDATA[GC]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[GoLanguage]]></category>
		<category><![CDATA[Go语言]]></category>
		<category><![CDATA[HFT]]></category>
		<category><![CDATA[InterfaceDesign]]></category>
		<category><![CDATA[latency]]></category>
		<category><![CDATA[machinelearning]]></category>
		<category><![CDATA[MemorySafety]]></category>
		<category><![CDATA[ML]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Pragmatism]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[ROI]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[SoftwareEngineering]]></category>
		<category><![CDATA[TeamBuilding]]></category>
		<category><![CDATA[TechSelection]]></category>
		<category><![CDATA[借用检查器]]></category>
		<category><![CDATA[内存安全]]></category>
		<category><![CDATA[分布式系统]]></category>
		<category><![CDATA[务实主义]]></category>
		<category><![CDATA[后端开发]]></category>
		<category><![CDATA[团队建设]]></category>
		<category><![CDATA[垃圾回收]]></category>
		<category><![CDATA[并发模型]]></category>
		<category><![CDATA[延迟]]></category>
		<category><![CDATA[开发效率]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[技术选型]]></category>
		<category><![CDATA[投入产出比]]></category>
		<category><![CDATA[接口设计]]></category>
		<category><![CDATA[机器学习]]></category>
		<category><![CDATA[正确性]]></category>
		<category><![CDATA[认知负荷]]></category>
		<category><![CDATA[软件工程]]></category>
		<category><![CDATA[金融级基础设施]]></category>
		<category><![CDATA[高频交易]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=5934</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/02/23/financial-infrastructure-rust-to-go-pragmatism-victory 大家好，我是Tony Bai。 在系统级编程语言的版图上，Go 与 Rust 的对比与争论从未停歇。一个是崇尚大道至简、开发效率极高的“云原生时代王者”；另一个则是以内存安全、零成本抽象和极致性能著称的“极客新宠”。当这两种哲学碰撞在对安全性、稳定性和低延迟要求极高的金融/交易基础设施领域时，开发者该如何抉择？ 近日，在 Reddit 的 r/golang 社区中，一场由 Python 开发者发起的关于“金融基础设施长期演进：Go 还是 Rust？”的技术讨论引发了广泛关注。这位开发者试图为机器学习（ML）流水线、分布式后端和内部 DevOps 工具选择一门强类型语言，并一度陷入了“是否应该同时学习两者”的焦虑中。 这场社区讨论不仅揭示了两种语言在现代架构中的真实定位，更展现了 Go 社区一贯的“务实主义”工程哲学。本文将深度提炼这场讨论的核心观点，为正处于技术选型十字路口的架构师和开发者提供极具价值的参考。 核心探讨：金融系统中的“快”与“对” 在金融科技（FinTech）和交易系统中，有两个指标至关重要：性能（Performance/Latency）与 正确性（Correctness）。这恰好对应了系统级语言常常被审视的两个维度。 Rust 的诱惑：绝对的控制与“编译即正确” 许多开发者最初被 Rust 吸引，正是因为其在金融领域展现出的“绝对严谨”。 代数数据类型与状态机：社区用户指出，Rust 的表达能力极强。在处理复杂的金融业务逻辑（如订单状态流转、复杂的税务和结算规则）时，Rust 的枚举（Enum）和模式匹配可以迫使开发者在编译期处理所有可能的边缘情况，实现所谓的“使无效状态不可表达”（Make invalid states unrepresentable）。 无数据竞争（Data Race Free）：借用检查器（Borrow Checker）和所有权模型在根本上杜绝了多线程环境下的数据竞争。对于处理资金流水的并发程序而言，这种内存安全性能够极大地降低睡眠被报警惊醒的概率。 无 GC 延迟：针对极度敏感的场景（如做市商系统），Rust 摆脱了垃圾回收器（Garbage Collector）的不可预测性，能够提供稳定、可预测的尾部延迟（Tail Latency）。 然而，正如资深工程师在讨论中指出的：“Rust 的高壁垒不仅体现在初始学习成本上，更体现在它持续要求你的大脑处于高速运转状态。” 在编写普通业务代码时，开发者需要不断与编译器“搏斗”，这在无形中拖慢了业务交付（Shipping）的速度。 Go 的底气：“80% 的性能，20% 的精力” 面对 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/financial-infrastructure-rust-to-go-pragmatism-victory-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/02/23/financial-infrastructure-rust-to-go-pragmatism-victory">本文永久链接</a> &#8211; https://tonybai.com/2026/02/23/financial-infrastructure-rust-to-go-pragmatism-victory</p>
<p>大家好，我是Tony Bai。</p>
<p>在系统级编程语言的版图上，Go 与 Rust 的对比与争论从未停歇。一个是崇尚大道至简、开发效率极高的“云原生时代王者”；另一个则是以内存安全、零成本抽象和极致性能著称的“极客新宠”。当这两种哲学碰撞在对安全性、稳定性和低延迟要求极高的金融/交易基础设施领域时，开发者该如何抉择？</p>
<p>近日，在 Reddit 的 r/golang 社区中，一场由 Python 开发者发起的关于“<a href="https://www.reddit.com/r/golang/comments/1ra0dza/go_vs_rust_for_longterm_systemsfinance/">金融基础设施长期演进：Go 还是 Rust？</a>”的技术讨论引发了广泛关注。这位开发者试图为机器学习（ML）流水线、分布式后端和内部 DevOps 工具选择一门强类型语言，并一度陷入了“是否应该同时学习两者”的焦虑中。</p>
<p>这场社区讨论不仅揭示了两种语言在现代架构中的真实定位，更展现了 Go 社区一贯的“务实主义”工程哲学。本文将深度提炼这场讨论的核心观点，为正处于技术选型十字路口的架构师和开发者提供极具价值的参考。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/system-programming-in-go-pr.png" alt="" /></p>
<h2>核心探讨：金融系统中的“快”与“对”</h2>
<p>在金融科技（FinTech）和交易系统中，有两个指标至关重要：性能（Performance/Latency）与 正确性（Correctness）。这恰好对应了系统级语言常常被审视的两个维度。</p>
<h3>Rust 的诱惑：绝对的控制与“编译即正确”</h3>
<p>许多开发者最初被 Rust 吸引，正是因为其在金融领域展现出的“绝对严谨”。</p>
<ul>
<li>代数数据类型与状态机：社区用户指出，Rust 的表达能力极强。在处理复杂的金融业务逻辑（如订单状态流转、复杂的税务和结算规则）时，Rust 的枚举（Enum）和模式匹配可以迫使开发者在编译期处理所有可能的边缘情况，实现所谓的“使无效状态不可表达”（Make invalid states unrepresentable）。</li>
<li>无数据竞争（Data Race Free）：借用检查器（Borrow Checker）和所有权模型在根本上杜绝了多线程环境下的数据竞争。对于处理资金流水的并发程序而言，这种内存安全性能够极大地降低睡眠被报警惊醒的概率。</li>
<li>无 GC 延迟：针对极度敏感的场景（如做市商系统），Rust 摆脱了垃圾回收器（Garbage Collector）的不可预测性，能够提供稳定、可预测的尾部延迟（Tail Latency）。</li>
</ul>
<p>然而，正如资深工程师在讨论中指出的：“Rust 的高壁垒不仅体现在初始学习成本上，更体现在它持续要求你的大脑处于高速运转状态。” 在编写普通业务代码时，开发者需要不断与编译器“搏斗”，这在无形中拖慢了业务交付（Shipping）的速度。</p>
<h3>Go 的底气：“80% 的性能，20% 的精力”</h3>
<p>面对 Rust 强大的理论优势，Go 社区给出的回应并不是在极限性能上去硬碰硬，而是打出了一张工程学上的王牌：投入产出比（ROI）。</p>
<ul>
<li>极速的开发与迭代：“如果你的目标是尽快发布产品（Ship fast），同时保持系统的可靠性，Go 是完美的折中。” Go 语言的语法极简，没有复杂的生命周期标注，这使得开发者可以把 100% 的精力放在业务逻辑和系统架构上，而不是讨好编译器。</li>
<li>完美的 I/O 并发模型：金融系统的很大一部分工作并非重度 CPU 计算，而是网络 I/O（如对接外部交易所 API、读取数据库、微服务间通信）。Go 内置的 goroutine 提供了极其廉价的上下文切换机制。一位用户精辟地总结：“在处理高度并发或重度 I/O 阻塞的操作时，Go 是无敌的。而在 Rust 中构建高并发的异步（Async）应用，需要极高的经验值，但在 Go 中这就像呼吸一样自然。”</li>
<li>足够好的性能与 GC：虽然 Go 有垃圾回收机制，但经过十多年的演进，Go 的 GC 停顿时间已经达到了亚毫秒级。对于 99% 的金融应用（如支付网关、账单系统、风控后端）来说，Go 的性能已经“快到了性能盈余”的地步。社区用户坦言：“除非你是在证券交易所做内部的高频交易（HFT），否则 Go 的速度绝对绰绰有余。”</li>
</ul>
<h2>领域决定边界：基础设施与业务逻辑的解耦</h2>
<p>讨论中一个非常核心的洞见是：不要试图用一种语言解决所有问题，而是要看清具体领域的边界。楼主的背景是 Python，主要涉及 ML 流水线。这引出了现代架构中非常经典的一种组合模式。</p>
<h3>Python + Go：现代数据驱动架构的“王炸”组合</h3>
<ul>
<li>Python 主宰数据与模型：在机器学习、量化分析和数据科学领域，Python 的生态（Pandas, NumPy, PyTorch）具有不可撼动的统治地位。强行用 Go 或 Rust 去重写模型训练或复杂的矩阵运算，被社区公认为“过早优化”和“重复造轮子”。</li>
<li>Go 主宰服务与编排：当模型训练完成需要部署上线，或者需要构建处理海量请求的 API 网关、数据搬运管道、以及后端微服务时，Python 的 GIL（全局解释器锁）和性能瓶颈就会显现。此时，引入 Go 作为基础设施层（Infrastructure Layer）是最完美的互补。</li>
</ul>
<p>这种架构下，系统被清晰地划分为：Go 负责将数据又快又稳地搬运和路由，Python（在底层 C/C++ 的加持下）负责纯粹的数学和模型计算。这种解耦使得整个系统既享受了 Python 的生态红利，又获得了 Go 在分布式系统上的强悍工程能力。</p>
<h3>真正的 HFT（高频交易）属于谁？</h3>
<p>不可忽视的是，当讨论深入到金融领域的最底端——高频交易（HFT）时，社区展现出了极度客观的技术视野。</p>
<p>多位业内人士指出，在纳秒必争的超低延迟交易领域，C++ 依然是绝对的霸主。尽管 Rust 在试图切入这一市场，但 C++ 在传统金融领域积累的庞大库、成熟的生态以及直接操作硬件的能力，短期内难以被撼动。因此，如果业务的核心真的是 HFT，那么 Go 和 Rust 可能都不是最优解。这就进一步确认了 Go 的主战场：<strong>高吞吐的分布式后端与云原生基础设施。</strong></p>
<h2>隐性成本：认知负荷、团队建设与代码维护</h2>
<p>在架构决策中，语言的特性往往只占 50%，另外 50% 则是<strong>关于人的管理</strong>。这也是本次社区讨论中，Go 获得压倒性支持的关键原因。</p>
<h3>代码的生命周期与可修改性</h3>
<p>“在商业应用中，我更看重随着时间的推移，修改代码有多难。业务需求在不断变化，代码也必须随之改变。”</p>
<ul>
<li>Go 的修改成本极低：Go 的代码结构扁平，没有复杂的隐式抽象。这使得重构和修改极其快速。Go 的接口（Interface）设计是隐式的（Duck Typing），在拆分微服务或调整模块时，不需要像严格继承体系那样大动干戈。</li>
<li>Rust 的“牵一发而动全身”：Rust 高度严格的类型系统是一把双刃剑。虽然它保证了修改后的代码几乎不会出错，但在快速迭代期，添加一个新功能往往意味着要重构一大部分的生命周期标注和类型关系，这对于需要快速响应市场变化的初创项目来说是致命的。</li>
</ul>
<h3>团队招聘与代码交接</h3>
<p>“如果你用 Rust 构建了一个工具，当系统在半夜发生故障时，团队里的其他人能轻易地看懂代码并修复它吗？”</p>
<p>Go 的创造者之一 Rob Pike 曾明确表示，Go 的设计初衷就是为了解决 Google 内部大型团队的协作问题。Go 的语法少、规范统一（gofmt），被称为“没有魔法的语言”。一个有其他语言基础的程序员，通常只需一两周就能熟练上手 Go 并提交生产代码。</p>
<p>相比之下，熟练的 Rust 开发者在市场上不仅稀缺，而且薪资高昂。对于一家非底层技术驱动的金融公司而言，使用 Go 可以极大地降低招聘门槛和团队代码交接的风险。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/financial-infrastructure-rust-to-go-pragmatism-victory-2.png" alt="" /></p>
<h2>小结：务实主义的胜利</h2>
<p>回到这位发帖者的终极问题：“我应该同时深入学习 Go 和 Rust 吗？”</p>
<p>社区给出的答案异常一致：<strong>绝对不要。</strong> 尤其是在项目初期。同时学习两门底层逻辑截然不同的语言，不仅会带来巨大的认知撕裂，还会严重拖慢项目进度（Shipping speed）。</p>
<p>最终，这位发帖者更新了他的决定：<strong>选择 Go。</strong></p>
<blockquote>
<p>“我不想在开始阶段就陷入困境，既然我是独立开发，我开始觉得 Go 才是正道。对于沉重的数学计算，我会继续让 Python 负责。我意识到 Go 真的非常好用，只要我懂得正确使用它，它能在所有的用例中大显身手。此外，Go 社区是我见过最友好的社区之一，你们太棒了！”</p>
</blockquote>
<p>在 AI、区块链、量化金融等技术泡沫层出不穷的今天，技术选型很容易陷入“追逐时髦”（Hype Driven Development）的陷阱。Rust 无疑是一门伟大的语言，代表了系统编程的未来探索。然而，Go 语言的伟大之处在于它始终保持着<strong>极其清醒的工程边界感</strong>。</p>
<p>它不追求类型理论的极致完美，也不苛求消除最后百分之一的性能损耗，它追求的是：在开发者心智负担、编译速度、运行性能、并发模型和部署便利性之间，找到一个无可挑剔的全局最优解。</p>
<p>对于现代分布式系统、网络服务和金融后端基础设施而言，Go 依然是那个能够让你“早点下班、安心睡觉”的最优选择。这也是务实主义在工程世界里，又一次漂亮的胜利。</p>
<p>资料链接：https://www.reddit.com/r/golang/comments/1ra0dza/go_vs_rust_for_longterm_systemsfinance/</p>
<hr />
<p><strong>你怎么选？</strong></p>
<p>软件工程永远是权衡的艺术。在你看来，对于非高频交易的后端业务，Rust 带来的安全性是否足以抵消它的开发成本？如果你现在接手一个新项目，你会优先选择“能让你早点下班”的 Go 吗？</p>
<p>欢迎在评论区分享你的选型“心法”！</p>
<hr />
<p>还在为“复制粘贴喂AI”而烦恼？我的新专栏 <strong>《<a href="http://gk.link/a/12EPd">AI原生开发工作流实战</a>》</strong> 将带你：</p>
<ul>
<li>告别低效，重塑开发范式</li>
<li>驾驭AI Agent(Claude Code)，实现工作流自动化</li>
<li>从“AI使用者”进化为规范驱动开发的“工作流指挥家”</li>
</ul>
<p>扫描下方二维码，开启你的AI原生开发之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/ai-native-dev-workflow-qr.png" alt="" /></p>
<hr />
<p>你的Go技能，是否也卡在了“熟练”到“精通”的瓶颈期？</p>
<ul>
<li>想写出更地道、更健壮的Go代码，却总在细节上踩坑？</li>
<li>渴望提升软件设计能力，驾驭复杂Go项目却缺乏章法？</li>
<li>想打造生产级的Go服务，却在工程化实践中屡屡受挫？</li>
</ul>
<p>继《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》后，我的《<a href="http://gk.link/a/12yGY">Go语言进阶课</a>》终于在极客时间与大家见面了！</p>
<p>我的全新极客时间专栏 《<a href="http://gk.link/a/12yGY">Tony Bai·Go语言进阶课</a>》就是为这样的你量身打造！30+讲硬核内容，带你夯实语法认知，提升设计思维，锻造工程实践能力，更有实战项目串讲。</p>
<p>目标只有一个：助你完成从“Go熟练工”到“Go专家”的蜕变！ 现在就加入，让你的Go技能再上一个新台阶！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/02/23/financial-infrastructure-rust-to-go-pragmatism-victory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Go 语言的“魔法”时刻：如何用 -toolexec 实现零侵入式自动插桩？</title>
		<link>https://tonybai.com/2026/01/19/unleashing-the-go-toolchain/</link>
		<comments>https://tonybai.com/2026/01/19/unleashing-the-go-toolchain/#comments</comments>
		<pubDate>Mon, 19 Jan 2026 00:07:38 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AbstractSyntaxTree]]></category>
		<category><![CDATA[AOP]]></category>
		<category><![CDATA[AOP配置]]></category>
		<category><![CDATA[AspectOrientedProgramming]]></category>
		<category><![CDATA[ast]]></category>
		<category><![CDATA[Autoinstrumentation]]></category>
		<category><![CDATA[Compile]]></category>
		<category><![CDATA[CompileTimeInjection]]></category>
		<category><![CDATA[Context]]></category>
		<category><![CDATA[datadog]]></category>
		<category><![CDATA[ddtracego]]></category>
		<category><![CDATA[DistributedTracing]]></category>
		<category><![CDATA[GLS]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[GopherConUK2025]]></category>
		<category><![CDATA[GoroutineLocalStorage]]></category>
		<category><![CDATA[KemalAkkoyun]]></category>
		<category><![CDATA[link]]></category>
		<category><![CDATA[observability]]></category>
		<category><![CDATA[opentelemetry]]></category>
		<category><![CDATA[Orchestrion]]></category>
		<category><![CDATA[runtime]]></category>
		<category><![CDATA[toolchain]]></category>
		<category><![CDATA[toolexec]]></category>
		<category><![CDATA[上下文]]></category>
		<category><![CDATA[临时目录]]></category>
		<category><![CDATA[分布式追踪]]></category>
		<category><![CDATA[可观测性]]></category>
		<category><![CDATA[基础设施]]></category>
		<category><![CDATA[容器化友好]]></category>
		<category><![CDATA[工具链]]></category>
		<category><![CDATA[微服务]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[手术式注入]]></category>
		<category><![CDATA[抽象语法树]]></category>
		<category><![CDATA[样板代码]]></category>
		<category><![CDATA[治理]]></category>
		<category><![CDATA[源码修改]]></category>
		<category><![CDATA[狸猫换太子]]></category>
		<category><![CDATA[监控体验]]></category>
		<category><![CDATA[维护性]]></category>
		<category><![CDATA[编译时注入]]></category>
		<category><![CDATA[编译过程拦截]]></category>
		<category><![CDATA[自动插桩]]></category>
		<category><![CDATA[运行时]]></category>
		<category><![CDATA[遗留代码]]></category>
		<category><![CDATA[隐式传递]]></category>
		<category><![CDATA[零侵入]]></category>
		<category><![CDATA[静态编译]]></category>
		<category><![CDATA[领域特定规则]]></category>
		<category><![CDATA[魔法时刻]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=5743</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/01/19/unleashing-the-go-toolchain 大家好，我是Tony Bai。 “Go 语言以简洁著称，但在可观测性（Observability）领域，这种简洁有时却是一种负担。手动埋点、繁琐的初始化代码、版本升级带来的破坏性变更……这些都让 Gopher 们痛苦不已。 可观测性的三大支柱 相比之下，Java 和 Python 开发者享受着“零代码修改”的自动插桩福利。Go 开发者能否拥有同样的体验？ 在 GopherCon UK 2025 上，来自 DataDog 的资深工程师 Kemal Akkoyun 给出了肯定的答案。他通过挖掘 Go 工具链中一个鲜为人知的特性，不仅实现了这一目标，还将其开源为一个名为 Orchestrion 的工具。今天，就让我们一起揭秘这背后的“黑魔法”。 痛点：Go 语言的“反自动化”体质 在 Go 中集成分布式追踪（如 OpenTelemetry），通常意味着你需要： 手动修改代码：在 main 函数中初始化 Tracer Provider。 到处传递 Context：在每个函数签名中添加 ctx context.Context。 OpenTelemetry Go SDK难于集成。 样板代码爆炸：在每个关键路径上通过 defer span.End() 开启和结束 Span。 这种手动方式不仅效率低下，而且容易出错。如果有遗漏，追踪链路就会断裂；如果库升级，你可能需要重写大量代码。 与 Java [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/01/19/unleashing-the-go-toolchain">本文永久链接</a> &#8211; https://tonybai.com/2026/01/19/unleashing-the-go-toolchain</p>
<p>大家好，我是Tony Bai。</p>
<p>“Go 语言以简洁著称，但在可观测性（Observability）领域，这种简洁有时却是一种负担。手动埋点、繁琐的初始化代码、版本升级带来的破坏性变更……这些都让 Gopher 们痛苦不已。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-2.png" alt="" /><br />
<center>可观测性的三大支柱</center></p>
<p>相比之下，Java 和 Python 开发者享受着“零代码修改”的自动插桩福利。Go 开发者能否拥有同样的体验？</p>
<p>在 GopherCon UK 2025 上，来自 DataDog 的资深工程师 Kemal Akkoyun <a href="https://www.youtube.com/watch?v=8Rw-fVEjihw">给出了肯定的答案</a>。他通过挖掘 Go 工具链中一个鲜为人知的特性，不仅实现了这一目标，还将其开源为一个名为 <a href="https://github.com/DataDog/orchestrion"><strong>Orchestrion</strong></a> 的工具。今天，就让我们一起揭秘这背后的“黑魔法”。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/distributed-system-guide-qr.png" alt="" /></p>
<h2>痛点：Go 语言的“反自动化”体质</h2>
<p>在 Go 中集成分布式追踪（如 OpenTelemetry），通常意味着你需要：</p>
<ul>
<li>手动修改代码：在 main 函数中初始化 Tracer Provider。</li>
<li>到处传递 Context：在每个函数签名中添加 ctx context.Context。</li>
</ul>
<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-3.png" alt="" /></p>
<ul>
<li>OpenTelemetry Go SDK难于集成。</li>
</ul>
<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-4.png" alt="" /></p>
<ul>
<li>样板代码爆炸：在每个关键路径上通过 defer span.End() 开启和结束 Span。</li>
</ul>
<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-5.png" alt="" /></p>
<p>这种手动方式不仅效率低下，而且容易出错。如果有遗漏，追踪链路就会断裂；如果库升级，你可能需要重写大量代码。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-6.png" alt="" /></p>
<p>与 Java Agent 的字节码注入或 Python 的动态装饰器不同，Go 是静态编译语言，运行时极其简单，没有虚拟机层面的“后门”可走。这似乎是一个死局。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-8.png" alt="" /></p>
<p>Gopher强烈希望 Go 也能像其他语言那样，轻松实现插桩从而注入追踪(trace)能力：</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-7.png" alt="" /></p>
<h2>破局：编译时“大挪移”</h2>
<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-9.png" alt="" /></p>
<p>Kemal 及其团队发现，Go 虽然没有运行时魔法，但在<strong>编译时</strong>却留了一扇窗：<strong>-toolexec 标志</strong>。</p>
<pre><code>$go help build|grep -A6 toolexec
    -toolexec 'cmd args'
        a program to use to invoke toolchain programs like vet and asm.
        For example, instead of running asm, the go command will run
        'cmd args /path/to/asm &lt;arguments for asm&gt;'.
        The TOOLEXEC_IMPORTPATH environment variable will be set,
        matching 'go list -f {{.ImportPath}}' for the package being built.
</code></pre>
<p>这是一个鲜为人知的 go build 参数。它允许你指定一个程序，拦截并包装构建过程中的每一个工具调用（如 compile、link、asm 等），让你可以在真正的compile、link 等之前对Go源码文件 (以compile等命令行工具的命令行参数形式传入) 做点什么。</p>
<p>为了让大家直观感受 -toolexec 的作用，我们先来看一个最简单的“拦截器”示例。</p>
<p>假设我们写了一个名为 mytool 的小程序，它的作用仅仅是打印出它接收到的命令，然后再原样执行该命令：</p>
<pre><code class="go">// mytool.go
package main

import (
    "fmt"
    "os"
    "os/exec"
)

func main() {
    // 注意：将日志打印到 Stderr，避免干扰 go build 读取工具的标准输出（如 Build ID）
    fmt.Fprintf(os.Stderr, "[Interceptor] Running: %v\n", os.Args[1:])

    // 原样执行被拦截的命令
    cmd := exec.Command(os.Args[1], os.Args[2:]...)
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    if err := cmd.Run(); err != nil {
        os.Exit(1)
    }
}
</code></pre>
<p>现在，当我们使用 -toolexec 参数来编译一个普通的 Go 程序时：</p>
<pre><code class="bash"># 先编译我们的拦截器
go build -o mytool mytool.go

# 使用拦截器来编译目标程序
go build -toolexec="./mytool" main.go  // 这里的main.go只是一个"hello, world"的Go程序
</code></pre>
<p>你会看到类似这样的输出：</p>
<pre><code class="text">[Interceptor] Running: /usr/local/go/pkg/tool/darwin_amd64/compile -o ...
[Interceptor] Running: /usr/local/go/pkg/tool/darwin_amd64/link -o ...
</code></pre>
<p>看到了吗？go build 并没有直接调用编译器，而是先调用了我们的 mytool，并将真正的编译器路径和参数作为参数传给了它。之后再调用回原命令，在上面示例执行完go build -toolexec=”./mytool” main.go后，我们同样看到了编译成功后的可执行二进制文件main。</p>
<p>这就给了我们一个惊人的机会：<strong>既然我们拦截了编译指令，我们当然可以修改它，甚至修改它即将编译的源文件！</strong></p>
<p>但是，仅仅打印几个日志、拦截一下命令，离真正的“自动插桩”还有很远的距离。要在真实复杂的 Go 项目中，安全、准确地修改成千上万行代码，同时还要处理依赖管理、缓存失效、语法兼容等棘手问题，绝非易事。</p>
<p>这正是 <strong>Orchestrion</strong> 登场的时刻。它不仅将 -toolexec 的潜力发挥到了极致，更将这套复杂的流程封装成了一个开箱即用的产品。</p>
<h2>深度解构：Orchestrion 的“编译时手术”</h2>
<p><strong>Orchestrion 是什么？</strong></p>
<p>简单来说，它是 DataDog 开源的一个<strong>编译时自动插桩工具</strong>。它的名字来源于一种模仿管弦乐队声音的机械乐器（Orchestrion），寓意它能像指挥家一样，协调并增强你的代码，而无需你亲自演奏每一个音符。</p>
<p>有了 -toolexec 这把钥匙，Orchestrion 就开启了一场编译时的“精密手术”。这不仅仅是简单的拦截，而是一场与 Go 编译器配合默契的“双人舞”。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-12.png" alt="" /></p>
<p>安装下面图片中步骤，你就可以自动完成对你的go程序的插桩：</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-13.png" alt="" /></p>
<p>Kemal 在演讲中展示了一个复杂的时序图，Orchestrion 的工作流远比我们想象的要精细：</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-14.png" alt="" /></p>
<ol>
<li>
<p>精准拦截：<br />
当 go build 启动时，Orchestrion 守在门口。它并不关心链接器（linker）或汇编器（asm），它的目光紧紧锁定在 compile 命令上。每当 Go 编译器准备编译一个包（Package），Orchestrion 就会叫停。</p>
</li>
<li>
<p>AST 级解析与“无损”操作：<br />
它读取即将被编译的 .go 源文件，将其解析为 AST（抽象语法树）。</p>
</li>
<li>
<p>手术式注入 (Injection)：<br />
根据预定义的规则（YAML 配置），Orchestrion 开始在 AST 上动刀：</p>
<ul>
<li>添加 Import：自动引入 dd-trace-go 等依赖包。</li>
<li>函数入口插桩：在函数体的第一行插入 span, ctx := tracer.Start(&#8230;)。</li>
<li>函数出口兜底：利用 defer span.End() 确保追踪闭环。<br />
甚至，它还能识别 database/sql 的调用，自动将其替换为带有追踪功能的 Wrapper。</li>
</ul>
</li>
<li>
<p>狸猫换太子：<br />
手术完成后，Orchestrion 将修改后的 AST 重新生成为 .go 文件，保存在一个临时目录中。<br />
最后，它修改传递给编译器的参数，将原始源文件的路径替换为这些临时文件的路径。</p>
</li>
<li>
<p>透明编译：<br />
真正的 Go 编译器（compile）被唤醒，它毫不知情地编译了这些被“加料”的代码。</p>
</li>
</ol>
<p>最终生成的二进制文件，包含了完整的、生产级的可观测性代码，而你的源代码仓库里，依然是那份清清爽爽、没有任何第三方依赖的业务逻辑。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-10.png" alt="" /><br />
<img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-16.png" alt="" /></p>
<h2>Orchestrion：将“魔法”产品化</h2>
<p>Orchestrion 不仅仅是一个概念验证，它是 DataDog 已经在生产环境中使用的成熟工具（现已捐赠给 OpenTelemetry 社区）。它解决了一系列工程难题：</p>
<h3>1. 像 AOP 一样思考</h3>
<p>Orchestrion 引入了类似 <strong>AOP（面向切面编程）</strong> 的概念。通过 YAML 配置文件，你可以定义“切入点”（Join Points）和“建议”（Advice）。</p>
<p>例如，你可以定义一条规则：<br />
*   <strong>切入点</strong>：所有调用 database/sql 包 Query 方法的地方。<br />
*   <strong>建议</strong>：在调用前后包裹一段计时和记录代码。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-11.png" alt="" /><br />
<img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-15.png" alt="" /></p>
<h3>2. 解决 Context 丢失的终极“黑魔法”</h3>
<p>Go 的许多老旧库或设计不规范的代码并没有在参数中传递 context.Context。为了在这些地方也能传递追踪 ID，Orchestrion 做了一件极其硬核的事情：<strong>它修改了 Go 的运行时（Runtime）！</strong></p>
<p>通过修改 runtime.g 结构体，它引入了类似 <strong>GLS (Goroutine Local Storage)</strong> 的机制。这允许在同一个 Goroutine 的不同函数调用栈之间隐式传递上下文，彻底解决了 Context 断链的问题。虽然这听起来很危险，但在受控的编译时注入环境下，它变得可行且强大。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/unleashing-the-go-toolchain-17.png" alt="" /></p>
<h3>3. 零依赖与容器化友好</h3>
<p>Orchestrion 支持通过环境变量注入。这意味着平台工程师可以构建一个包含 Orchestrion 的基础镜像，只需要在 CI/CD 流水线中设置几个环境变量，就可以让所有基于该镜像构建的 Go 应用自动获得可观测性能力，而无需应用开发者修改一行代码。</p>
<h2>未来：社区驱动的标准</h2>
<p>DataDog 已将 Orchestrion 捐赠给 <a href="https://github.com/open-telemetry/opentelemetry-go-compile-instrumentation"><strong>OpenTelemetry</strong></a>，并与阿里巴巴（其有类似的 Go 自动插桩工具）合作，共同在 OpenTelemetry Go SIG 下推进这一技术的标准化。</p>
<p>这意味着，未来 Go 开发者可能只需要执行类似 otel-go-instrument my-app 的命令，就能获得与 Java/Python 同等便捷的监控体验。</p>
<h2>小结：工具链的无限可能</h2>
<p>Kemal 的演讲不仅展示了一个工具，更展示了一种思维方式：<strong>当语言本身的特性限制了你时，不妨向下看一层，去挖掘工具链本身的潜力。</strong></p>
<p>虽然“编译时注入”听起来像是一种对 Go 简洁哲学的“背叛”，但在解决大规模微服务治理、遗留代码维护等现实难题时，它无疑是一剂强有力的解药。</p>
<p>对于那些渴望从重复劳动中解脱出来的 Gopher 来说，这或许就是你们一直在等待的“魔法”。</p>
<h2>参考资料</h2>
<ul>
<li>https://www.youtube.com/watch?v=8Rw-fVEjihw</li>
<li>https://www.datadoghq.com/blog/go-instrumentation-orchestrion/</li>
<li>https://x.com/felixge/status/1865034549832368242</li>
<li>https://github.com/DataDog/orchestrion</li>
<li>https://datadoghq.dev/orchestrion/docs/architecture</li>
<li>https://github.com/open-telemetry/opentelemetry-go-compile-instrumentation</li>
</ul>
<hr />
<p><strong>你的插桩之痛</strong></p>
<p>自动插桩无疑是未来的方向。<strong>在你的项目中，目前是如何处理链路追踪埋点的？是忍受手动埋点的繁琐，还是已经尝试过类似的自动化工具？你对<br />
这种修改 AST 甚至 Runtime 的“黑魔法”持什么态度？</strong></p>
<p><strong>欢迎在评论区分享你的看法或踩坑经历！</strong> 让我们一起探索 Go 可观测性的最佳实践。</p>
<p><strong>如果这篇文章为你打开了 Go 编译工具链的新大门，别忘了点个【赞】和【在看】，并转发给你的架构师朋友，让他也来学两招！</strong></p>
<hr />
<p>还在为“复制粘贴喂AI”而烦恼？我的新专栏 <strong>《<a href="http://gk.link/a/12EPd">AI原生开发工作流实战</a>》</strong> 将带你：</p>
<ul>
<li>告别低效，重塑开发范式</li>
<li>驾驭AI Agent(Claude Code)，实现工作流自动化</li>
<li>从“AI使用者”进化为规范驱动开发的“工作流指挥家”</li>
</ul>
<p>扫描下方二维码，开启你的AI原生开发之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/ai-native-dev-workflow-qr.png" alt="" /></p>
<hr />
<p>你的Go技能，是否也卡在了“熟练”到“精通”的瓶颈期？</p>
<ul>
<li>想写出更地道、更健壮的Go代码，却总在细节上踩坑？</li>
<li>渴望提升软件设计能力，驾驭复杂Go项目却缺乏章法？</li>
<li>想打造生产级的Go服务，却在工程化实践中屡屡受挫？</li>
</ul>
<p>继《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》后，我的《<a href="http://gk.link/a/12yGY">Go语言进阶课</a>》终于在极客时间与大家见面了！</p>
<p>我的全新极客时间专栏 《<a href="http://gk.link/a/12yGY">Tony Bai·Go语言进阶课</a>》就是为这样的你量身打造！30+讲硬核内容，带你夯实语法认知，提升设计思维，锻造工程实践能力，更有实战项目串讲。</p>
<p>目标只有一个：助你完成从“Go熟练工”到“Go专家”的蜕变！ 现在就加入，让你的Go技能再上一个新台阶！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/01/19/unleashing-the-go-toolchain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Go, Rust 还是 Zig？一场关于“简单”与“控制”的灵魂拷问</title>
		<link>https://tonybai.com/2026/01/17/go-rust-zig-simplicity-vs-control/</link>
		<comments>https://tonybai.com/2026/01/17/go-rust-zig-simplicity-vs-control/#comments</comments>
		<pubDate>Fri, 16 Jan 2026 23:38:52 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[BorrowChecker]]></category>
		<category><![CDATA[BuildToolchain]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Cgo]]></category>
		<category><![CDATA[comptime]]></category>
		<category><![CDATA[Control]]></category>
		<category><![CDATA[enum]]></category>
		<category><![CDATA[Explicit]]></category>
		<category><![CDATA[GarbageCollection]]></category>
		<category><![CDATA[GC]]></category>
		<category><![CDATA[generics]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[Gopher]]></category>
		<category><![CDATA[Implicit]]></category>
		<category><![CDATA[lifetimes]]></category>
		<category><![CDATA[ManualMemoryManagement]]></category>
		<category><![CDATA[MemoryManagement]]></category>
		<category><![CDATA[MemorySafety]]></category>
		<category><![CDATA[option]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Result]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[simplicity]]></category>
		<category><![CDATA[SystemProgramming]]></category>
		<category><![CDATA[TechnicalSelection]]></category>
		<category><![CDATA[ZerocostAbstraction]]></category>
		<category><![CDATA[Zig]]></category>
		<category><![CDATA[借用检查器]]></category>
		<category><![CDATA[内存安全]]></category>
		<category><![CDATA[内存布局]]></category>
		<category><![CDATA[内存管理]]></category>
		<category><![CDATA[异步模型]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[手动内存管理]]></category>
		<category><![CDATA[技术选型]]></category>
		<category><![CDATA[控制]]></category>
		<category><![CDATA[显式]]></category>
		<category><![CDATA[构建工具链]]></category>
		<category><![CDATA[泛型]]></category>
		<category><![CDATA[生产力]]></category>
		<category><![CDATA[生命周期]]></category>
		<category><![CDATA[简单]]></category>
		<category><![CDATA[系统编程]]></category>
		<category><![CDATA[编译期执行]]></category>
		<category><![CDATA[表达力]]></category>
		<category><![CDATA[认知负荷]]></category>
		<category><![CDATA[隐式]]></category>
		<category><![CDATA[零成本抽象]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=5733</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/01/17/go-rust-zig-simplicity-vs-control 大家好，我是Tony Bai。 在系统编程的世界里，开发者似乎总是面临着一个残酷的二选一：是选择极致的简单与生产力，还是选择绝对的控制与零成本抽象？ 这种纠结在 Go 与 Rust 的长期对峙中体现得淋漓尽致。然而，近日一位拥有十年 Go 经验的资深开发者在Zig社区的分享，似乎为这场二元对立的战争撕开了一道口子。他从 Go 迁移到 Zig 的经历，既是一个技术选型的故事，也是一场关于“我们到底需要什么样的编程语言”的深度辩论。 Go 的困境：当“简单”成为一种束缚 对于许多 Gopher 来说，Go 的简单是其最大的武器，但也是最深的痛点。 这位楼主坦言，尽管他深爱 Go 的简单，但在编写某些复杂系统时，这种“过度简化”让他感觉语言本身存在缺陷。 表达力的缺失：Go 缺乏像 Rust 那样的 Enum (带数据的枚举)、Option 和 Result 类型。在处理复杂状态和错误流时，Go 的代码往往显得啰嗦且缺乏约束力。 “差不多”的无奈：为了保持简单，Go 在很多地方做了折中（比如 GC，比如泛型的实现方式）。当你需要榨干硬件性能或追求极致的内存布局时，Go 显得力不从心。 Rust 的围城：控制的代价是复杂度 如果嫌 Go 太简单，Rust 似乎是理所当然的替代者。但对于很多习惯了 Go “写完即运行”体验的开发者来说，Rust 的门槛是一堵高墙。 楼主表示，他喜欢 Rust 的核心概念（Structs, Enums, Option），但 Rust [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/go-rust-zig-simplicity-vs-control-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/01/17/go-rust-zig-simplicity-vs-control">本文永久链接</a> &#8211; https://tonybai.com/2026/01/17/go-rust-zig-simplicity-vs-control</p>
<p>大家好，我是Tony Bai。</p>
<p>在系统编程的世界里，开发者似乎总是面临着一个残酷的二选一：是选择<strong>极致的简单与生产力</strong>，还是选择<strong>绝对的控制与零成本抽象</strong>？</p>
<p>这种纠结在 Go 与 Rust 的长期对峙中体现得淋漓尽致。然而，近日一位拥有十年 Go 经验的资深开发者<a href="https://www.reddit.com/r/Zig/comments/1q38e50/im_really_surprised_by_how_simple_it_is_to/">在Zig社区的分享</a>，似乎为这场二元对立的战争撕开了一道口子。他从 Go 迁移到 Zig 的经历，既是一个技术选型的故事，也是一场关于<strong>“我们到底需要什么样的编程语言”</strong>的深度辩论。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/distributed-system-guide-qr.png" alt="" /></p>
<h2>Go 的困境：当“简单”成为一种束缚</h2>
<p>对于许多 Gopher 来说，Go 的简单是其最大的武器，但也是最深的痛点。</p>
<p>这位楼主坦言，尽管他深爱 Go 的简单，但在编写某些复杂系统时，这种“过度简化”让他感觉语言本身存在缺陷。</p>
<ul>
<li><strong>表达力的缺失</strong>：Go 缺乏像 Rust 那样的 Enum (带数据的枚举)、Option 和 Result 类型。在处理复杂状态和错误流时，Go 的代码往往显得啰嗦且缺乏约束力。</li>
<li><strong>“差不多”的无奈</strong>：为了保持简单，Go 在很多地方做了折中（比如 GC，比如泛型的实现方式）。当你需要榨干硬件性能或追求极致的内存布局时，Go 显得力不从心。</li>
</ul>
<h2>Rust 的围城：控制的代价是复杂度</h2>
<p>如果嫌 Go 太简单，Rust 似乎是理所当然的替代者。但对于很多习惯了 Go “写完即运行”体验的开发者来说，Rust 的门槛是一堵高墙。</p>
<p>楼主表示，他喜欢 Rust 的核心概念（Structs, Enums, Option），但 Rust 为了内存安全而引入的<strong>借用检查器、生命周期</strong>以及<strong>复杂的异步模型</strong>，让他感觉“像是面对另一个 C++”。</p>
<p>这是一场灵魂拷问：<strong>为了获得控制权，我们真的需要背负如此沉重的认知包袱吗？</strong></p>
<h2>Zig 的破局：在“简单”与“控制”之间走钢丝</h2>
<p>Zig 的出现，似乎精准地击中了 Go 与 Rust 之间的那个真空地带。对于这位 Gopher 来说，Zig 让他感到了久违的“刚刚好”：</p>
<ol>
<li><strong>显式的哲学（像 Go）</strong>：Zig 没有隐式内存分配，没有隐藏的控制流，也没有预处理器。这种“所见即所得”的代码风格，与 Go 的可读性哲学高度共鸣。</li>
<li><strong>现代的类型系统（像 Rust）</strong>：Zig 提供了 comptime（编译期执行）和丰富的类型系统，弥补了 Go 在表达力上的短板，却又没有引入 Rust 那样复杂的生命周期概念。</li>
<li><strong>对 C 的降维打击</strong>：Zig 不仅是一门语言，更是一个强大的 C/C++ 构建工具链。它允许你无缝地与 C 交互，逐步迁移遗留代码，这是 Go (CGO) 和 Rust 都难以做到的顺滑体验。</li>
</ol>
<h2>社区的冷思考：没有免费的午餐</h2>
<p>当然，这场灵魂拷问没有标准答案。社区的讨论也极其理性地指出了选择 Zig 的代价：</p>
<ul>
<li><strong>生态的荒原</strong>：与 Go 庞大的“标准库+第三方库”相比，Zig 的生态仍处于拓荒期。你可能需要自己造很多轮子。</li>
<li><strong>内存管理的回归</strong>：Zig 没有 GC，也没有 Rust 的所有权模型。这意味着你回到了手动管理内存的时代（尽管有 defer 和 arena 等工具辅助）。对于习惯了 GC 的 Gopher 来说，这是一个必须跨越的心理门槛。</li>
<li><strong>稳定性的豪赌</strong>：Zig 尚未发布 1.0，语言特性仍在变动。选择 Zig，意味着你愿意陪它一起成长，也愿意承担变动的风险。</li>
</ul>
<h2>小结：你的灵魂属于哪里？</h2>
<p>这场讨论最终指向了开发者内心的自我定位：</p>
<ul>
<li>如果你追求<strong>高效交付、团队协作和工业级的稳定性</strong>，Go 依然是不可撼动的王者。</li>
<li>如果你追求<strong>数学般的严谨、绝对的安全和零成本抽象</strong>，且不介意陡峭的学习曲线，Rust 是你的圣杯。</li>
<li>而如果你渴望<strong>掌控底层、厌倦了复杂的抽象、却又想要现代化的开发体验</strong>，Zig 也许就是你一直在寻找的那个“刚刚好”。</li>
</ul>
<p><strong>简单还是控制？这不仅是语言的选择，更是你作为工程师，想要如何与机器对话的选择。</strong></p>
<p>资料链接：https://www.reddit.com/r/Zig/comments/1q38e50/im_really_surprised_by_how_simple_it_is_to/</p>
<hr />
<p><strong>你的“灵魂选择”</strong></p>
<p>在“简单”与“控制”的天平上，<strong>你的心偏向哪一边？如果让你现在开始一个新项目，你会毫不犹豫地选择 Go，还是想尝尝 Zig 的鲜，亦或是死磕 Rust？</strong></p>
<p><strong>欢迎在评论区投出你的一票，并分享你的理由！</strong> 让我们看看谁才是开发者心中的“白月光”。</p>
<p><strong>如果这篇文章引发了你的选型思考，别忘了点个【赞】和【在看】，并转发给那个还在纠结学什么语言的朋友！</strong></p>
<hr />
<p>还在为“复制粘贴喂AI”而烦恼？我的新专栏 <strong>《<a href="http://gk.link/a/12EPd">AI原生开发工作流实战</a>》</strong> 将带你：</p>
<ul>
<li>告别低效，重塑开发范式</li>
<li>驾驭AI Agent(Claude Code)，实现工作流自动化</li>
<li>从“AI使用者”进化为规范驱动开发的“工作流指挥家”</li>
</ul>
<p>扫描下方二维码，开启你的AI原生开发之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/ai-native-dev-workflow-qr.png" alt="" /></p>
<hr />
<p>你的Go技能，是否也卡在了“熟练”到“精通”的瓶颈期？</p>
<ul>
<li>想写出更地道、更健壮的Go代码，却总在细节上踩坑？</li>
<li>渴望提升软件设计能力，驾驭复杂Go项目却缺乏章法？</li>
<li>想打造生产级的Go服务，却在工程化实践中屡屡受挫？</li>
</ul>
<p>继《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》后，我的《<a href="http://gk.link/a/12yGY">Go语言进阶课</a>》终于在极客时间与大家见面了！</p>
<p>我的全新极客时间专栏 《<a href="http://gk.link/a/12yGY">Tony Bai·Go语言进阶课</a>》就是为这样的你量身打造！30+讲硬核内容，带你夯实语法认知，提升设计思维，锻造工程实践能力，更有实战项目串讲。</p>
<p>目标只有一个：助你完成从“Go熟练工”到“Go专家”的蜕变！ 现在就加入，让你的Go技能再上一个新台阶！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/01/17/go-rust-zig-simplicity-vs-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Go 的“浮点数陷阱”将被填平：浮点转整数即将在所有平台上行为一致</title>
		<link>https://tonybai.com/2026/01/11/proposal-float-to-int-conversions-should-saturate-on-overflow/</link>
		<comments>https://tonybai.com/2026/01/11/proposal-float-to-int-conversions-should-saturate-on-overflow/#comments</comments>
		<pubDate>Sat, 10 Jan 2026 23:31:45 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[amd64]]></category>
		<category><![CDATA[arm64]]></category>
		<category><![CDATA[Compiler]]></category>
		<category><![CDATA[consistency]]></category>
		<category><![CDATA[Conversion]]></category>
		<category><![CDATA[CrossPlatform]]></category>
		<category><![CDATA[DavidChase]]></category>
		<category><![CDATA[exception]]></category>
		<category><![CDATA[FloatingPoint]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[go1.26]]></category>
		<category><![CDATA[Go1.27]]></category>
		<category><![CDATA[Go1.28]]></category>
		<category><![CDATA[GOEXPERIMENT]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[HardwareDifference]]></category>
		<category><![CDATA[IanLanceTaylor]]></category>
		<category><![CDATA[ImplementationDefined]]></category>
		<category><![CDATA[InstructionSet]]></category>
		<category><![CDATA[Integer]]></category>
		<category><![CDATA[NaN]]></category>
		<category><![CDATA[Overflow]]></category>
		<category><![CDATA[PerfectPortability]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Portability]]></category>
		<category><![CDATA[Programmer]]></category>
		<category><![CDATA[RISCV]]></category>
		<category><![CDATA[SaturatingConversion]]></category>
		<category><![CDATA[一致性]]></category>
		<category><![CDATA[可移植性]]></category>
		<category><![CDATA[完美可移植性]]></category>
		<category><![CDATA[实现定义]]></category>
		<category><![CDATA[异常]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[指令集]]></category>
		<category><![CDATA[整数]]></category>
		<category><![CDATA[浮点数]]></category>
		<category><![CDATA[溢出]]></category>
		<category><![CDATA[硬件差异]]></category>
		<category><![CDATA[程序员]]></category>
		<category><![CDATA[编译器]]></category>
		<category><![CDATA[跨平台]]></category>
		<category><![CDATA[转换]]></category>
		<category><![CDATA[饱和转换]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=5703</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/01/11/proposal-float-to-int-conversions-should-saturate-on-overflow 大家好，我是Tony Bai。 你是否知道，同一行简单的代码 int64(myFloat)，在 Intel (amd64) 机器上可能返回一个巨大的负数，而在 ARM64 机器上却可能返回最大正整数？ 在 Go 语言中，浮点数到整数的转换溢出行为长期以来一直属于“实现定义”(implementation-dependent) 的灰色地带。这意味着，代码的运行结果竟然取决于你底层的 CPU 架构。这种不确定性，一直是跨平台开发中一个难以察觉的隐形地雷。 2025年末，Go 编译器团队核心成员 David Chase 提交了一份提案（#76264），旨在彻底终结这种混乱。该提案计划在未来的 Go 版本中，强制规定所有平台上的浮点转整数必须是“饱和”的 (saturating)，从而实现真正的全平台行为一致。 痛点：薛定谔的转换结果 在现有的 Go 规范下，如果你尝试将一个超出目标整数范围的浮点数（例如 1e100）转换为 int64，结果是未定义的。 让我们看看这有多疯狂。假设我们有以下代码： var f float64 = 1e100 // 一个巨大的数 var i int64 = int64(f) fmt.Println(i) 这段代码在不同架构下的运行结果截然不同： ARM64, RISC-V: 返回 9223372036854775807 (MAX_INT64)。这是“饱和”行为，即卡在最大值。 AMD64 (x86-64): 返回 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/proposal-float-to-int-conversions-should-saturate-on-overflow-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/01/11/proposal-float-to-int-conversions-should-saturate-on-overflow">本文永久链接</a> &#8211; https://tonybai.com/2026/01/11/proposal-float-to-int-conversions-should-saturate-on-overflow</p>
<p>大家好，我是Tony Bai。</p>
<p>你是否知道，同一行简单的代码 int64(myFloat)，在 Intel (amd64) 机器上可能返回一个巨大的负数，而在 ARM64 机器上却可能返回最大正整数？</p>
<p>在 Go 语言中，浮点数到整数的转换溢出行为长期以来一直属于“实现定义”(implementation-dependent) 的灰色地带。这意味着，代码的运行结果竟然取决于你底层的 CPU 架构。这种不确定性，一直是跨平台开发中一个难以察觉的隐形地雷。</p>
<p>2025年末，Go 编译器团队核心成员 David Chase 提交了一份提案（<a href="https://github.com/golang/go/issues/76264">#76264</a>），旨在彻底终结这种混乱。该提案计划在未来的 Go 版本中，<strong>强制规定所有平台上的浮点转整数必须是“饱和”的 (saturating)</strong>，从而实现真正的全平台行为一致。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2026/distributed-system-guide-qr.png" alt="img{512x368}" /></p>
<h2>痛点：薛定谔的转换结果</h2>
<p>在现有的 Go 规范下，如果你尝试将一个超出目标整数范围的浮点数（例如 1e100）转换为 int64，结果是未定义的。</p>
<p>让我们看看这有多疯狂。假设我们有以下代码：</p>
<pre><code class="go">var f float64 = 1e100 // 一个巨大的数
var i int64 = int64(f)
fmt.Println(i)
</code></pre>
<p>这段代码在不同架构下的运行结果截然不同：</p>
<ul>
<li><strong>ARM64, RISC-V</strong>: 返回 9223372036854775807 (<strong>MAX_INT64</strong>)。这是“饱和”行为，即卡在最大值。</li>
<li><strong>AMD64 (x86-64)</strong>: 返回 -9223372036854775808 (<strong>MIN_INT64</strong>)。这是一个令人困惑的溢出结果。</li>
<li><strong>WASM</strong>: 行为又不一样&#8230;</li>
</ul>
<p>更糟糕的是 NaN (Not a Number) 的转换：</p>
<pre><code class="go">var j int64 = int64(math.NaN())
fmt.Println(j)
</code></pre>
<ul>
<li><strong>ARM64</strong>: 返回 0。</li>
<li><strong>AMD64</strong>: 返回 <strong>MIN_INT64</strong>。</li>
<li><strong>RISC-V</strong>: 返回 <strong>MAX_INT64</strong>。</li>
</ul>
<p>这种不一致性不仅仅是理论问题，它已经导致了准标准库 x/time/rate 中的真实 Bug (<a href="https://github.com/golang/go/issues/71154">#71154</a>)。当你的代码逻辑依赖于转换结果的正负号来做判断时（例如 if i > 0），这种硬件差异就是致命的。</p>
<h2>解决方案：拥抱“饱和转换”</h2>
<p>David Chase 的提案非常直接：<strong>统一行为，拥抱饱和。</strong></p>
<p>所谓“饱和转换”，是指当浮点数超出目标整数的表示范围时，结果应该被“钳制”在目标类型的最大值或最小值，而不是发生回绕(wraparound)或产生随机值。</p>
<p>具体规则如下：</p>
<ol>
<li><strong>正溢出</strong> -> 返回目标类型的 <strong>最大值</strong> (MaxInt)。</li>
<li><strong>负溢出</strong> -> 返回目标类型的 <strong>最小值</strong> (MinInt)。</li>
<li><strong>NaN</strong> -> 返回 <strong>0</strong> (或归一化为 0)。</li>
</ol>
<p>这一改变将使得 Go 代码在任何 CPU 架构上都表现出完全一致的逻辑，彻底消除了这类可移植性隐患。</p>
<h2>深层权衡：一致性 vs. 性能</h2>
<p>为什么 Go 以前不这么做？核心原因在于<strong>性能成本</strong>。</p>
<p>在 ARM64 和 RISC-V 等现代架构上，硬件指令集（如 FCVT）原生支持饱和转换，因此这样做几乎没有额外开销。</p>
<p>然而，<strong>AMD64 (x86-64) 是个“异类”</strong>。它的 CVTTSD2SQ 指令在溢出时不仅返回一个特殊的“不定值”（通常是 MinInt），还会触发浮点异常。为了在 AMD64 上模拟出“饱和”行为，编译器必须插入额外的检查代码：</p>
<pre><code class="go">// 模拟代码逻辑：AMD64 上的额外开销
result = int64(x)
if result == MIN_INT64 { // 可能溢出了
    if x &gt; 0 {
        result = MAX_INT64 // 正溢出修正
    } else if !(x &lt; 0) {
        result = 0         // NaN 修正
    }
}
</code></pre>
<p>Go 核心团队成员 Ian Lance Taylor 在评论中指出，我们必须权衡：<strong>为了消除这种不一致性，值得让 AMD64 上的转换操作变慢吗？</strong></p>
<p>提案作者 David Chase 的回应是：<strong>值得。</strong> 与 FMA (融合乘加) 指令带来的微小精度差异不同，浮点转整数的差异往往是<strong>正负号级别</strong>的（MaxInt vs MinInt），这直接决定了代码逻辑的走向（循环是否执行、条件是否满足）。这种差异带来的 Bug 极其隐蔽且难以调试，其代价远超那几条指令的性能损耗。</p>
<h2>实施计划：温和的演进</h2>
<p>为了避免生态系统的剧烈震荡，提案建议采用分阶段的落地策略：</p>
<ul>
<li><strong>Go 1.26</strong>: 引入 GOEXPERIMENT 标志，允许开发者尝鲜并测试影响。</li>
<li><strong>Go 1.27</strong>: 将其设为默认的实现行为。</li>
<li><strong>Go 1.28</strong>: 正式修改 Go 语言规范 (Spec)，将其确立为标准。</li>
</ul>
<blockquote>
<p>注：Go 1.26当前已经功能冻结，<a href="https://github.com/golang/go/issues/33892#issuecomment-3721268260">该提案依然处于Go语言规范变更审查委员会的讨论状态中</a>，因此即便逻辑，其实际落地时间表也会顺延。</p>
</blockquote>
<h2>小结：Go 向“完美可移植性”迈出的重要一步</h2>
<p>Dr Chase的这个提案不仅是对一个技术细节的修正，更是 Go 语言设计哲学的一次体现：<strong>在工程实践中，可预测性和可移植性往往优于特定平台上的极致微优化。</strong></p>
<p>如果该提案通过，未来的 Gopher 们将不再需要担心底层的 CPU 是 Intel 还是 ARM，int64(NaN) 永远是 0，int64(Inf) 永远是 MaxInt64。这，才是我们想要的“Write Once, Run Anywhere”。</p>
<blockquote>
<p>注：目前Dr Chase也在努力弥合amd64下的性能差距。</p>
</blockquote>
<p>资料链接：https://github.com/golang/go/issues/76264</p>
<hr />
<p><strong>你的跨平台“血泪史”</strong></p>
<p>跨平台开发中的“未定义行为”往往是最难调试的 Bug。<strong>在你的开发生涯中，是否也遇到过因为 CPU 架构或操作系统差异而导致的诡异问题？你支持为了“一致性”而牺牲一点点 AMD64 上的性能吗？</strong></p>
<p><strong>欢迎在评论区分享你的踩坑经历或对提案的看法！</strong> 让我们一起见证 Go 语言的进化。</p>
<p><strong>如果这篇文章让你对底层原理有了新的认识，别忘了点个【赞】和【在看】，并转发给你的硬核伙伴！</strong></p>
<hr />
<p>还在为“复制粘贴喂AI”而烦恼？我的新专栏 <strong>《<a href="http://gk.link/a/12EPd">AI原生开发工作流实战</a>》</strong> 将带你：</p>
<ul>
<li>告别低效，重塑开发范式</li>
<li>驾驭AI Agent(Claude Code)，实现工作流自动化</li>
<li>从“AI使用者”进化为规范驱动开发的“工作流指挥家”</li>
</ul>
<p>扫描下方二维码，开启你的AI原生开发之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/ai-native-dev-workflow-qr.png" alt="" /></p>
<hr />
<p>你的Go技能，是否也卡在了“熟练”到“精通”的瓶颈期？</p>
<ul>
<li>想写出更地道、更健壮的Go代码，却总在细节上踩坑？</li>
<li>渴望提升软件设计能力，驾驭复杂Go项目却缺乏章法？</li>
<li>想打造生产级的Go服务，却在工程化实践中屡屡受挫？</li>
</ul>
<p>继《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》后，我的《<a href="http://gk.link/a/12yGY">Go语言进阶课</a>》终于在极客时间与大家见面了！</p>
<p>我的全新极客时间专栏 《<a href="http://gk.link/a/12yGY">Tony Bai·Go语言进阶课</a>》就是为这样的你量身打造！30+讲硬核内容，带你夯实语法认知，提升设计思维，锻造工程实践能力，更有实战项目串讲。</p>
<p>目标只有一个：助你完成从“Go熟练工”到“Go专家”的蜕变！ 现在就加入，让你的Go技能再上一个新台阶！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/01/11/proposal-float-to-int-conversions-should-saturate-on-overflow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为什么 AI 时代，C++ 和 Rust 反而更火了？Herb Sutter 的硬核解读</title>
		<link>https://tonybai.com/2026/01/03/why-cpp-programmers-keep-growing-fast/</link>
		<comments>https://tonybai.com/2026/01/03/why-cpp-programmers-keep-growing-fast/#comments</comments>
		<pubDate>Fri, 02 Jan 2026 23:49:14 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI时代]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[C++26]]></category>
		<category><![CDATA[C++29]]></category>
		<category><![CDATA[Contracts]]></category>
		<category><![CDATA[EnergyEfficiency]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[HerbSutter]]></category>
		<category><![CDATA[MemorySafety]]></category>
		<category><![CDATA[NVIDIA]]></category>
		<category><![CDATA[PerformancePerWatt]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[内存安全]]></category>
		<category><![CDATA[契约编程]]></category>
		<category><![CDATA[安全性]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[摩尔定律]]></category>
		<category><![CDATA[未定义行为]]></category>
		<category><![CDATA[标准库加固]]></category>
		<category><![CDATA[每瓦性能]]></category>
		<category><![CDATA[物理限制]]></category>
		<category><![CDATA[电力瓶颈]]></category>
		<category><![CDATA[硬件算力]]></category>
		<category><![CDATA[程序员]]></category>
		<category><![CDATA[能效]]></category>
		<category><![CDATA[芯片供应]]></category>
		<category><![CDATA[软件工程]]></category>
		<category><![CDATA[边界检查]]></category>
		<category><![CDATA[长期主义]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=5656</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2026/01/03/why-cpp-programmers-keep-growing-fast 大家好，我是Tony Bai。 “软件拿走性能的速度，永远比硬件提供性能的速度要快。” 在 AI 狂热、Python 统治胶水层、硬件算力看似无限增长的今天，C++ 标准委员会主席 Herb Sutter 却抛出了一个反直觉的结论：C++ 和 Rust 正在经历前所未有的高速增长。 这并非幸存者偏差。在他最新的博文《Software taketh away faster than hardware giveth》中，Sutter 结合 2025 年的行业数据、巨头财报和底层物理限制，为我们揭示了一个残酷的真相：我们正面临计算能力的“硬墙”，而高效能编程语言，是撞破这堵墙的唯一工具。 2025 年计算的双重瓶颈——电力与芯片 如果你认为算力增长的瓶颈仅仅是芯片（GPU/TPU）的供应，那你就错了。Sutter 引用了微软、亚马逊和 NVIDIA 财报电话会议的内容，指出 2025 年计算增长的第一大瓶颈是“电力”。 微软 CFO：我们不缺 GPU，我们缺的是把它们放进去的“空间和电力”。 亚马逊 CEO：AWS 过去 12 个月增加了 3.8 吉瓦的电力容量，这相当于他们 2022 年的总容量。 NVIDIA CEO 黄仁勋：1 吉瓦的数据中心就是 1 吉瓦的电力。你的“每瓦性能 (Performance per [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2026/why-cpp-programmers-keep-growing-fast-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2026/01/03/why-cpp-programmers-keep-growing-fast">本文永久链接</a> &#8211; https://tonybai.com/2026/01/03/why-cpp-programmers-keep-growing-fast</p>
<p>大家好，我是Tony Bai。</p>
<p>“软件拿走性能的速度，永远比硬件提供性能的速度要快。”</p>
<p>在 AI 狂热、Python 统治胶水层、硬件算力看似无限增长的今天，C++ 标准委员会主席 Herb Sutter 却抛出了一个反直觉的结论：<strong>C++ 和 Rust 正在经历前所未有的高速增长。</strong></p>
<p>这并非幸存者偏差。在他最新的博文《<a href="https://herbsutter.com/2025/12/30/software-taketh-away-faster-than-hardware-giveth-why-c-programmers-keep-growing-fast-despite-competition-safety-and-ai">Software taketh away faster than hardware giveth</a>》中，Sutter 结合 2025 年的行业数据、巨头财报和底层物理限制，为我们揭示了一个残酷的真相：我们正面临计算能力的“硬墙”，而高效能编程语言，是撞破这堵墙的唯一工具。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/system-programming-in-go-pr.png" alt="" /></p>
<h2>2025 年计算的双重瓶颈——电力与芯片</h2>
<p>如果你认为算力增长的瓶颈仅仅是芯片（GPU/TPU）的供应，那你就错了。Sutter 引用了微软、亚马逊和 NVIDIA 财报电话会议的内容，指出 2025 年计算增长的<strong>第一大瓶颈是“电力”</strong>。</p>
<ul>
<li><strong>微软 CFO</strong>：我们不缺 GPU，我们缺的是把它们放进去的“空间和电力”。</li>
<li><strong>亚马逊 CEO</strong>：AWS 过去 12 个月增加了 3.8 吉瓦的电力容量，这相当于他们 2022 年的总容量。</li>
<li><strong>NVIDIA CEO 黄仁勋</strong>：1 吉瓦的数据中心就是 1 吉瓦的电力。你的“每瓦性能 (Performance per Watt)”直接决定了你的收入。</li>
</ul>
<p>在这个背景下，<strong>能效 (Energy Efficiency)</strong> 不再是一个锦上添花的指标，而是直接关乎成本、收入乃至可行性的<strong>生死线</strong>。</p>
<p>这解释了为什么 C++ 和 Rust 如此重要：它们是目前仅有的、能够提供极致“每瓦性能”和“每晶体管性能”的主流便携式语言。在电力成为硬通货的今天，低效的软件就是在烧钱。</p>
<h2>软件的贪婪与硬件的无奈</h2>
<p>Sutter 提出了一个深刻的观点：<strong>我们对解决更复杂问题的需求，总是超过我们构建更强计算能力的速度。</strong></p>
<ul>
<li>2007 年的 iOS 开启了移动计算时代。</li>
<li>2022 年的 ChatGPT 开启了生成式 AI 时代。</li>
</ul>
<p>每一次硬件性能的飞跃，都会迅速被新兴的、更加“贪婪”的软件需求所吞噬。AI 只是这一长串名单中的最新一员。这意味着，<strong>我们永远不会拥有“足够快”的硬件</strong>，我们永远需要压榨出硬件的最后一滴性能。</p>
<p>因此，C++ 和 Rust 的开发者数量在过去三年（2022-2025）增长最快，这并非巧合，而是行业对高效能计算需求的直接反映。</p>
<h2>C++26 —— 安全与性能的“双重奏”</h2>
<p>面对 Rust 在内存安全方面的挑战，C++ 并没有坐以待毙。Sutter 详细介绍了即将发布的 <strong>C++26</strong> 标准在安全性上的重大突破：</p>
<ol>
<li><strong>消灭未初始化变量</strong>：C++26 将默认消除局部变量未初始化导致的未定义行为 (UB)。这是一个迟到但巨大的进步，直接消灭了一大类常见的安全漏洞。</li>
<li><strong>标准库“加固” (Hardening)</strong>：C++26 将引入标准库的“加固模式”，对常用的操作（如 vector 访问）进行边界检查。谷歌和苹果的实践数据表明，这种检查的开销极低（小于 1%），但能预防数以千计的潜在 Bug。</li>
<li><strong>契约 (Contracts)</strong>：C++26 将引入契约编程（Preconditions, Postconditions），将功能安全提升到语言层面。</li>
</ol>
<p>Sutter 甚至提出了一个大胆的设想：<strong>未来的 C++29 是否应该暂停新特性的开发，专注于“修补漏洞”和“全面硬化”？</strong> 这显示了 C++ 社区在安全性上的决心。</p>
<h2>AI 不会取代程序员，它只是计算器</h2>
<p>针对“AI 将取代程序员”的焦虑，Sutter 给出了一个冷静而乐观的比喻：<strong>AI 之于编程，就像计算器之于数学，或者搜索引擎之于知识。</strong></p>
<ul>
<li><strong>它是乘数，不是替代品</strong>：AI 能极大地减少死记硬背和样板代码的工作，让程序员专注于解决更难、更新的问题。</li>
<li><strong>需求在增长</strong>：即使有了 AI 加持，人类程序员的数量依然在快速增长。Atlassian CEO 指出：“如果软件开发的成本减半，我们不会减少一半的程序员，而是会编写两倍的软件，或者解决更复杂的问题。”</li>
<li><strong>AI 的局限</strong>：AI 只能解决已知的问题（训练数据覆盖的领域），而软件工程的核心价值在于解决<strong>未知的新问题</strong>。</li>
</ul>
<h2>小结：长期主义的胜利</h2>
<p>Herb Sutter 的这篇文章，是对高性能编程语言的一次强力辩护。在摩尔定律放缓、能源危机逼近、AI 需求爆发的今天，<strong>掌握一门能与硬件“对话”、能极致利用资源的语言（无论是 C++ 还是 Rust），不仅没有过时，反而变得比以往任何时候都更加重要。</strong></p>
<p>正如他所说：“软件拿走性能的速度，永远比硬件提供性能的速度要快。” 在这场追逐赛中，高效能开发者将永远是稀缺资源。</p>
<p>资料链接：https://herbsutter.com/2025/12/30/software-taketh-away-faster-than-hardware-giveth-why-c-programmers-keep-growing-fast-despite-competition-safety-and-ai</p>
<hr />
<p><strong>你的“能效”焦虑</strong></p>
<p>在你的日常开发中，是否也感受到了“算力不够用”或者“云成本过高”的压力？<strong>你认为在 AI 时代，掌握一门高性能系统级语言（C++/Rust）是变得更重要了，还是更边缘化了？</strong></p>
<p><strong>欢迎在评论区分享你的看法和职业规划！</strong> 让我们一起探讨如何在算力瓶颈时代突围。</p>
<p><strong>如果这篇文章为你拨开了迷雾，别忘了点个【赞】和【在看】，并转发给身边那些坚持底层开发的“硬核”朋友！</strong></p>
<hr />
<p>还在为“复制粘贴喂AI”而烦恼？我的新专栏 <strong>《<a href="http://gk.link/a/12EPd">AI原生开发工作流实战</a>》</strong> 将带你：</p>
<ul>
<li>告别低效，重塑开发范式</li>
<li>驾驭AI Agent(Claude Code)，实现工作流自动化</li>
<li>从“AI使用者”进化为规范驱动开发的“工作流指挥家”</li>
</ul>
<p>扫描下方二维码，开启你的AI原生开发之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/ai-native-dev-workflow-qr.png" alt="" /></p>
<hr />
<p>你的Go技能，是否也卡在了“熟练”到“精通”的瓶颈期？</p>
<ul>
<li>想写出更地道、更健壮的Go代码，却总在细节上踩坑？</li>
<li>渴望提升软件设计能力，驾驭复杂Go项目却缺乏章法？</li>
<li>想打造生产级的Go服务，却在工程化实践中屡屡受挫？</li>
</ul>
<p>继《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》后，我的《<a href="http://gk.link/a/12yGY">Go语言进阶课</a>》终于在极客时间与大家见面了！</p>
<p>我的全新极客时间专栏 《<a href="http://gk.link/a/12yGY">Tony Bai·Go语言进阶课</a>》就是为这样的你量身打造！30+讲硬核内容，带你夯实语法认知，提升设计思维，锻造工程实践能力，更有实战项目串讲。</p>
<p>目标只有一个：助你完成从“Go熟练工”到“Go专家”的蜕变！ 现在就加入，让你的Go技能再上一个新台阶！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2026, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2026/01/03/why-cpp-programmers-keep-growing-fast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brad Fitzpatrick 也等不及了！sync.Map 的泛型进化与 sync/v2 的诞生之路</title>
		<link>https://tonybai.com/2025/12/01/proposal-sync-v2/</link>
		<comments>https://tonybai.com/2025/12/01/proposal-sync-v2/#comments</comments>
		<pubDate>Mon, 01 Dec 2025 00:42:14 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[any]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Boxing]]></category>
		<category><![CDATA[BradFitzpatrick]]></category>
		<category><![CDATA[GC]]></category>
		<category><![CDATA[generics]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[IanLanceTaylor]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[iter.Seq2]]></category>
		<category><![CDATA[Iterator]]></category>
		<category><![CDATA[Mutex]]></category>
		<category><![CDATA[Once]]></category>
		<category><![CDATA[standardlibrary]]></category>
		<category><![CDATA[sync.Map]]></category>
		<category><![CDATA[sync.Pool]]></category>
		<category><![CDATA[sync/v2]]></category>
		<category><![CDATA[typealias]]></category>
		<category><![CDATA[TypeSafety]]></category>
		<category><![CDATA[waitgroup]]></category>
		<category><![CDATA[并发编程]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[接口]]></category>
		<category><![CDATA[提案]]></category>
		<category><![CDATA[标准库]]></category>
		<category><![CDATA[核心团队]]></category>
		<category><![CDATA[泛型]]></category>
		<category><![CDATA[生态分裂]]></category>
		<category><![CDATA[类型别名]]></category>
		<category><![CDATA[类型安全]]></category>
		<category><![CDATA[装箱]]></category>
		<category><![CDATA[迁移]]></category>
		<category><![CDATA[迭代器]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=5461</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/12/01/proposal-sync-v2 大家好，我是Tony Bai。 当 Go 核心团队前成员、著名 Gopher、net/http包的设计者 Brad Fitzpatrick 在 GitHub 上留下上图中的这句评论并甩出一个自己移植的库时，我们知道，sync/v2 的到来不仅仅是一个提案，更是一种迫切的刚需。 随着 math/rand/v2 在 Go 1.22, json/v2 在 Go 1.25 中的成功落地，Go 标准库的 v2 化进程似乎已经按下了加速键。今年1月份，Go 核心团队成员 Ian Lance Taylor 就提交了sync/v2 的提案 (#71076)。 这可不仅仅是一次简单的版本号升级，它标志着 Go 语言最核心的并发原语包，也终于要拥抱泛型，告别 interface{} 时代了。 在本文中，我们将深入剖析这份提案的核心内容，探讨它将如何重塑 Go 的并发编程体验，以及社区为此展开的激烈辩论。 核心痛点：any 的原罪 目前的 sync 包，特别是 sync.Map 和 sync.Pool，设计于 Go 支持泛型之前。它们被迫使用 any (即 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2025/proposal-sync-v2-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2025/12/01/proposal-sync-v2">本文永久链接</a> &#8211; https://tonybai.com/2025/12/01/proposal-sync-v2</p>
<p>大家好，我是Tony Bai。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/proposal-sync-v2-2.png" alt="" /></p>
<p>当 Go 核心团队前成员、著名 Gopher、net/http包的设计者 Brad Fitzpatrick 在 GitHub 上留下上图中的这句评论并甩出一个自己移植的库时，我们知道，sync/v2 的到来不仅仅是一个提案，更是一种迫切的刚需。</p>
<p>随着 math/rand/v2 在 <a href="https://tonybai.com/2024/02/18/some-changes-in-go-1-22">Go 1.22</a>, <a href="https://tonybai.com/2025/05/15/go-json-v2/">json/v2</a> 在 <a href="https://tonybai.com/2025/08/15/some-changes-in-go-1-25">Go 1.25</a> 中的成功落地，Go 标准库的 v2 化进程似乎已经按下了加速键。今年1月份，Go 核心团队成员 Ian Lance Taylor 就提交了<a href="https://github.com/golang/go/issues/71076"><strong>sync/v2</strong> 的提案 (#71076)</a>。</p>
<p>这可不仅仅是一次简单的版本号升级，它标志着 Go 语言最核心的并发原语包，也终于要拥抱泛型，告别 interface{} 时代了。</p>
<p>在本文中，我们将深入剖析这份提案的核心内容，探讨它将如何重塑 Go 的并发编程体验，以及社区为此展开的激烈辩论。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/google-adk-in-action-qr.png" alt="" /></p>
<h2>核心痛点：any 的原罪</h2>
<p>目前的 sync 包，特别是 sync.Map 和 sync.Pool，设计于 Go 支持泛型之前。它们被迫使用 any (即 interface{}) 来处理各种类型的数据。这带来了两个无法忽视的问题：</p>
<ol>
<li><strong>类型安全缺失</strong>：编译器无法阻止你往一个本该只存字符串的 sync.Map 里塞进一个整数，或者从 sync.Pool 里取出一个你以为是 []byte 实际上是 *bytes.Buffer 的东西。所有的错误只能在运行时通过 panic 暴露。</li>
<li><strong>性能损耗</strong>：将非指针类型（如 int、string）存入 any 类型的容器，必须进行装箱（boxing），这不仅增加了 CPU 开销，更重要的是会产生额外的内存分配，加重 GC 负担。对于追求极致性能的并发场景，这是不可接受的。</li>
</ol>
<p>sync/v2 的提案，就是要通过泛型彻底解决这些问题。</p>
<h2>sync/v2 的新面貌：类型安全与 API 进化</h2>
<p>根据提案，sync/v2 将不仅是 sync 的泛型翻版，它还趁机对 API 进行了现代化的打磨。</p>
<h3>Map[K, V]：终于等到了你</h3>
<p>新的 sync.Map 将拥有两个类型参数 K (comparable) 和 V (any)。</p>
<pre><code class="go">// sync/v2
type Map[K comparable, V any] struct { ... }

// 方法签名变得清晰且类型安全
func (m *Map[K, V]) Load(key K) (value V, ok bool)
func (m *Map[K, V]) Store(key K, value V)
</code></pre>
<p>此外，提案还计划顺应时代潮流，移除了老旧的 Range 方法，取而代之的是返回迭代器的 All 方法：</p>
<pre><code class="go">func (m *Map[K, V]) All() iter.Seq2[K, V]
</code></pre>
<h3>Pool[T]：更安全的资源复用</h3>
<p>sync.Pool 的改造稍微复杂一些。目前的 Pool 有一个导出的 New 字段，这很容易被误用。v2 版的提案曾经历过一次修改，最终方案倾向于移除导出的 New 字段，转而通过构造函数来设定：</p>
<pre><code class="go">type Pool[T any] struct { ... }

// 通过构造函数传入创建新对象的逻辑
func NewPool[T any](newf func() T) *Pool[T]

func (p *Pool[T]) Get() T
func (p *Pool[T]) Put(x T)
</code></pre>
<h2>社区的激辩：v2 真的必要吗？</h2>
<p>提案虽然诱人，但也引发了社区关于 Go 语言演进哲学的激烈讨论。</p>
<p><strong>反方：分裂生态的担忧</strong></p>
<p>有声音质疑：sync 包的大部分类型（如 Mutex, WaitGroup, Once）并不需要泛型。如果为了 Map 和 Pool 而引入整个 sync/v2，会不会导致生态分裂？以后我们是不是要在同一个项目里同时维护 v1 和 v2 的锁？</p>
<p>对此，Ian Lance Taylor 及其支持者给出的方案是：sync/v2 将包含 sync 包的所有类型。对于不需要泛型的类型（如 Mutex），通过<strong>类型别名 (Type Alias)</strong> 将其指向 v1 版本，或者保持 API 完全一致。这样，用户可以平滑迁移，最终完全切换到 v2，而无需混用。</p>
<p><strong>正方：性能与体验的刚需</strong></p>
<p>支持者们（包括 Brad Fitzpatrick）则指出，泛型带来的性能提升和开发体验改善是巨大的。特别是对于 Pool[[]byte] 这样的高频场景，避免每次 Put/Get 时的切片头分配，是实打实的性能红利。</p>
<h2>小结：不仅是代码的升级，更是理念的升级</h2>
<p>sync/v2 的提案目前仍在活跃讨论中，尚未尘埃落定。但它释放了一个明确的信号：<strong>Go 团队正在审慎而坚定地推动标准库的现代化</strong>。</p>
<p>对于我们 Gopher 而言，这意味着：</p>
<ol>
<li><strong>拥抱泛型</strong>：这不再是尝鲜，而很可能是未来的标准范式。</li>
<li><strong>关注性能</strong>：标准库的升级将带来免费的性能提升，特别是对于重度依赖 sync.Map 和 sync.Pool 的项目。</li>
<li><strong>准备迁移</strong>：虽然 Go 承诺兼容性，但 v2 包的引入意味着我们需要开始思考如何优雅地过渡。</li>
</ol>
<p>Brad Fitzpatrick 的“等不及”或许代表了许多资深开发者的心声。让我们拭目以待，看 sync/v2 将如何重塑 Go 的并发编程体验。</p>
<hr />
<p><strong>你的选择是？</strong></p>
<p>面对 sync/v2 带来的泛型红利和潜在的迁移成本，你更倾向于第一时间拥抱它，还是持观望态度？在你的项目中，sync.Map 或 sync.Pool 的性能瓶颈是否真的困扰过你？</p>
<p>欢迎在评论区留下你的看法，让我们一起探讨 Go 标准库的未来！ </p>
<p style='text-align:left'>&copy; 2025, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2025/12/01/proposal-sync-v2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Go 2026 路线图曝光：SIMD、泛型方法与无 C 工具链 CGO —— 性能与表达力的双重飞跃？</title>
		<link>https://tonybai.com/2025/11/28/go-2026-roadmap-revealed/</link>
		<comments>https://tonybai.com/2025/11/28/go-2026-roadmap-revealed/#comments</comments>
		<pubDate>Fri, 28 Nov 2025 00:45:22 +0000</pubDate>
		<dc:creator>bigwhite</dc:creator>
				<category><![CDATA[技术志]]></category>
		<category><![CDATA[arena]]></category>
		<category><![CDATA[arm64]]></category>
		<category><![CDATA[async/await]]></category>
		<category><![CDATA[AVX512]]></category>
		<category><![CDATA[CacheLineContention]]></category>
		<category><![CDATA[Cgo]]></category>
		<category><![CDATA[Clang]]></category>
		<category><![CDATA[GC]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[genericmethod]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[go1.26]]></category>
		<category><![CDATA[Golang]]></category>
		<category><![CDATA[goroutine]]></category>
		<category><![CDATA[highlevelAPI]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[L1/L2Cache]]></category>
		<category><![CDATA[LastLevelCache]]></category>
		<category><![CDATA[LLC]]></category>
		<category><![CDATA[memoryregions]]></category>
		<category><![CDATA[NEON]]></category>
		<category><![CDATA[NUMA]]></category>
		<category><![CDATA[Promise]]></category>
		<category><![CDATA[purego]]></category>
		<category><![CDATA[runtime.free]]></category>
		<category><![CDATA[runtime.freegc]]></category>
		<category><![CDATA[scalablevectors]]></category>
		<category><![CDATA[Schedulingaffinity]]></category>
		<category><![CDATA[Shardedvalues]]></category>
		<category><![CDATA[SIMD]]></category>
		<category><![CDATA[Specializedmalloc]]></category>
		<category><![CDATA[strings.Builder]]></category>
		<category><![CDATA[STW]]></category>
		<category><![CDATA[SVE]]></category>
		<category><![CDATA[sync.Sharded]]></category>
		<category><![CDATA[Tensor]]></category>
		<category><![CDATA[uniontype]]></category>
		<category><![CDATA[wasm]]></category>
		<category><![CDATA[Wasmstackswitching]]></category>
		<category><![CDATA[WriteBarrier]]></category>
		<category><![CDATA[云原生]]></category>
		<category><![CDATA[交叉编译]]></category>
		<category><![CDATA[内存区域]]></category>
		<category><![CDATA[内存释放]]></category>
		<category><![CDATA[分片值]]></category>
		<category><![CDATA[单指令多数据]]></category>
		<category><![CDATA[向量化算法]]></category>
		<category><![CDATA[垃圾回收]]></category>
		<category><![CDATA[性能]]></category>
		<category><![CDATA[无C工具链CGO]]></category>
		<category><![CDATA[显式释放]]></category>
		<category><![CDATA[模式匹配]]></category>
		<category><![CDATA[泛型方法]]></category>
		<category><![CDATA[编译器]]></category>
		<category><![CDATA[联合类型]]></category>
		<category><![CDATA[表达力]]></category>
		<category><![CDATA[调度亲和性]]></category>
		<category><![CDATA[路线图]]></category>
		<category><![CDATA[运行时]]></category>
		<category><![CDATA[逃逸分析]]></category>

		<guid isPermaLink="false">https://tonybai.com/?p=5450</guid>
		<description><![CDATA[本文永久链接 &#8211; https://tonybai.com/2025/11/28/go-2026-roadmap-revealed 大家好，我是Tony Bai。 在最近的一期 Go 编译器与运行时团队会议纪要中，我们惊喜地发现了一份关于 2026 年的规划 (2026 planning，如下图)。这份规划虽然简短，但其包含的信息量却足以让任何一位关注 Go 语言未来的开发者心跳加速。 从榨干硬件潜能的 SIMD 和运行时手动内存释放(runtime.free)，到呼声极高的泛型方法(generic method)与联合类型(union type)，再到彻底解决交叉编译痛点的无 C 工具链 CGO，Go 团队正密谋着一场关于性能、表达力与工程体验的全方位变革。 本文将结合最新的设计文档、CL (Change List) 记录和社区核心 Issue，和大家一起解析一下这份 Go 2026 路线图背后的技术细节与战略意图。 性能的极限突围 —— 榨干硬件的每一滴油水 一直以来，Go 在性能上的策略都是“足够好”。但在 2026 规划中，我们看到了 Go 团队向“极致性能”发起的冲锋，目标直指 AI、科学计算和高频交易等对延迟极度敏感的领域。 SIMD：从“汇编黑魔法”到“原生公民” 关键词：SIMD (ARM64, scalable vectors &#38; high-level API) 解读： 现状：目前在 Go 中使用 SIMD（单指令多数据）主要依赖手写汇编，不仅难以维护，而且无法被编译器内联优化，甚至会阻碍异步抢占。 变革：规划明确提出了 [...]]]></description>
			<content:encoded><![CDATA[<p><img src="https://tonybai.com/wp-content/uploads/2025/go-2026-roadmap-revealed-1.png" alt="" /></p>
<p><a href="https://tonybai.com/2025/11/28/go-2026-roadmap-revealed">本文永久链接</a> &#8211; https://tonybai.com/2025/11/28/go-2026-roadmap-revealed</p>
<p>大家好，我是Tony Bai。</p>
<p>在最近的一期 <a href="https://github.com/golang/go/issues/43930#issuecomment-3576250284">Go 编译器与运行时团队会议纪要</a>中，我们惊喜地发现了一份关于 <strong>2026 年的规划 (2026 planning，如下图)</strong>。这份规划虽然简短，但其包含的信息量却足以让任何一位关注 Go 语言未来的开发者心跳加速。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/go-2026-roadmap-revealed-2.png" alt="" /></p>
<p>从榨干硬件潜能的 <strong><a href="https://tonybai.com/2025/08/22/go-simd-package-preview">SIMD</a></strong> 和<strong>运行时手动内存释放(<a href="https://tonybai.com/2025/09/18/go-runtime-free-proposal">runtime.free</a>)</strong>，到呼声极高的<strong>泛型方法(generic method)</strong>与<strong>联合类型(union type)</strong>，再到彻底解决交叉编译痛点的<strong>无 C 工具链 CGO</strong>，Go 团队正密谋着一场关于<strong>性能、表达力与工程体验</strong>的全方位变革。</p>
<p>本文将结合最新的设计文档、CL (Change List) 记录和社区核心 Issue，和大家一起解析一下这份 Go 2026 路线图背后的技术细节与战略意图。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/paid/google-adk-in-action-qr.png" alt="" /></p>
<hr />
<h2>性能的极限突围 —— 榨干硬件的每一滴油水</h2>
<p>一直以来，Go 在性能上的策略都是“足够好”。但在 2026 规划中，我们看到了 Go 团队向“极致性能”发起的冲锋，目标直指 AI、科学计算和高频交易等对延迟极度敏感的领域。</p>
<h3>SIMD：从“汇编黑魔法”到“原生公民”</h3>
<ul>
<li><strong>关键词</strong>：SIMD (ARM64, scalable vectors &amp; high-level API)</li>
<li><strong>解读</strong>：
<ul>
<li><strong>现状</strong>：目前在 Go 中使用 SIMD（单指令多数据）主要依赖手写汇编，不仅难以维护，而且无法被编译器内联优化，甚至会阻碍异步抢占。</li>
<li><strong>变革</strong>：规划明确提出了 <strong>“high-level API”</strong>。这意味着 Go 将提供一套<strong>原生的、类型安全的 SIMD 库</strong>。开发者可以用纯 Go 代码编写向量化算法，由编译器自动映射到底层的 AVX-512 (x86) 或 NEON/SVE (ARM) 指令。</li>
<li><strong>Scalable Vectors</strong>：特别提到的“可伸缩向量”，直指 ARM64 的 <strong>SVE (Scalable Vector Extension)</strong> 技术。这将允许同一份 Go 二进制代码，在不同向量长度（128位到2048位）的硬件上自动适配，实现性能的“线性扩展”，这对于 AI 推理场景至关重要。</li>
<li><strong>进展</strong>：在2026年初发布的Go 1.26中，Cherry Mui 提交的关于 Architecture-specific SIMD intrinsics 的提案将以GO实验特性落地，这意味着Go开发者将拥有原生的simd包实现，目前这一工作已在紧锣密鼓地进行中。</li>
</ul>
</li>
</ul>
<h3>runtime.free：打破 GC 的“金科玉律”</h3>
<ul>
<li><strong>关键词</strong>：runtime.free, Specialized malloc</li>
<li><strong>解读</strong>：这是一个颠覆性的变化。Go 一直以自动 GC 著称，但在极致性能场景下，GC 的 CPU 和 STW 开销仍是瓶颈。
<ul>
<li><strong>显式释放</strong>：根据设计文档 《<a href="https://go.dev/design/74299-runtime-freegc">Directly freeing user memory to reduce GC work</a> 》和相关 CL (如 CL 673695)，runtime.freegc 允许将不再使用的堆内存<strong>立即归还</strong>给分配器，供后续重用，而<strong>完全绕过 GC 扫描</strong>。</li>
<li><strong>编译器辅助</strong>：这并非让用户手动管理内存（那样太不安全）。Go 的愿景是让<strong>编译器</strong>通过逃逸分析和生命周期分析，<strong>自动插入</strong> free 调用。例如，在 strings.Builder 的扩容过程中，旧的 buffer 可以被立即释放。</li>
<li><strong>实测数据</strong>：在早期的原型测试中，优化后的 strings.Builder 性能提升了 <strong>2 倍</strong>！配合针对无指针对象 (noscan) 优化的专用分配器 (Specialized malloc)，Go 的临时对象分配性能将逼近栈分配。</li>
</ul>
</li>
</ul>
<hr />
<h2>可伸缩性的新高度 —— 拥抱超多核时代</h2>
<p>随着 CPU 核心数向 128 核甚至更高迈进，传统的并发模式开始遇到“扩展性墙”。Go 2026 规划给出了一套组合拳。</p>
<h3>分片值 (Sharded Values)</h3>
<ul>
<li><strong>关键词</strong>：Sharded values</li>
<li><strong>痛点</strong>：在高并发场景下，对同一个全局计数器或 sync.Pool 的访问，会导致严重的<strong>缓存行争用 (Cache Line Contention)</strong>，让多核优势荡然无存。</li>
<li><strong>解决方案</strong>：Go团队提出一个名为<a href="https://tonybai.com/2025/05/19/shardedvalue-per-cpu-proposal/">sync.Sharded</a> 的提案(详见 Issue #18802)，sync.Sharded 旨在提供一种<strong>“每 P (Processor) 本地化”</strong>的数据结构。
<ul>
<li><strong>无锁读写</strong>：每个 P 只操作自己本地的分片，完全无锁，零竞争。</li>
<li><strong>按需聚合</strong>：只在需要读取总值时，才遍历所有分片进行聚合。</li>
<li>这比现有的 sync.Map 或 atomic 操作在高核数机器上将有数量级的性能提升。</li>
</ul>
</li>
</ul>
<h3>调度亲和性 (Scheduling Affinity)</h3>
<ul>
<li><strong>关键词</strong>：Scheduling affinity</li>
<li><strong>解读</strong>：Go 调度器的“工作窃取”机制虽然平衡了负载，但也导致 Goroutine 经常在不同 CPU 核心间“漂移”，破坏了 L1/L2 缓存的热度。
<ul>
<li><strong>新机制</strong>：在 Issue #65694中，Go团队 计划引入一种机制，允许将一组相关的 Goroutine <strong>“绑定”</strong> 或 <strong>“倾向”</strong> 于特定的 P 或 NUMA 节点。这对于数据库、高频交易系统等缓存敏感型应用是巨大的利好，能显著减少 <strong>LLC (Last Level Cache) Miss</strong>。</li>
</ul>
</li>
</ul>
<h3>内存区域 (Memory Regions)</h3>
<ul>
<li><strong>关键词</strong>：Memory regions</li>
<li><strong>解读</strong>：在 <strong>Arena</strong>试验失败后，Michael Knyszek发起了一个名为Memory regions方案的讨论（具体见 <a href="https://github.com/golang/go/discussions/70257">Discussion #70257</a>)，其核心思想是，通过一个 region.Do(func() { &#8230; }) 调用，将一个函数作用域内的所有内存分配<strong>隐式地</strong>绑定到一个临时的、与 goroutine 绑定的区域中。这个优雅设计的背后，是<strong>极其复杂的实现</strong>。它需要在开启区域的 goroutine 中启用一个特殊的、低开销的<strong>写屏障（write barrier）</strong>来动态追踪内存的逃逸。虽然理论上可行，但其实现复杂度和潜在的性能开销，使其成为一个长期且充满不确定性的研究课题。在2026年，Go团队要在这个方案上有所突破，依旧任重道远。</li>
</ul>
<hr />
<h2>语言表达力的觉醒 —— 填补泛型后的最后拼图</h2>
<p>在泛型落地后，Go 社区对语言特性的渴望并未止步。规划中提到的几个特性，将进一步提升 Go 的表达力。</p>
<h3>泛型方法 (Generic Methods)</h3>
<ul>
<li><strong>关键词</strong>：generic methods</li>
<li><strong>背景</strong>：这是泛型引入后最大的遗憾之一。目前 Go 不支持在接口方法或结构体方法中定义额外的类型参数。</li>
<li><strong>展望</strong>：参考 <a href="https://github.com/golang/go/issues/49085">Issue #49085</a>，尽管实现难度极大（涉及运行时字典传递或单态化膨胀），但核心团队将其列入规划，表明他们正在寻找突破口。一旦实现，像 Stream.Map[T, U](func(T) U) 这样流畅的链式调用将成为可能。</li>
</ul>
<h3>联合类型 (Union Types)</h3>
<ul>
<li><strong>关键词</strong>：union type</li>
<li><strong>解读</strong>：参考 <a href="https://github.com/golang/go/issues/19412">Issue #19412</a>，这不仅仅是泛型约束中的 A | B。真正的联合类型（类似 Rust 的 Enum 或 TypeScript 的 Union）可以让 Go 拥有更强大的模式匹配能力。配合可能的 match 语法，它将彻底改变 Go 的错误处理和状态机编写方式，使其更安全、更简洁。</li>
</ul>
<h3>Tensor (?) —— AI 时代的入场券</h3>
<ul>
<li><strong>关键词</strong>：maybe tensor (?)</li>
<li><strong>解读</strong>：这个带问号的项充满了想象力。它暗示 Go 团队可能正在严肃考虑为 <strong>AI/ML 工作负载</strong>提供原生的多维数组支持。如果 Go 能在语言层面原生支持高效的 Tensor 操作和自动微分，它将有资格挑战 Python 在 AI 基础设施领域的统治地位。当然这一切还只是猜测。</li>
</ul>
<hr />
<h2>工具链革命 —— 无痛 CGO</h2>
<h3>无 C 工具链的 CGO (CGO without C toolchain)</h3>
<ul>
<li><strong>关键词</strong>：cgo without C toolchain</li>
<li><strong>痛点</strong>：目前启用 CGO 就意味着必须安装 GCC/Clang，且失去了跨平台交叉编译的便利性（CGO_ENABLED=0 是多少 Gopher 的无奈之选）。</li>
<li><strong>解决方案</strong>：Go 团队的目标是实现<strong>“纯 Go 的 C 交互”</strong>。这可能通过两种路径实现：
<ul>
<li><strong>运行时加载</strong>：类似 purego，在运行时动态加载共享库并调用，无需编译期链接。</li>
<li><strong>内置微型链接器</strong>：Go 编译器直接解析 C 头文件并生成调用代码。</li>
<li>无论上述哪种方式，或是其他方式，一旦实现，<strong>“Write once, compile anywhere”</strong> 的承诺将在 CGO 场景下也得以兑现。</li>
</ul>
</li>
</ul>
<h3>Wasm 栈切换</h3>
<ul>
<li><strong>关键词</strong>：Wasm stack switching</li>
<li><strong>解读</strong>：这是为了更好地支持 <strong>Go 在浏览器中的异步模型</strong>。通过栈切换（Stack Switching），Go 可以更高效地挂起和恢复 Wasm 的执行，从而与 JavaScript 的 Promise 和 async/await 机制无缝互操作，显著减小 Wasm 产物的体积并提升性能。</li>
</ul>
<hr />
<h2>小结：性能与表达力的双重飞跃</h2>
<p>看完这份 2026 路线图，我们不禁感叹：Go 语言正在经历它的<strong>“成人礼”</strong>。</p>
<ul>
<li><strong>在性能上</strong>，它不再满足于“够用”，而是通过 SIMD、手动内存管理和亲和性调度，向 C/C++ 统治的“极致性能领域”发起冲击。</li>
<li><strong>在表达力上</strong>，它正在补齐泛型后的最后短板，通过泛型方法和联合类型，让代码更优雅、更安全。</li>
<li><strong>在体验上</strong>，它致力于抹平 CGO 和交叉编译的最后一道坎。</li>
</ul>
<p>这是一个野心勃勃的计划。如果这些特性在 2026 年真地能如期落地，Go 将不再仅仅是“云原生的语言”，它将成为一个<strong>全能、极致、且依旧简单</strong>的通用计算平台。</p>
<h2>参考资料</h2>
<ul>
<li>Go compiler and runtime meeting notes &#8211; https://github.com/golang/go/issues/43930#issuecomment-3576250284</li>
<li>Directly freeing user memory to reduce GC work &#8211; https://go.dev/design/74299-runtime-freegc</li>
<li>runtime, cmd/compile: add runtime.freegc and runtime.freegcTracked to reduce GC work &#8211; https://github.com/golang/go/issues/74299</li>
<li>715761: runtime: support runtime.freegc in size-specialized mallocs for noscan objects &#8211; https://go-review.googlesource.com/c/go/+/715761</li>
<li>simd: architecture-specific SIMD intrinsics under a GOEXPERIMENT &#8211; https://github.com/golang/go/issues/73787</li>
<li>proposal: sync: support for sharded values &#8211; https://github.com/golang/go/issues/18802</li>
<li>runtime: stronger affinity between G ↔ P ↔ M ↔ CPU?  &#8211; https://github.com/golang/go/issues/65694</li>
<li>https://github.com/golang/go/discussions/70257 &#8211; https://github.com/golang/go/discussions/70257</li>
<li>Region-based memory management &#8211; https://en.wikipedia.org/wiki/Region-based_memory_management</li>
<li>proposal: spec: add sum types / discriminated unions &#8211; https://github.com/golang/go/issues/19412</li>
<li>proposal: spec: allow type parameters in methods &#8211; https://github.com/golang/go/issues/49085</li>
</ul>
<hr />
<p>还在为“复制粘贴喂AI”而烦恼？我的新专栏 <strong>《<a href="http://gk.link/a/12EPd">AI原生开发工作流实战</a>》</strong> 将带你：</p>
<ul>
<li>告别低效，重塑开发范式</li>
<li>驾驭AI Agent(Claude Code)，实现工作流自动化</li>
<li>从“AI使用者”进化为规范驱动开发的“工作流指挥家”</li>
</ul>
<p>扫描下方二维码，开启你的AI原生开发之旅。</p>
<p><img src="https://tonybai.com/wp-content/uploads/2025/ai-native-dev-workflow-qr.png" alt="" /></p>
<hr />
<p>你的Go技能，是否也卡在了“熟练”到“精通”的瓶颈期？</p>
<ul>
<li>想写出更地道、更健壮的Go代码，却总在细节上踩坑？</li>
<li>渴望提升软件设计能力，驾驭复杂Go项目却缺乏章法？</li>
<li>想打造生产级的Go服务，却在工程化实践中屡屡受挫？</li>
</ul>
<p>继《<a href="http://gk.link/a/10AVZ">Go语言第一课</a>》后，我的《<a href="http://gk.link/a/12yGY">Go语言进阶课</a>》终于在极客时间与大家见面了！</p>
<p>我的全新极客时间专栏 《<a href="http://gk.link/a/12yGY">Tony Bai·Go语言进阶课</a>》就是为这样的你量身打造！30+讲硬核内容，带你夯实语法认知，提升设计思维，锻造工程实践能力，更有实战项目串讲。</p>
<p>目标只有一个：助你完成从“Go熟练工”到“Go专家”的蜕变！ 现在就加入，让你的Go技能再上一个新台阶！</p>
<p><img src="https://tonybai.com/wp-content/uploads/course-card/iamtonybai-banner-2.gif" alt="" /></p>
<hr />
<p>商务合作方式：撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求，请扫描下方公众号二维码，与我私信联系。</p>
<p><img src="http://image.tonybai.com/img/tonybai/iamtonybai-wechat-qr.png" alt="" /></p>
<p style='text-align:left'>&copy; 2025, <a href='https://tonybai.com'>bigwhite</a>. 版权所有. </p>
]]></content:encoded>
			<wfw:commentRss>https://tonybai.com/2025/11/28/go-2026-roadmap-revealed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
