为什么说“编译通过,就能运行”?Google 专家 Alice 揭秘 Rust 的工程美学与底层逻辑

本文永久链接 – https://tonybai.com/2026/06/16/why-if-it-compiles-it-runs-rust-engineering-aesthetics-and-logic 大家好,我是Tony Bai。 在软件工程界,有一句流传甚广、近乎玄学的名言:“如果你的 Rust 代码通过了编译,那么它就已经可以正确运行了。” 对于被 Java 的空指针异常(NullPointerException)折磨得彻夜难眠、被 C++ 的段错误(Segfault)逼到崩溃、或者在 TypeScript 里为处理各种隐式错误而心力交瘁的开发者来说,这句话听起来像是一个过于美好的谎言。 ...

June 16, 2026 · 9 min · Tony Bai

十年难题终获突破:揭秘 Go 1.27 接口逃逸分析优化

本文永久链接 – https://tonybai.com/2026/05/22/go-1-27-interface-escape-analysis-optimization-breakthrough 大家好,我是Tony Bai。 在日常的 Go 语言开发中,有这样一段极其普通、普通到闭着眼睛都能敲出来的代码: val := 1000 fmt.Sprintf("Result: %d", val) 如果我告诉你,这短短两行代码,就是导致你高并发服务 CPU 飙升、GC(垃圾回收)频繁卡顿的元凶之一,你会不会觉得我在危言耸听? ...

May 22, 2026 · 8 min · Tony Bai

TypeScript 编译器 Go 重写版提速 10 倍:微软团队深度揭秘幕后工程细节

本文永久链接 – https://tonybai.com/2026/01/27/typescript-compiler-go-rewrite-10x-speed-microsoft-details 大家好,我是Tony Bai。 “JavaScript 是一门很棒的语言,但它并不是为了编写编译器而设计的。” 备受瞩目的 TypeScript 编译器 Go 重写版(代号 TypeScript 7.0)已经取得了惊人的 10 倍性能提升。在最近的 GopherCon 2025 上,来自 Microsoft TypeScript 团队的 Jake Bailey 带来了一场干货满满的分享,深度揭秘了这场跨语言大迁徙背后的工程挑战与技术细节。 ...

January 27, 2026 · 8 min · Tony Bai

Go 泛型再进化:移除类型参数的循环引用限制

本文永久链接 – https://tonybai.com/2025/11/19/proposal-remove-cycle-restriction-for-type-parameters 大家好,我是Tony Bai。 自 Go 1.18 引入泛型以来,Gopher 们一直在探索其能力的边界。然而,在这片新大陆上,一直存在着一个由语言规范施加的限制,它禁止了一种强大而富有表达力的泛型模式的实现。 ...

November 19, 2025 · 7 min · Tony Bai

来自 Go 创始人的忠告:这五条关于“复杂性”的法则,比算法更重要

本文永久链接 – https://tonybai.com/2025/11/10/rob-pike-on-complexity 大家好,我是Tony Bai。 在软件工程的殿堂里,我们常常将算法和数据结构奉为圭臬。我们痴迷于时间复杂度的优化,热衷于讨论各种精巧的数据结构。然而,Go 语言的联合创始人 Rob Pike 早在其1989年的一篇C 语言编程笔记中,就为我们留下了一份更根本的“忠告”。这份忠告,凝练为五条(或者说六条?)关于如何对抗软件“复杂性”的黄金法则。 ...

November 10, 2025 · 6 min · Tony Bai

从《凡人修仙传》到《三体》:顶尖程序员的“降维打击”与“法则”之力

本文永久链接 – https://tonybai.com/2025/10/24/from-fanren-to-three-body-top-programmers-power 大家好,我是Tony Bai。 在上篇文章中,我们论道了程序员的修仙境界。但一个更深层的问题随之而来:决定一个修士(程序员)最终高度的,究竟是什么?是掌握了更多华丽的“法术”(框架/工具),还是洞悉了其背后的“天地法则”(底层原理)? 在《凡人修仙传》的后期,韩天尊与道祖们的斗法,早已不是简单的法宝对轰,而是对时间、空间等“至尊法则”的掌控。谁对法则的理解更深,谁就能言出法随,改天换地。 ...

October 24, 2025 · 7 min · Tony Bai

Go 作为第一门编程语言:天才之选还是糟糕开端?

Go 作为第一门编程语言:天才之选还是糟糕开端? - Tony Bai Tony Bai 一个程序员的心路历程 Google Go语言编码风格规范 Google Go语言编码风格规范:指南篇 Google Go语言编码风格规范:决定篇 Google Go语言编码风格规范:最佳实践篇 Go语言第一课FAQ ...

October 11, 2025 · 6 min · Tony Bai

Go 1.24用户报告:Datadog如何借助 Swiss Tables版map节省数百 GB 内存?

本文永久链接 – https://tonybai.com/2025/07/22/go-swiss-table-map-user-report 大家好,我是Tony Bai。 Datadog 的故事始于一次对Go 1.24内存回归问题的追踪。在与 Go 社区协作修复了该问题后,他们在部署修复版本的过程中,观察到了一个意料之外的现象:在高流量环境中,内存使用不仅恢复了正常,甚至大幅下降。一个名为 shardRoutingCache 的巨型内存 map,其堆内存占用减少了约 500 MiB,考虑到 Go 的垃圾回收机制(GOGC=100),这相当于节省了近 1 GiB 的物理内存。 ...

July 22, 2025 · 6 min · Tony Bai

Go unique包:突破字符串局限的通用值Interning技术实现

本文永久链接 – https://tonybai.com/2024/09/18/understand-go-unique-package-by-example Go的1.23版本中引入了一个新的标准库包unique,为Go开发者带来了高效的值interning能力。这种能力不仅适用于字符串类型值,还可应用于任何可比较(comparable)类型的值。 本文将简要探讨interning技术及其在Go中的实现方式,通过介绍unique包的功能,帮助读者更好地理解这一技术及其实际应用。 1. 从string interning技术说起 通常提到interning技术时,指的是传统的字符串驻留(string interning)技术。它是一种优化方法,旨在减少程序中重复字符串的内存占用,并提高字符串比较操作的效率。其基本原理是将相同的字符串值在内存中只存储一次,所有对该字符串的引用都指向同一内存地址,而不是为每个相同字符串创建单独的副本。下图展示了使用和不使用string interning技术的对比: ...

September 18, 2024 · 14 min · Tony Bai

Go语言开发者的Apache Arrow使用指南:读写Parquet文件

本文永久链接 – https://tonybai.com/2023/07/31/a-guide-of-using-apache-arrow-for-gopher-part6 Apache Arrow是一种开放的、与语言无关的列式内存格式,在本系列文章的前几篇中,我们都聚焦于内存表示与内存操作。 但对于一个数据库系统或大数据分析平台来说,数据不能也无法一直放在内存中,虽说目前内存很大也足够便宜了,但其易失性也决定了我们在特定时刻还是要将数据序列化后存储到磁盘或一些低成本的存储服务上(比如AWS的S3等)。 ...

July 31, 2023 · 17 min · Tony Bai