一个程序员的心路历程
切片与数组:[i32; 3]、[i32]、&[i32; 3]、&[i32] 到底有什么区别?
本文从内存布局出发,拆解 Rust 中定长数组 [i32; N]、动态大小切片 [i32]、数组引用 &[i32; N] 与切片引用 &[i32] 的本质区别,对比 C++ 与 Go 的对应设计,讲清函数形参的四种声明方式及其适用场景,并给出“形参优先使用 &[T]”的原因与反向转换技巧。
Go cgo 去 C 工具链提案最新进展:Cherry Mui 给出更具体的落地方案
Go 核心团队正在推进一项重要的 cgo 架构改造。继 Matloob 提出「cgo without a C toolchain」后,Cherry Mui 于 11 月 4 日发布了用于 Proposal Review 的精简设计。这次更新明确了 `cmd/go` 的模式选择机制、Binding 文件的新指令体系、`runtime/cgo` 的 Go 化改造,以及 `CGO_ENABLED=auto` 在交叉编译中的新角色。本文逐一拆解这些变化,看看 Go 团队准备如何让 cgo 在不安装 GCC/Clang 的情况下,直接调用已经编译好的 C 库。
C++ 史上首次被否决!C++ 之父与标准委员会,终于闹掰了?
2026 年 10 月,C++26 的最终国际标准草案(DIS)在 ISO 成员国投票中罕见遭到否决,遭遇 C++ 历史上首次重大挫败。这场风波的核心在于围绕新特性“契约(Contracts)”的剧烈分歧——C++ 之父 Bjarne Stroustrup 等人直指其存在根本缺陷,而委员会重要人物 Herb Sutter 随后发文探讨“当语言创造者与标准所有者发生严重分歧”的历史出路。本文深度还原投票内幕、技术博弈、六条潜在解决路径,并探讨大型编程语言治理体系面临的深层挑战。
再见,Go map 的渐进式扩容!Go 1.28 将迎来 maps.Grow
Go 语言的 map 虽使用便捷,但面对已存在的 map 进行大批量追加写入时,无法主动预留空间、易引发多轮渐进式扩容与内存抖动的痛点长期存在。Go 团队近期正式接受并完成了 Proposal #81698:将在 Go 1.28 的标准库中引入 maps.Grow,并同步为 maps.Copy 赋予自动预扩容能力。实测大 map 批量复制耗时最多锐减约 57%,内存分配减少约 50%。本文深度解析新 API 的设计细节、性能基准及背后的工程哲学。
不是所有服务都值得“双活”:Uber容灾架构的降本哲学
Uber 在顶级系统会议 NSDI'26 上披露了其新一代容灾架构 UFA:过去十年为应对年均不到 20 小时的全量峰值故障,全公司 6000 多个微服务长期预留 2 倍容量,导致 400 万核 CPU 机队利用率常年仅 20%。通过系统性消灭 4155 个“下游挂导致核心挂”的 fail-close 隐性依赖,并将服务划分为 Always-On、Active-Migrate 等四级容灾档位进行安全超卖,Uber 用两年时间砍掉 102.5 万核 CPU,全局利用率拉升至 31%,同时核心行程可用率始终稳定在 99.97% 以上。