技术文章 Daniel Lemire 2026/09/28
文章介绍 simdjson 5.0 这一 C++ JSON 解析/生成库的版本更新。核心变化包括 C++26 静态反射正式支持、新增编译期完美哈希的 key selectors 以一次遍历按任意顺序提取字段,以及扩展多种流式解析和切片并行能力。性能方面,数字类 DOM 解析提升 8%–25%,转义 Unicode 文件约提升 80%,序列化因改用 Dragonbox 提升 1.3–1.7 倍。基准仅基于 GCC 16 与单核 Xeon,且文章属发布说明,实现原理和失败边界讨论有限,适合关注 C++ 高性能数据处理与库设计的读者。
推荐收录,因为文章提供了 simdjson 5.0 的具体版本变更、API 示例和可复现的性能对比,尤其是 key selectors 的编译期哈希方案以及 Dragonbox 替换带来的序列化提升,对 C++ 库设计和 JSON 性能优化有直接参考价值。适合使用 C++ 处理大规模 JSON、关注解析/序列化性能的工程师。需注意它本质是发布说明,基准环境单一,不能替代对具体实现和兼容性边界的深入评估。
技术文章 Daniel Lemire 2026/09/26
文章讨论如何在 C# 中高效修复 UTF-16 字符串:当高/低代理项配对错误或落单时,应将孤立代理项替换为 U+FFFD,避免把非法字符串写入磁盘或网络。作者把 JavaScript 中已有的 toWellFormed/isWellFormed 算法引入 C# 库 SimdUnicode,利用 SIMD 指令并行比较多个 16 位码元;合法输入直接返回原实例且不分配,缓冲区版本则逐码元写出。基准显示,在支持 AVX-512 的 Xeon 上,拉丁文本校验达约 69 GB/s,而 IndexOfAnyInRange 仅 33 GB/s;全代理对 Emoji 输入下,SIMD 检查约 53 GB/s,运行时搜索降至 0.4 GB/s,M4 Max 趋势类似。作者还说明结果依赖 .NET 10、Xeon Gold 6548N 与 M4 Max,并引用相关论文与源码,方便读者复现和扩展。
推荐收录:文章给出了 V8 同源的 SIMD 修复算法、C# 实现、无分配边界和 Xeon/M4 实测数据,属于可复现的性能工程证据。适合处理文本解析、Unicode 清洗、网络/存储输入校验的工程师与库作者参考,迁移时需注意 SIMD 指令集、运行时版本和跨平台性能差异。
技术文章 Eli Bendersky 2026/09/26
文章围绕 Alexis King 的“Parse, don't validate”模式,讨论它在 Rust 中的具体体现。作者先以读取 CONFIG_DIRS 环境变量为例,说明仅返回 Vec 并在函数内检查非空,会让调用方反复处理本不可能出现的 None,也在不变量变更时埋下风险。接着介绍用 NonEmpty 类型把非空约束编码进类型系统,并展示 uutils/coreutils 的 Pipeline 等真实用法。随后讨论渐进解析与类型精化:rust-analyzer 的 AbsPathBuf、camino::Utf8PathBuf、NonZero 整数,以及 serde/JSON 反序列化如何把字段约束编码到类型。结论是解析应把数据转换为携带不变量的新类型,让后续代码无需重复验证;不足是例子多集中在库与应用层,未深入讨论类型设计成本与性能权衡。
推荐收录,因为文章用 Rust 标准库、uutils、rust-analyzer、serde 等真实代码展示了如何把“非空、绝对路径、非零、枚举取值”等不变量从运行时检查转为类型约束。它适合 Rust 开发者、库设计者和后端工程师阅读,可迁移到 API 边界、配置解析和数据建模中,帮助减少重复验证与 unreachable! 式假设。
技术文章 Alex Chan 2026/09/26
文章介绍如何在 Rust 中实现带命名参数的参数化/表驱动测试,以缩略图工具为例,希望测试逻辑写一次、多组输入复用。作者比较 for 循环、位置参数宏与 rstest、parameterized、yare 等第三方库,但因个人项目想学习宏而手写 macro_rules!。核心是让 matcher 匹配类似结构体的命名字段,再由 transcriber 为每个用例生成独立 #[test] 函数,并解释 $(...)*、元变量与 matcher/transcriber 机制。结论是命名用例更自文档化、用例相互隔离且便于新增。边界在于示例面向小型个人 Rust 工具,未做生产级库选型或充分基准,宏模式也绑定特定测试结构。
推荐收录:文章给出完整的 macro_rules! 定义、matcher/transcriber 拆解和生成代码示例,并对比 for 循环、位置参数宏和第三方库,证据充分。适合正在写 Rust 测试或想理解声明式宏的开发者,可迁移到表驱动测试、代码生成和减少样板代码的场景。需注意作者刻意不用第三方库且项目规模小,生产选型仍需结合 rstest/yare 等方案的维护成本。
技术文章 Daniel Lemire 2026/09/25
文章用微基准测试比较多种编程语言每秒能创建多少条由整数转换而来的短字符串,覆盖 C++ 的 std::to_string、Nim 的 $、Go 的 strconv.Itoa、Node.js/Bun 的 String、Rust 的 to_string 与 itoa,以及 Python 的 str。方法上让循环把结果写入 1024 槽环形缓冲,整数从 0 到 1 亿,每字符串最多 8 位,在 Apple M4 Max 上取五次最佳成绩。结论是 C++ 以 183.8M/s、约 5.4ns 每条大幅领先,Nim、Go、Node.js、Rust 集中在 63-86M/s、12-16ns 区间,Python 最慢,为 22.9M/s、约 44ns。作者解释 C++ 优势来自小字符串优化,短字符串直接存在对象内,无需调用内存分配器;Go 和 JavaScript 等 GC 运行时分配大量短命小对象也相当高效。边界是该结果依赖特定硬件、编译器版本、字符串长度和分配模式,属于微基准,不宜直接外推到所有真实工作负载。
推荐收录,因为它给出了可复现的微基准方法、完整源码和版本信息,并用小字符串优化与 GC 分配差异解释跨语言性能差距。适合关注性能、运行时和语言实现的开发者,可作为评估字符串/对象分配热点的参考。风险是数字依赖 M4 Max 和具体版本,不能直接当作跨平台结论。
技术文章 Go Blog 2026/09/24
文章介绍 Go 1.26/1.27 的实验性 SIMD 支持:archsimd 提供架构相关 API,新的 simd 包则提供平台和向量长度无关的可移植接口。面对各架构在向量长度、掩码和指令集合上的差异,simd 只暴露操作交集,并用 archsimd 指令或标量代码补齐缺失操作,同时支持 ToArch/FromArch 回退到平台专用实现。文中列出 Load/Store、算术、比较、掩码、转换、移位和 reshape 等 API,并以 OnesCount 为例展示 amd64、NEON、wasm 和纯模拟的跨平台实现,说明编译器会按 SIMD 宽度特化并消除类型分支。GODEBUG=simd=0/128/256/512 可强制模拟或指定向量宽度,便于测试不同硬件能力。当前 API 仍属实验性,ReduceSum 等操作尚未提供,方法集合因跨平台约束而较保守,SVE 等支持仍在规划中。
推荐收录。文章来自 Go 官方博客,给出完整 API 表、跨平台实现示例、GODEBUG 测试开关及编译器特化细节,证据充分,不是概念介绍。适合 Go 语言、编译器、性能优化和底层系统开发者阅读,可迁移到可移植 SIMD API 设计、跨架构模拟与性能验证。风险是 API 仍为实验性,部分操作缺失且 GODEBUG 行为可能随版本变化。
技术文章 Fzakaria Blog 2026/09/21
文章围绕 Nix 动态 derivations,用 applicative 与 monadic 类比说明传统构建图必须预先可知,而动态 derivations 把 bind 从求值器下移到调度器,使构建中可继续生成新 .drv。作者以掷骰子为例:step 掷 d6,非 6 则生成 passthrough 并递归 depth+1,6 则终止并输出深度,涉及 builtins.outputOf、content-addressed derivation 与 recursive-nix。约 900 次实验得到链长均值 6.18、中位数 4、最长 46,与几何分布吻合。文章指出当前 --dry-run 等工具无法内省动态图,并讨论 Mario 模拟、状态空间搜索和爬虫等超出 lang2nix 的用法,同时留下图深度与规模边界未知的问题。
推荐收录:文章不是泛泛介绍 Nix 新特性,而是用类型系统和调度层差异解释动态 derivations 的根本变化,并给出可运行示例、实验数据和可迁移的搜索/爬虫等场景。适合构建系统、开发者工具和编程语言实现方向的读者,能帮助理解增量/动态依赖图的代价与当前工具链局限;主要风险是动态 derivations 仍属实验特性,文中 --dry-run 不可用等结论需结合版本验证。
工具笔记 Netflix TechBlog 2026/09/18
Netflix JVM 生态团队介绍 ja 及其可组合命令行工具集(jig、jfmt、jist、jdocserver),目标是让 Java 模块系统成为项目描述的完整载体,并提供现代 CLI 和面向编码代理的开发体验。文章把模块描述符扩展为包含依赖版本、主类、访问授权等元数据,并用 Maven Central 的命名空间与约定为模块建立可验证坐标,解决大量自动模块和传统 classpath 项目的命名发现问题。工具层面强调可组合、可进程内运行,并通过 module-info.hash 持久化哈希保证依赖完整性,同时把注解处理显式化为可审查的代码生成步骤。作者主张所有 Java 项目都应模块化,鼓励库作者发布显式模块。当前 ja 仍为预览,工具稳定性和生态迁移成本需要后续验证。
推荐收录,因为文章不只是发布预告,而是给出了 Java 模块化工具链的具体设计:模块描述符承载依赖与授权、Maven 命名空间映射、哈希完整性校验、注解处理显式化等。适合 Java 平台/构建工具开发者、依赖管理与 Agent 工具链实践者参考;其中关于 classpath 技术债和模块命名/安全边界的讨论可迁移到其他语言生态。风险是 ja 仍处预览,细节可能变化。
技术文章 Daniel Lemire 2026/09/16
文章介绍 C++23 新增的 std::flat_map:它用排序的 key 向量与 value 向量实现,查询为二分查找,可借助 std::sorted_unique 直接接管来自磁盘或网络的两个数组,也支持有序插入、批量 insert_range 和批量构建。作者在 GCC 16.1、-O3 -march=native 的 Intel Xeon 单核上,与 std::map 对比随机逐个插入、有序插入、批量构建和随机查找。结论是:约千级规模下 flat_map 可优于或接近 map;但随机逐个插入百万、千万级 key 时性能呈二次增长,极不适用。有序插入、批量构建和随机查找在大规模下明显更快,主要得益于连续内存布局和更低存储开销。适用边界是读多写少、可批量构建或有序写入的场景,不适合频繁随机单点插入。
推荐收录,因为文章给出了具体基准数据、实现机制和与 std::map 的读写复杂度边界,能直接支撑 C++ 容器选型判断。适合关注性能优化、标准库数据结构和系统编程的读者,尤其可迁移到读多写少、批量构建或序列化场景的取舍分析。主要风险是结果依赖编译器版本与硬件,但作者已说明测试环境,结论边界清晰。
技术文章 Oxide Public RFDs
Oxide RFD 400 系统讨论 async Rust 的取消安全与取消正确性。作者把取消安全定义为单个 future 的局部属性,把取消正确性定义为系统级全局属性,并梳理 select!、timeout、try_join、task abort、runtime shutdown 等取消来源。文章给出库作者和调用方的处理模式:拆分复杂操作、reserve permit、恢复部分进度、协作式取消、避免 tokio::sync::Mutex、用后台任务隔离 cancel-unsafe 操作,并以串口代理、installinator、write_all_buf 等案例说明取舍。结论是取消安全没有银弹,需结合 Tokio 语义和业务边界逐案验证。
正文以 Oxide 控制面开发中的真实问题为背景,系统定义 cancel safety/cancel correctness,并给出 select!、timeout、try_join、task abort 等取消源和 reserve、部分进度恢复、协作取消等可迁移模式,还附多个生产案例。适合编写或评审异步 Rust 服务、库 API 与分布式控制面的工程师;主要风险是结论依赖 Tokio 语义和 Oxide 场景,迁移到其他 runtime 或业务时需重新验证。
技术文章 Oxide Public RFDs
本文是 Oxide 的 RFD 463,描述用于查询和加工机架遥测数据的领域特定语言 OxQL。oximeter 采集硬件与软件指标并存入 ClickHouse,OxQL 以表、时间序列、字段和数据点为核心模型,支持 gauge、cumulative counter、delta 与 histogram,并在读取 cumulative 数据时自动转为 delta,以便对齐、聚合和连接。语言采用 Unix 管道式表操作(get、filter、align、group_by、join)和子查询,配合字面量、比较/逻辑运算符及 EBNF 语法定义。文档强调自研 DSL 的理由:现有 SQL 和各类指标查询语言不适配时序数据且集成成本高。其边界是目前不支持 raw cumulative 选择和 outer join,且作为发布后不再更新的规范,主要面向 Oxide 内部与用户文档。
推荐收录。该 RFD 不是新闻或营销稿,而是完整给出了 OxQL 的设计动机、数据模型、语法定义、示例和查询语义,包含 cumulative 到 delta 的自动转换、对齐/分组/连接等可迁移概念。适合做可观测性、时序数据库、DSL 或后端查询系统的读者参考。注意其内容与 Oxide 机架和 ClickHouse 强绑定,且 RFD 声明发布后不再更新,迁移时需结合具体数据模型取舍。
工程实践 Oxide Public RFDs
该 RFD 讨论 Oxide 控制平面使用 Rust async/await 三年后暴露的任务取消安全问题:Future 在 await 点被 drop 或 task 被 abort 时,内部状态会被丢弃,可能导致互斥锁在保护的不变量恢复前释放。作者用同步 Mutex 与 tokio Mutex 的对照示例复现状态机不变量被破坏,并列出 Dropshot 请求处理、tokio::select!、timeout、try_join 等取消来源。文章指出 tokio 对 cancellation safety 的说明零散且不完整,编译器无法检查,审计成本高。短期内通过让 Dropshot handler 独立成 task 缓解,长期需讨论是否迁移同步线程模型或制定取消安全规范。该文不提供完整解决方案,重点在界定问题、风险与取舍边界。
推荐收录,因为它以 Oxide 真实控制平面 bug 为例,给出可复现的同步/异步 Mutex 对照代码,并系统梳理任务取消安全的来源、风险与 FAQ 取舍。对使用 Rust 构建分布式后端、维护长期控制面或评估 async 架构的读者,文中的 await 点不变量、取消传播和短期缓解策略具有直接迁移价值;需注意它聚焦问题界定,不提供完整解决方案。
技术文章 Daniel Lemire 2026/09/09
文章以 C11 线程与 stdatomic.h 引入原子变量与内存序。它先解释数据竞争与编译器/硬件重排的原因,再区分 relaxed、acquire 与 release 语义,指出 release 与 acquire 分别配合“我完事”和“确认别人都完事”。通过引用计数写时复制数组的例子,展示 naive 代码会造成泄漏或双释放,并给出用 atomic_fetch_sub 与 acquire fence 的完整实现。最后谈到 threads.h 在不同平台的可用性,以及 x86/ARM 上 acquire-release 的成本差异。目标是让读者理解原子操作与内存序的实用边界。
推荐收录。文章以可运行的示例逐步揭示 C 并发中易被忽视的内存序细节,而不仅是罗列语法;其引用计数释放的完整纠错过程对编写共享资源和锁无关代码很有价值。适合需要深入理解 C 内存模型、或在使用引用计数的系统库中避免数据竞争的读者,也可作为后续探讨 acquire/release 语义的入门材料。
工程实践 Trail of Bits Blog 2026/09/09
Trail of Bits 披露了 Lean 4.33.1 及之前版本中的一项严重 bug,可通过制造矛盾来让 Lean 认可 Fermat 大定理的“证明”。根因是 `String.Pos.Raw.extract` 在极大位置上的逻辑定义与原生求值不一致:前者返回空串,后者返回整个原始字符串。这种不一致可推出空串等于非空串,一旦得到矛盾,任意命题都可被证明。文章认为这不是内核 soundness 问题,而是 `native_decide` 引入了编译器这一额外信任边界,并建议验证外部证明时使用 `#print axioms`。Lean 团队快速修复了内存问题并最终解决语义不匹配,展示了对证明工具可信性的持续加固。
推荐收录。本文以真实漏洞为例,清晰揭示了形式化证明工具中逻辑求值与原生求值不一致造成的信任边界问题,填补了普通资料对 `native_decide` 风险的讨论不足。适合使用 Lean 做证明、依赖机器检查结果的研究者与安全工程师;文中发现问题的思路及验证证明的正确方法具有很强的可迁移性与警示价值。
技术文章 LWN.net 2026/09/08
文章介绍了 Rust 语言中 "never" 类型(以感叹号 ! 表示)的稳定化过程。该类型用于标记永不返回的函数以及其他永远不可能产生值的场景,长期以来它只是编译器内部功能,属于不稳定特性。直到 2024 年 8 月 24 日,Rust 编译器贡献者 "waffle" 经过两年多的工作终于将其稳定化。过程耗时较长,部分原因是该特性涉及对旧版本 Rust 的一个小的破坏性变更,编译器维护者需要确认这不会对大量实际代码造成影响。文章还涉及类型强制转换、编译器演进、版本兼容性处理等细节,有助于理解 Rust 类型系统的演进路径和语言特性稳定化背后的工程权衡。
推荐收录,这是一篇来自 LWN 的权威技术报道,直接解释了 Rust never 类型的设计意图与稳定化过程中遇到的版本兼容性挑战。适合作 Rust 开发者、编程语言设计者和编译器爱好者阅读,其中关于破坏性变更评估和跨版本兼容的经验也可迁移到其他系统的长期演进中。
技术文章 The Consensus - Articles 2026/09/06
文章以 C 和 Go 为例解释数据竞争定义,并指出 ThreadSanitizer(TSan)文档不足、实现已到 v3。作者用 Python 实现理想化的多线程 C 子集解释器,再接入 FastTrack 风格向量时钟作为竞态检测器,展示 TSan 的大致原理。随后通过可复现实验说明 TSan 的资源预算盲区:255 线程槽、14 位同步释放计数、每 8 字节 4 个访问单元都可能溢出,导致漏报明显竞态;Go 的 sync.Pool 地址哈希复用也会掩盖竞态。结论是 TSan 仍很有价值,但无报告不等于无竞态,使用者需理解其适用边界。
推荐收录。文章不是泛泛介绍竞态,而是通过自建解释器和检测器、C/Go 可复现实验,直接展示 TSan 在 255 线程、计数器、访问槽和 sync.Pool 上的漏报机制,证据具体且可迁移。适合使用 C/Go 并发、维护 CI 竞态检测或研究动态分析工具的读者,能帮助建立“无报告≠无竞态”的判断,并指导压测与人工复核。
科研议题 Max Bernstein 2026/09/04
这篇博客由 CRuby 编译器团队成员撰写,围绕新论文《Support Local Variables》介绍了 ZJIT 编译器如何处理 Ruby 局部变量的复杂语义。ZJIT 是继 YJIT 之后的新方法级 JIT,基于 SSA 的高层中间表示,并带多个全局/局部优化 pass。与其他 Ruby 编译器的处理方式不同,ZJIT 直接将局部变量提升为 SSA 值,而不是继续使用内存读写或依靠部分求值恢复 SSA。文章指出 Ruby 局部变量的动态语义在正确性和优化上都有不少陷阱,并总结了作者在 ZJIT 中的解法;该论文也是首篇正式记录 ZJIT 的学术文献,发表在 VMIL 2026。博文本身是论文的摘要与背景介绍,完整的实现细节仍需查阅引用的 PDF。
这是来自 CRuby/YJIT 团队的一手技术分享,明确给出了 ZJIT 的定位、SSA 表示和局部变量优化的设计选择,并有论文和学术发表作为支撑。适合编译器实现者、语言设计者和虚拟机研究者阅读,可借此理解动态语言局部变量在 SSA 化时的语义难点,以及一种不同于内存标量替换的方法。由于博文篇幅有限,实际优化细节和边界在 PDF 中,阅读时应以论文为主,避免仅凭摘要下结论。
技术文章 matklad 2026/09/02
文章从回复一封关于“内存安全最难题”的邮件切入,讨论 use-after-free 与类型混淆的本质区别。作者用订单匹配引擎的 bug 说明:在没有对象池时,逻辑错误会变成物理类型混淆,可被利用为任意代码执行;引入类型隔离的对象池后,逻辑错误仍可能发生,但不再产生类型混淆。随后介绍两个来自 TigerStyle 的务实技巧:静态分配,即启动时确定最大容量并拒绝超额请求,避免运行期 OOM 导致灾难性故障;恒定工作量,即用“保留订单”填满固定数组,让每个订单只是状态流转,并通过全量遍历保证延迟平稳、便于编译器优化。文章还指出内联枚举是上述方案的破坏点,若始终堆分配枚举变体则可恢复。最后强调这些技巧有适用边界,不是万能解药。
推荐收录。文章以具体 bug 出发,把内存安全从类型混淆问题拆解为可工程化的设计约束,提出类型隔离分配、静态分配和恒定工作量等可迁移模式。适合系统程序员、语言设计者和高并发后端工程师参考;其对灰色失败和向量化性能的讨论体现了边界与取舍,风险在于这些模式并非适用所有场景。
技术文章 Amazon Science 2026/08/31
本文介绍 Verus——一个开源的 Rust 自动化程序验证器,它通过形式化数学规格机械地检查代码在所有可能输入下是否满足规格,从而弥补 Rust 类型系统只能保证内存安全、无法保证逻辑正确性的不足。文章以二分查找为例,说明了前置条件(requires)和后置条件(ensures)的写法,并强调 Verus 使用 Rust 风格语法,开发者可在源码中直接编写规格和证明,编译器会忽略这些注解,因此验证与未验证的代码可共存。Verus 还支持验证 unsafe 代码的机器检查安全性,以及通过锁不变量证明并发代码的正确性,Amazon 已将其用于 Nitro Isolation Engine 等关键基础设施。此外,文章列举了 Vest、Verdict、CapybaraKV、Atmosphere、Anvil、CortenMM 等开源验证项目,并指出验证结论的可靠性依赖于 Verus 自身、顶层规格、底层运行时假设和工具链的正确性。整体上,文章清晰解释了程序验证的机制、设计权衡与实际应用边界。
文章不是泛泛介绍,而是系统性地说明了 Verus 的验证原理、源码内嵌规格的设计抉择、对 unsafe 和并发代码的支持,并给出了真实用例与验证依赖的边界条件,具有长期参考价值。适合 Rust 开发者、系统软件工程师及对形式化方法感兴趣的读者,能帮助理解程序验证在工业界的实践方式和限制。
工程实践 ScyllaDB Engineering 2026/08/31
本文记录 ScyllaDB 驱动团队自研 Rust 与 C# 异步 FFI 框架的过程,目标是在 C# 驱动之上复用 Rust 驱动。作者认为现有 uniffi-rs、csbindgen 等绑定生成器缺少异步互操作支持,故选择基于 C ABI 手工实现。文章详述双向调用:C# 调用 Rust 用 P/Invoke,Rust 回调 C# 用 UnmanagedCallersOnly 和静态委托;异步场景通过 TaskCompletionSource 与 Task Control Block 桥接 tokio 和 .NET 运行时,并说明 RunContinuationsAsynchronously 对避免 tokio 线程饥饿的关键作用。数据传递使用 FFISlice、FFIString、FFIBool 等布局兼容类型,规避 bool 表示不一致问题;内存管理分别采用 SafeHandle、GCHandle 和栈固定。该方案针对特定驱动场景,性能评测另文发布,本文贡献主要在异步运行时桥接和跨语言内存安全的工程经验。
推荐收录,因为文章不是泛泛的互操作教程,而是真实项目中的设计取舍与踩坑记录,包含 P/Invoke、反向 P/Invoke、异步运行时桥接、跨语言内存管理的具体实现和边界。对需要做 Rust/C# 集成、语言绑定或异步运行时协作的工程师很有借鉴价值,其中的 GCHandle 用法、tokio 饥饿规避、栈固定等技巧可迁移到类似场景;但它是为数据库驱动定制的框架,不是通用库,读者需结合自身约束评估。
技术文章 Go Blog 2026/08/26
文章介绍Go 1.27新增的泛型方法(generic methods),允许在具体类型的方法上使用类型参数,从而扩展了Go 1.18泛型的能力。作者以链表和映射方法为例,展示了泛型方法如何更自然地进行链式调用、保持本地作用域,并减少对包级泛型函数的依赖。文章详细解释了为何泛型接口方法无法实现:接口值分派面对跨包编译时无法预知所有实例化,而Go的实例化方式会生成大量专用代码,只能通过装箱方案避免但会引入间接调用开销。最后说明Go选择支持具体方法的类型参数,同时明确不支持泛型接口方法。文章还讨论了方法表达式、实例化规则以及接口实现与泛型方法的微妙关系。
推荐收录,因为这是官方对语言新特性的权威说明,不仅介绍语法用法,还深入解释了设计决策背后的编译原理和工程权衡,对Go开发者编写通用库或理解语言演进具有长期参考价值。适合关注Go语言发展、系统编程或语言设计的读者,文中的实例化与接口分派分析也可迁移到其他泛型语言的设计理解中。
工程实践 DuckDB Engineering Blog 2026/08/25
文章介绍 DuckDB Java 客户端新增的纯 Java 表函数能力,允许开发者将任意 Java 可访问的数据源注册为 SQL 表,从而在单节点上完成跨远程系统与本地文件的异构查询,无需导出或中间表。作者以 MongoDB 为例,通过 DuckDBFunctions.tableFunction() 注册 mongo_query 函数,并详细说明 bind、init、apply 三个回调:bind 声明输出列,init 打开游标,apply 将数据按 2048 行向量块写入结果。文章强调该方式复用官方 Java 驱动、过滤条件下推到源端,且避免了原生扩展的构建与 JVM 崩溃风险。同时明确当前限制:表函数无法打包为 DuckDB 扩展,只能在 Java 客户端内使用;bind/init 对象生命周期需手动管理;STRUCT、LIST 等复合类型尚未支持。
文章来自 DuckDB 官方工程博客,提供了完整的表函数生命周期实现示例、与本地文件的交叉连接演示以及清晰的局限性说明,属于有深度且可直接迁移的工程实践。适合需要在 JVM 环境中将既有 Java SDK 或 JDBC 数据源接入 DuckDB 的工程师,可避开 C++ 扩展开发,降低维护风险。注意该 API 仍在演进,使用前应确认当前版本对生命周期管理和复合类型的支持。
技术文章 Eli Bendersky 2026/08/22
本文是并发服务器系列第8篇,聚焦Go语言。作者先实现串行服务器,再展示goroutine每连接一协程的模型,说明其轻量级和M:N调度。为应对计算密集、下游限流和恶意客户端等场景,演示用有缓冲channel做信号量限制并发,以及worker pool模式。文章比较了Go与async/event-driven,指出Go底层已用事件循环,goroutine天然适合高并发。示例代码刻意简化,缺少协议帧和整数溢出等边界处理。提供从简单到受控并发的完整代码路径。
本文是Eli Bendersky并发服务器系列的高质量续篇,直接对比多种并发模型并给出可运行Go代码和量化比较。适合后端、网络编程及对并发设计感兴趣的读者,帮助理解goroutine的资源特征、限流模式和worker pool取舍。文中对何时限制并发及Go异步底层的辨析,可迁移到其他语言和系统设计中;但示例代码为演示简化,需注意边界条件。
个人心得 Armin Ronacher 2026/08/22
文章是资深开发者Armin Ronacher对LLM时代编程语言选择与开发方式变化的观察。作者指出,LLM使学习新语言的摩擦大幅降低,语言选择不再受程序员既有知识限制,反而更易受市场营销影响。他以自己的Rust经验为例,提到越来越多项目选择Rust、Zig等'硬语言',如Cloudflare Artifacts采用纯Zig Git引擎并编译成100KB WebAssembly,Vercel推出Zig编写的小型快速编码agent fx,这些项目多数借助LLM辅助。同时,作者观察到开发者开始尝试DWARF、eBPF、自定义网络驱动、自定义加密等过去被视为禁区的底层技术,部分是因为AI降低了门槛。文章最后认为,这种趋势可能走向两极:更多'垃圾'代码,也有更多开发者追求快速、小巧的软件。作为个人随笔,文章缺乏系统论证和数据支持,但提供了AI影响开发文化的一手视角。
推荐收录。这是来自资深开发者的观察随笔,捕捉了LLM降低语言门槛后,开发者更敢选'硬语言'和硬核技术的趋势。文中的具体例子(Cloudflare Artifacts、Vercel fx)和作者作为Rust程序员的亲历视角,对想了解AI辅助开发对编程生态影响的人有启发。虽然作者未给出严谨分析,但其观点揭示了语言选择和底层技术普及的新动态,具有时代参考价值。
技术文章 matklad 2026/08/21
文章由rust-analyzer作者撰写,围绕低内存Rust LSP服务Rust Glancer展开,深入反思了rust-analyzer的架构设计。作者认为rowan语法树适合增量编辑,但大多数依赖包只需浅层分析,主张AST应基于数组存储,并对函数体分析采用惰性策略。文中对比IntelliJ的PSI多后端(语法树、stub树、class反编译)与rustc的.rmeta文件,提出类似的分层架构:用户编辑的文件用增量AST,依赖包用紧凑的元数据。还讨论了proc macro展开成本高,可借用Sorbet的shim思路规避,以及LSP数据同步的固有缺陷。最后点明rust-analyzer核心抽象API未完成的问题。这是对IDE工具链架构的深度思考。
推荐收录:作者是rust-analyzer核心开发者,文章直接给出IDE架构的关键权衡,如AST存储、惰性分析、依赖元数据复用,以及对IntelliJ/rustc机制的迁移分析。适合编译器/IDE开发者、编程语言工具链研究者阅读,其“分层源码表示”思路可迁移到其他语言工具。风险是部分观点属个人倾向,需结合工程验证。
技术文章 matklad 2026/08/20
文章质疑“标准库应最小化还是包罗万象”的传统争论,提出真正的问题是“怎样的社会架构才能产生高质量标准库”。作者对比 Python、Go、Rust 的生态现实:Python 标准库质量参差,但提前暴露 API 反而推动了数据科学革命;Go 通过 golang.org/x 扩展生态保留设计余量;Rust 1.0 集合与迭代器 API 堪称典范,但后续新增 API 的效率有限,nursery 沦为墓地。作者认为决定性因素不是库的大小,而是语言生态中的组织结构、决策机制和激励方式。这是基于编译器与语言生态经验的思辨性随笔,缺乏量化数据,但提供了新的分析视角。
这篇文章从社会架构角度重新定义标准库设计问题,用 Python、Go、Rust 的具体案例支撑论点,避免了空泛的“大小之争”。适合编程语言设计者、开源项目维护者和软件架构师阅读,其分析框架也可迁移到其他开源生态的治理决策中。虽为例证式随笔,但观点鲜明、边界清晰,具备长期参考价值。
技术文章 Daniel Lemire 2026/08/19
本文介绍在 C# 中利用 AVX-512 指令集实现超高速解析 IPv4 地址的方法。作者使用掩码加载安全读取长度不超过 16 字节的字符串,并处理 UTF-16 编码带来的零字节,再通过点号定位和点积校验快速识别数字。利用 IPv4 地址只有 81 种合法点位置的特点,结合字节重排优化。对非标准地址或未支持 AVX-512 的处理器则回退到 IPAddress.TryParse。实测在 .NET 10 和 Intel Xeon Gold 6548N 上,标准库需要 45.3 纳秒/个,新方法仅 14.1 纳秒/个,约快 3 倍。文章提供完整代码,但只覆盖常见的点分十进制 IPv4,且依赖较新硬件。
直接证据是文中给出了可运行的 AVX-512 C# 代码和详细的基准测试,速度提升约 3 倍,且步骤明确、边界清晰。适合需要处理海量日志、网络包或持续解析 IPv4 的性能敏感型开发者,以及希望学习 .NET 向量化编程的读者。其掩码加载和 UTF-16 处理思路可以迁移到其他短文本解析任务,但代码复杂度较高且受 AVX-512 硬件限制,需要在实际项目中权衡。
技术文章 Daniel Lemire 2026/08/15
文章以Go语言的内存分配机制为背景,对比栈分配和堆分配的成本差异。堆分配需要回收管理,且Go中返回指针或逃逸变量时也会进入堆分配。Go的堆分配器按尺寸类(8字节、16字节等)取整,并带有额外开销。作者指出Go 1.27以前所有堆分配都走通用函数,1.27开始对小于80字节的小对象使用专用分配路径,以减少函数调用和尺寸类查找。基准测试显示,16字节且含指针的节点分配从9.5ns降至5.5ns,提速约1.8倍。文章同时说明该优化仅对大量小对象分配的程序有效,并非所有负载都能受益。
推荐收录。文章用可复现的基准测试直接量化了Go 1.27小幅优化带来的分配性能提升,并解释了栈/堆分配原理与尺寸类机制,内容深入且边界清晰。适合关注Go性能调优、运行时分配或做性能评测的开发者阅读;其“用小路径替换通用路径”的优化思路也可迁移到其他语言的性能设计。需注意结论限于小对象分配场景。
技术文章 Eli Bendersky 2026/08/15
文章是“Concurrent Servers”系列第7篇,聚焦Rust语言实现并发网络服务器。作者先回顾了顺序服务器基准,然后给出Rust中“一线程一客户端”和固定线程池的实现,说明如何用crossbeam_channel实现多消费者任务队列和背压。随后重点介绍基于tokio的异步事件驱动服务器,对比了同步与异步版本代码,指出Rust将异步核心语法内建、但事件循环交给外部库的设计,并讨论阻塞任务在异步上下文中的问题。文章还实现了带Redis缓存的异步素性测试服务器,展示共享异步连接的克隆式传递以及async/await对复杂回调的简化。最后总结Rust异步编程仍面临函数颜色问题和阻塞/非阻塞分离的挑战,所有代码可在GitHub获取。
推荐收录。该文是知名系列中针对Rust的深入补充,不仅展示代码,还解释了线程池、背压、tokio任务、函数颜色问题等关键概念及其边界,适合想理解Rust并发服务端实践的读者。文中的线程池与异步设计对比、阻塞任务处理方式等可迁移到其他语言或框架,具有长期参考价值。
技术文章 Phil Eaton - databases
本篇文章是“用 Go 从零写 SQL 数据库”系列的第一篇,目标是实现支持基本的 CREATE、INSERT、SELECT 命令和交互式 REPL 的最小数据库。作者从词法分析入手,设计 lexer 将输入转换为 token,依据 PostgreSQL 规则处理数字、字符串和标识符,并用 longestMatch 解决关键词前缀冲突;然后定义 AST 模型与递归下降解析器,分别解析三种语句。最后实现内存后端,用 map 存储表,以二进制表示 INT、字节串表示 TEXT,完成建表、插入和查询功能。文章给出完整代码与运行示例,并附测试,边界明确:仅支持单表基础操作,无持久化、事务和复杂表达式,适合初学者理解数据库与解析原理。
推荐收录,因为文章以可运行的 Go 代码完整展示了一个最小 SQL 数据库的词法分析、语法分析和内存执行流程,技术细节具体、步骤清晰,并配有测试样例与后续系列链接。适合想了解数据库内部机制、解析器实现或 Go 语言实践的中级读者,文中的 lexer/parser 组织方式和内存存储结构可直接迁移到其他小型解释器或教学项目。
技术文章 Phil Eaton - databases
本文是《Writing a SQL database from scratch in Go》系列第二篇,在首篇基础上为 gosql 增加二进制表达式与 WHERE 过滤。作者扩展 AST 加入 binaryExpression,采用 Pratt parsing 处理运算符优先级和括号;重构内存后端,让每个表达式针对表行求值。求值器支持标识符、数字/字符串/布尔字面量以及算术、比较、逻辑等运算符,并明确不进行隐式类型转换。SELECT 语句新增 WHERE 条件逐行过滤,投影列可通过表达式计算,文中给出 REPL 交互示例。该实现目前只支持单表、简单运算符,并依赖内存存储,是教学性质的 SQL 引擎骨架,尚未涉及索引、连接等真实数据库特性。
推荐收录,因为文章完整展示了在 Go 中实现 SQL 解析与求值的过程,包含 Pratt 解析器、AST 设计、表达式求值和内存表数据流,且代码与解释同步。适合对数据库内核、编译原理或解释器实现感兴趣的读者,可作为手写 SQL 引擎的参考起点。其可迁移价值在于解析器优先级处理和行上下文求值框架可复用于其他小型语言或查询引擎,但需注意示例省略了类型强制转换、优化和持久化等生产特性。
技术文章 Phil Eaton - databases
文章是 Phil Eaton “从零用 Go 写 SQL 数据库”系列的第四篇,主题是让自制数据库 gosql 实现 Go 标准库 database/sql 驱动接口。作者展示了如何注册驱动、实现 Driver/Conn/Rows 等接口,以及如何将已有的解析、执行和结果处理逻辑封装到符合 database/sql 规范的 API 中。文中以具体代码说明 Open、Query、Next、Columns 等方法的实现要点,并明确指出当前版本不支持参数化查询、事务和预处理语句,仅处理第一条语句。最终通过一个使用标准 sql.Open 查询数据的示例验证了驱动的可用性。文章篇幅较短,重点在于解释接口契约与底层映射。
推荐收录,因为它以清晰代码展示了如何为自制数据库实现标准 database/sql 驱动,对理解 Go 数据库驱动接口的契约和低层数据流转有直接帮助。适合需要为自研存储系统提供标准 SQL 接入、或想学习 Go database/sql 内部机制的开发者。文章明确承认不支持参数化、事务和预处理,边界清楚,便于读者判断适用范围。
技术文章 Phil Eaton - databases
文章调查了 Cockroach、ClickHouse、DuckDB、PostgreSQL、SQLite、MySQL/MariaDB、MongoDB、TiDB 等系统如何执行查询表达式。作者通过阅读核心源码并以控制流函数为判断依据,区分了树遍历解释器、栈/寄存器虚拟机和 JIT 编译三类实现。结论显示多数数据库仍采用树遍历解释器,PostgreSQL 与 SQLite 使用虚拟机,MongoDB SBE 为栈式虚拟机,部分系统支持 JIT;ClickHouse、DuckDB、TiDB、Cockroach 还采用向量化执行。文章认为向量化和 JIT 更契合列存分析负载,事务系统迁移到编译器架构的收益未必显著;局限是结论来自源码阅读,可能存在误判且缺少性能基准。
本文通过大量数据库源码调查,给出了表达式执行模型的一手判断,具有长期技术索引价值。适合数据库内核开发者、查询引擎研究者以及想理解解释器与虚拟机差异的读者。其源码判断方法可直接迁移到其他系统,但需注意结论为静态阅读而非基准验证。
技术文章 Phil Eaton - databases
文章详细展示了如何在 PostgreSQL 的 PL/pgSQL 中从头实现一个类似 Forth 的栈式解释器。作者首先介绍 Forth 语言的基本概念,然后逐步实现数据栈、程序计数器、条件分支(IF/THEN)、内建指令(DUP、SWAP、算术运算等)以及函数定义(DEF)和调用(CALL)机制,并通过 hstore 扩展存储函数入口位置,使用返回指针栈处理嵌套调用。最终通过运行递归斐波那契函数验证了解释器的正确性。文章还指出了实现中的一些 PL/pgSQL 特性限制,如数组长度处理、NULL hstore 合并等问题。该实现仅为 Forth 的子集,未涉及完整 Forth 的诸多特性,但足以展示在受限的数据库过程语言中构造解释器的可行方法。
推荐收录,因为文章提供了一个完整可运行的 PL/pgSQL 解释器实现,包含逐步代码解释、设计取舍和实际运行验证,不是简单的语法介绍或新闻转述。适合对 PostgreSQL 内部过程语言、解释器构造或栈机器实现感兴趣的读者。其可迁移价值在于展示了在资源受限且语法特殊的嵌入式语言中实现编程语言核心机制的方法,对理解解释器原理和数据库编程均有启发,技术主题长期有效。
技术文章 Phil Eaton - databases
本文介绍用 Zig 编写一个最小 RocksDB 嵌入式键值数据库示例,封装 C API 实现 set、get 和基于前缀的 list 命令。作者先说明 RocksDB 以 C++ 编写但提供 C API,便于其他语言集成;随后逐步展示如何在 Zig 中用 @cImport 导入头文件,定义 RocksDB 包装结构,并调用 rocksdb_open、put、get 及迭代器接口。文中重点解释了 Zig 的类型系统和互操作细节,包括 error 类型缺陷、可选指针、C 字符串到切片的转换,以及匿名结构体在跨函数返回时的类型不兼容问题。最后给出 Linux 上的编译步骤、build.zig 配置和命令行运行结果。该示例仅适用于 Linux 与 Zig 0.10.x,RocksDB C API 文档不足,需参考头文件和测试代码。
文章提供了完整可运行的 Zig 调用 RocksDB C API 的最小示例,系统解释了 Zig 的错误处理、可选指针、C 字符串转换及构建配置,直接证据充分。适合希望学习系统编程语言与 C/C++ 库互操作、或集成嵌入式 KV 存储的开发者。可迁移价值在于 FFI 模式和 RocksDB 基础用法,但需注意 Zig 版本(0.10)与当前版本存在差异。
技术文章 Phil Eaton - databases
文章展示了如何在 Zig 语言中用约 1700 行代码实现一个基于 RocksDB 的嵌入式 SQL 数据库。作者将项目拆分为词法分析、语法分析、存储层和执行层,详细讲解了每个组件的设计,包括手写 lexer/parser 支持 SELECT、INSERT、CREATE TABLE 等语句,以及如何用 RocksDB 持久化表元数据和行数据。文中还介绍了 Zig 的内存管理(Arena allocator)、数据序列化方案和表达式求值。该实现仅支持极小的 SQL 子集,无主键、事务和索引,主要用于学习数据库内部原理和 Zig/RocksDB 的实践,而非生产用途。
推荐收录,因为文章提供了完整可运行的代码实现和逐步讲解,清晰展示了从 SQL 解析到键值存储映射的完整流程。适合对数据库内部实现、Zig 语言或 RocksDB 感兴趣的开发者阅读,可迁移价值在于理解手写 lexer/parser 的实践、内存管理策略以及嵌入式数据库的架构设计。主要风险是项目功能有限,但作为教学参考具有长期价值。
技术文章 Phil Eaton - databases
本文是一篇面向 PL/pgSQL 初学者的实践教程,从基础函数定义、命名参数、OUT 参数和递归函数入手,逐步过渡到字符串与数组操作、自定义复合类型,最终实现一个能解析 JSON 对象子集的词法分析器和语法解析器。作者强调目标不是生产级代码,而是熟悉语言特性,因此明确排除了嵌套对象、数组、Unicode 和小数等复杂场景。文中给出了完整可运行代码、测试脚本和错误处理示例,展示了如何利用 PL/pgSQL 的内置 SQL 函数、数组操作和自定义类型完成命令式编程任务。
推荐收录,因为文章不是简单罗列语法,而是通过实现字符串转数组、递归斐波那契和 JSON 解析器三个递进式例子,让读者理解 PL/pgSQL 的函数声明、控制流、复合类型和错误处理机制。对需要在 PostgreSQL 中编写存储过程、触发器或复杂业务逻辑的开发者来说,文中的代码模式和调试方法具有直接参考价值,且作者对语言边界和适用场景的说明清晰克制。
技术文章 SelectDB 技术分享
文章系统介绍 Apache Doris 的 Python UDF 功能,旨在让 SQL 直接调用 Python 生态以应对 AI 和实时分析中日益复杂的业务逻辑。核心方法是通过 Arrow RecordBatch 批量传输数据到独立 Python Server 执行,并支持 Pandas Series 向量化计算,减少跨语言和跨进程开销。Doris Python UDF 完整支持标量 UDF、UDAF 和 UDTF,提供内联与 ZIP 模块化加载方式,并内置进程隔离、复用和自愈机制以保证生产环境稳定性。文中给出支付风险分级和金额分桶等示例,展示在数据不离开分析链路的情况下完成规则判断、特征加工和模型打分。该能力已在 SelectDB 商业化产品中提供,适合需要将 Python 逻辑嵌入实时分析查询的场景,但部署前需在所有 BE 节点配置 Python 环境并安装 pandas/pyarrow。
本文对 Doris Python UDF 的设计机制、使用方式和生产化保障做了完整阐述,包含 Arrow 批量执行、向量化优化和故障恢复等关键细节,而非泛泛介绍。适合数据库内核开发者、数据工程师和需要在 SQL 引擎中集成 Python 生态的读者,可迁移到其他分析型数据库的扩展机制设计,帮助理解如何平衡灵活性、性能与可运维性。
工程实践 Max Bernstein 2026/08/13
本文介绍了一种在编译器中间表示(IR)中实现 canonicalize 传递的方法,用于通过类型保护重写合并冗余的 GuardType 指令。作者首先描述了一个块局部的版本,该版本在每个基本块内重映射操作数,使后续的常量折叠能消除多余的检查。随后,作者基于支配树实现了全局版本,通过在支配树中沿支配者向下级联重写来扩大优化范围,并讨论了慢速但易于验证的实现策略。文章进一步扩展该传递,当块是条件分支的目标时,在 rewrite_map 中预先填入条件变量的真假常量,使分支体得以了解其条件值,从而简化 30k_ifelse 等基准中的分支链。作者还提到该传递可能需要常量驻留来保证幂等性,并说明了其依赖 SSA 最小化传递的效果。文章以具体代码和 PR 为证据,展示了编译器优化开发中的工程取舍与实证验证。
推荐收录,因为文章详细记录了一个现实编译器中的优化实现过程,既有算法伪代码,又有对支配树、SSA 形式、常量驻留等底层概念的透彻解释。编译器开发者或编程语言研究者可以从中学习如何设计传递以利用支配关系传播类型信息,以及如何在正确性和性能之间做工程取舍。文中所探讨的块局部与全局重写级联技术,以及条件分支信息播种方法,均具有较强的可迁移性。
技术文章 Niko Matsakis 2026/08/10
文章由 Rust 语言核心设计者 Niko Matsakis 撰写,介绍 Rust trait 系统中长期存在的循环 trait 实现问题。作者从动机出发,区分了“内部证明”与“外部证明”两种概念,并通过贴近真实 Rust 的例子说明循环 trait 如何影响语言的一致性与表达能力。作为系列博文的开篇,它旨在为后续深入的技术探索和可能的 RFC 设计铺路,重在建立问题背景和抽象模型,而不是给出实现方案。
收录推荐。作者是 Rust 语言设计的权威,对循环 trait 的解析具有长久参考价值,尤其适合语言设计者、编译器开发者以及希望理解 trait 系统深层次约束的 Rust 用户。文中提出的“内部/外部证明”视角为思考类型系统中的循环依赖提供了可迁移的思维框架,有助于理解类似语言特性的设计取舍。
工程实践 Stanford Hazy Research 2026/08/06
本文以编写 CUDA megakernel 的经验为起点,提出 AI 编程智能体正在取代传统软件抽象层的认知卸载功能。作者回顾了去年依靠 C++ 抽象管理复杂性的痛苦,以及今年借助 agent 直接将不完整的提示转为优化代码的实践,由此预言 CUDA DSL 等抽象层即将退役。文章进一步讨论代码库角色的迁移:精确的代码库变得脆弱,而模糊但可传递的意图提示更适应智能执行器;信任将更多放在规约、测试和不变量等 oracle 上,而非实现细节。同时,作者也指出抽象层作为共享验证面、知识传递手段仍具价值,且专家经验在此转型中不可或缺。全文核心观点是抽象会退役,但领域知识永存。
推荐收录,因为本文不是泛泛而谈的未来预测,而是基于真实 megakernel 工程演进提出的具体论证,提供了从认知外包到代码生命周期重估的完整视角。适合关注 AI 辅助系统编程、DSL 设计与软件工程演化的研究者与工程师,可迁移的思考在于如何重新权衡代码、测试与意图描述在智能工具介入后的角色。
工程实践 Fzakaria Blog 2026/08/06
文章探索了利用Nix语言的惰性求值特性,将属性路径转化为Super Mario Bros. 3的按键输入序列。作者通过将每次按键操作定义为独立的派生(derivation),并使每个派生依赖前一帧的快照作为输入,从而实现了游戏状态的懒加载与增量构建。Nix store实际上充当了模拟器快照历史的持久层,分支或追加操作只需计算增量部分。文章还分析了递归深度限制(默认约2400次按键)、内核命令行参数长度限制(21,845次按键)以及构建时间线性增长等实际约束,并提出了通过文件输入绕过限制的方案。该工程案例展示了Nix派生机制在游戏状态机中的创意应用,但主要用于技术演示,性能开销较大。
推荐收录,因为这不是简单的技术玩梗,而是深入展示了Nix惰性求值、派生依赖和内容寻址存储的底层机制。文章提供了细致的基准测试和限制分析,对理解Nix的运行模型和扩展能力很有启发。适合对Nix或函数式构建系统感兴趣的工程师,其将输入序列拆分为可复用的派生单元的思想可迁移到其他需要增量构建或状态机复现的场景。
技术文章 matklad 2026/08/06
本文深入解析Zig语言标准库`std.Io.Threaded`的实现,重点介绍其如何在阻塞线程模型中可靠支持取消操作。作者先区分并发与并行,指出取消是并发的本质特征,而传统线程因系统调用阻塞难以取消。然后详细说明在POSIX上通过信号与共享内存标志位协作的取消协议,以及Windows上使用`NtCancelSynchronousIoFile`的更直接方式。文章还对比了Java线程中断和`pthread_cancel`的不足,并分析Zig在接口层面将`async`与`concurrent`分离的设计优势,从而在用户态实现清晰的取消语义。内容深入系统调用、运行时和语言设计的交界,展示了将一个“怪异”想法工程化落地的细节,但方案依赖特定平台机制,且线程池复用等工程权衡未充分展开。
推荐收录,因为本文不是泛泛介绍Zig特性,而是对并发取消这一底层难题给出具体实现解析,从信号/标志位协议到接口设计取舍均有清晰论述,并提供了跨平台对比。适合系统编程、语言运行时和并发模型设计者阅读,其按平台中断syscall的思路以及分离异步与并发的接口设计可供其他语言或框架参考。
科研思考 Stanford Hazy Research 2026/08/05
文章深入探讨了AI代理(agents)对传统软件抽象层的冲击。作者以自身经历对比:去年编写megakernel需要构建C++抽象层来管理复杂度,今年借助代理可直接从模糊提示生成目标优化代码,消解了对抽象层的依赖。由此提出CUDA DSL等抽象层正走向退休的观点,认为当智能执行器能填补意图中的缺口时,精密但脆弱的代码库可能不再是唯一的知识载体。同时指出抽象层不仅是认知卸载工具,也是共享接口和测试复用的基础,消除后会带来验证挑战。文章最终强调,虽然抽象可能过时,但领域知识、不变量和测试等核心思想将保留,知识传递的方式则从代码转向提示和神谕。全文适用于对AI辅助编程、编译器设计和软件演化感兴趣的读者,但结论基于作者深厚的领域经验,对初学者和不明确神谕的领域可能不直接适用。
收录理由:文章提出了一个前沿且深刻的工程哲学命题,将AI代理与编译器抽象、代码库价值等经典概念结合,提供了可迁移的思考框架。适合关注AI如何影响系统软件开发、编程语言设计和工程实践的读者,对重新评估抽象层和代码资产具有启发性。
工程实践 LWN.net 2026/08/03
文章回顾了文档转换器 Pandoc 二十年的发展历程,从最初仅支持几种格式的简单 Markdown 转换器,到如今支持超过五十种文档格式并被数百万台计算机安装的开源工具。作者 John MacFarlane 讲述了项目起源、技术选型(如选择 Haskell 的理由及其影响)、解析器架构的演进(从老式解析到新式解析器),以及性能优化与正确性权衡。还分享了社区建设、长期维护的挑战与经验,包括商业支持与资金模式。文章指出,Pandoc 的成功源于持续改进、实用主义设计和对用户需求的关注,但也坦言 API 稳定性等未完全实现的目标,为开源维护者提供了真实案例。
推荐收录,因为这不是简单的功能介绍,而是作者从二十年亲身实践中提炼出的工程决策与开源维护经验,涵盖技术选型、架构权衡、性能取舍和社区建设。对从事开源工具开发、文档处理系统或函数式编程实践的读者都有直接参考价值,其关于长期项目可持续性的思考可迁移至类似工程场景。
技术文章 Cloudflare Blog 2026/08/03
文章介绍Cloudflare Workers RPC系统如何基于Cap'n Proto实现JavaScript与Python之间的跨语言透明远程调用。核心机制是利用Pyodide的FFI自动转换基本类型,并通过workers-runtime-sdk包将Web API对象(如Request、Response)映射为原生Python类型,使开发者无需定义模式或序列化格式即可传递对象、函数和流。文中以Pygments调用为例展示实践,并说明异常传播、参数转换等细节。该方法依赖Workers平台与Pyodide环境,类型转换受限于结构化克隆和代理机制,不适用于所有跨语言场景。
收录理由:该文展示了跨语言RPC的工程实现与类型系统桥接策略,对多语言分布式系统开发者有直接参考价值。其透明类型转换理念可迁移至其他类似环境,但需注意其强依赖Workers平台。适合关注服务集成、多语言协作的工程师阅读。
技术文章 Daniel Lemire 2026/08/02
文章对 C++26 标准库新增容器 std::hive 进行了性能基准测试,并与 std::vector 和 std::list 在插入、遍历、删除和内存占用等方面进行对比。实验使用特定编译器、硬件和测试数据,测量了纳秒/元素、指令数和周期数。结果显示 hive 的插入成本约为 vector 的两倍,遍历速度与链表相当且远慢于 vector,主要因跳过字段和缺乏自动向量化;但在元素删除和内存占用上优于 list。作者指出 hive 不是更快的 vector,而是提供了稳定引用和常数时间删除的更好 list。该基准测试为 C++ 开发者在选择容器时提供了具体的性能参考,但结论受限于合成负载和单一硬件平台。
推荐收录,因为文章提供了针对 std::hive 的详细基准测试,用数据揭示了其与 vector 和 list 的性能差距和原因(如指令开销、缓存局部性、自动向量化影响),并给出了实际使用建议。适合 C++ 系统编程和性能优化场景的读者,可帮助他们在需要稳定引用与快速删除时做出容器选择,且评测方法论可迁移至其他数据结构的性能对比。
工程实践 Fzakaria Blog 2026/07/30
文章记录了在Nix包管理器中实现从源代码自举构建OpenJDK的完整过程,通过移植Guix的bootstrap链(jikes、GNU Classpath、JamVM等),从零开始逐步构建出OpenJDK 7至25,脱离了对预编译二进制JDK的依赖。作者详细对比了Nixpkgs传统依赖二进制seed与GuixPkgs全源代码构建的闭包差异,量化了引导额外引入的876个推导项,并指出共享的C++工具链占据闭包主体。该工作展示了可复现构建在持久化软件供应链中的进展,同时也揭示了当前JDK自举对特定历史工具链的依赖和构建环境的复杂性。
推荐收录,因为本文不是简单的工具介绍,而是提供了真实的工程方案和可复现的构建链细节,包括从jikes到OpenJDK 25的19次完整构建过程及闭包分析。适合关注可复现构建、软件供应链安全或Nix/Guix生态的开发者,文中的自举策略和依赖分析手法可直接迁移到其他编译型语言的自举实践中。
工具笔记 Simon Willison 2026/07/28
文章介绍了 uv 0.12.0 中 uv init 命令的破坏性变化:默认由在根目录生成 main.py 改为使用 src/ 布局,并集成 uv_build 构建后端以支持构建 wheel 和 tar.gz 分发包。作者通过对比 0.11.x 和 0.12.0 的 uv init 输出目录结构,展示了具体差异,并提及已建立自动化快照仓库跟踪变更。作者坦言因惯性尚未在个人项目中采用 src 布局,但认为现在正是切换时机。文章简洁明了,主要面向 Python 开发者,说明工具新版本的默认打包最佳实践,适合新建项目或升级时参考。
推荐收录,因为它记录了 uv 这一重要 Python 工具链中打包默认行为的重大变更,直接提供了前后对比证据,帮助开发者理解社区布局标准化趋势。适合 Python 开发者升级工具或规划新项目结构时参考,可迁移用于改进项目打包配置,避免与新默认行为冲突。
技术文章 LWN.net 2026/07/28
文章介绍了gccrs项目在2026年上半年以编译Linux内核为目标所取得的进展。通过针对内核crate进行测试,开发团队在属性处理、名称解析和资源管理等领域发现并修复了多个问题,显著提升了生成正确代码的能力。尽管目前编译器仅能处理简单的独立程序,但项目报告显示未来数月有望快速改善。文章基于项目周报和月报,呈现了编译器前端开发中遇到的具体技术挑战和解决过程。
推荐收录,因为它详细记录了将Rust前端集成到GCC中的工程实践,特别是针对Linux内核编译的具体适配工作和问题解决。这些内容对编译器开发者、Rust for Linux贡献者以及关注系统工具链进展的读者具有直接的参考价值,其中属性处理、名称解析等问题的解决思路可迁移至类似项目。
技术文章 Max Bernstein 2026/07/28
文章详细介绍了 Ruby 的 ZJIT 编译器中内联器(inliner)如何通过方法内联优化块(block)调用,从而提升性能。作者首先回顾了 Ruby 解释器中块的工作机制,随后解释 JIT 编译器如何通过类型特化来优化方法调用,并指出核心库方法(如 Array#each)因多态块调用导致优化困难。ZJIT 采用将 callee 的代码内联到 caller 中的方式,利用调用上下文将动态的 invokeblock 转换为直接的块调用和循环,消除了间接调用开销。文章展示了内联前后 HIR 的变化与微基准测试结果(如 cfunc_itself 达到 35 倍加速),并说明当前块内联尚未完全实现,内联阈值等参数仍在调优。适合对编译器设计、JIT 优化和 Ruby 运行时性能感兴趣的读者。
本文深入剖析了 ZJIT 内联器的设计动机、实现细节和实际收益,通过具体示例和基准数据展示了如何解决动态语言中块调用的优化难题。它对编译器开发者、语言虚拟机工程师和关注 Ruby 高性能优化的从业者具有直接的参考价值,其中基于调用上下文的代码重组思路也可迁移到其他 JIT 系统。
技术文章 Mitchell Hashimoto 2026/07/22
文章倡导所有开发者了解 SIMD(单指令多数据流)并破除其过于复杂的迷思。作者以 Zig 语言为例,展示了一套通用的五步模式来将标量循环向量化:广播常量、按向量宽度迭代、执行向量操作、归约向量结果、处理标量尾部。通过终端模拟器 Ghostty 中查找控制字符的真实案例,详细解释了每步的实现细节和寄存器位运算。文章还讨论了编译器自动向量化的局限性,强调手动编写 SIMD 可以在可预测的情况下获得显著性能提升,同时指出该方法主要适用于大量连续数据的处理场景,对于复杂算法则需更高技巧。整体内容清晰、可迁移,降低了 SIMD 的入门门槛。
本文以易懂的案例和通用模板系统讲解了 SIMD 的基本模式,适合希望提升循环密集型代码性能的软件开发者。其提出的五步法具有高度的可迁移性,能帮助读者跨语言理解向量化思维,避免过度依赖容易失效的编译器自动向量化。对于日常优化中处理扫描、比较、计数等任务的工程师,本文是一份低门槛、高回报的入门参考。
技术文章 matklad 2026/07/20
文章聚焦于内存安全领域最棘手的问题:带标签联合体(tagged union)的类型混淆。通过Zig代码实例演示了初始化联合体为一种类型、获取内部指针,再覆盖为另一种类型,导致指针类型与实际数据不匹配,违反类型安全。指出类似问题也存在于Ada,构成典型反例。文章进一步区分理论难点与实际攻击面,强调实践中缓冲区溢出远比联合体混淆常见,但早期行业未采纳更安全的数组语法是重大失误。整体上,通过历史视角和代码实证,探讨了语言设计如何影响内存安全性,边界在于未深入讨论类型混淆在现代漏洞利用中的实际威胁。
推荐收录,因其以简明代码和参考文献直指内存安全的一个底层难题,纠正了常见认知。对从事系统编程、语言安全或编译器设计的读者,此文提供了可迁移的反例分析和历史教训,有助于理解类型系统与安全性的深层关联。其价值在于将复杂问题具像化,并引导读者反思语言设计决策。
工程实践 Alex Chan 2026/07/18
作者在整理本地媒体库字幕并统一为WebVTT格式时,遇到UTF-8字节顺序标记(BOM)导致SRT转换异常的bug。文章先解释BOM的原理及其在UTF-8编码中的具体字节序列,然后展示BOM与序列号混合导致解析失败的现象。修复方案从最初手动检测和移除,优化为利用Python的encoding="utf-8-sig"自动跳过BOM,使转换代码回归纯净。对于已经生成的错误文件,作者使用ripgrep结合字节模式(?-u:\xEF\xBB\xBF)搜索文件中的BOM,并通过脚本批量清理,最后用ripgrep和Git仓库双重验证修复结果。整个过程串联了字符编码知识、工具选择和验证手段,是典型的文本处理工程调试案例。
推荐收录,因为该案例通过一个真实的文本编码陷阱,展示了从原理理解到优雅修复的完整路径。文中提供的utf-8-sig编码技巧和ripgrep字节搜索模式可直接迁移到其他处理多编码文件的场景,尤其适合需要处理外部数据来源的开发者。同时,它强调了理解底层细节对快速定位问题的重要性,对提升工程调试能力有实际参考价值。
工程实践 知乎 - NGINX洪志道 2026/07/14
文章以 Nginx 上 Lua Web API 的开发为例,介绍了如何利用 AI 辅助编程实现 Request、Response 和 Headers 对象。核心方法是统一对象模型的设计模式:通过 create(创建骨架)、get(取出 C 结构体)和 fill(填充数据)三个独立职责,解耦对象定义、数据来源和跨语言访问,确保 Lua 与 C 两侧的一致性。作者强调 AI 更适合在清晰的设计约束下快速复制正确模式,而人负责确定模型和边界。文章还讨论了 AI 在加速理解系统和生成代码方面的价值,以及如何在迭代中提升代码质量。结论是“人设计,AI 实现”能平衡效率与质量,但需要较强的设计能力来引导,且 AI 初始输出需人工审校。适用场景包括跨语言系统开发、嵌入式脚本扩展等,不足在于对设计者能力要求较高。
推荐收录,因为文章不仅展示了 Nginx/Lua 跨语言对象管理的具体工程实现,还提炼出可复用的 create/get/fill 设计模式,并提供了人机协作的实践边界。对于需要开发嵌入式脚本接口、处理跨语言对象生命周期,或希望利用 AI 提升编码效率的工程师,文中模式可以直接迁移,协作理念也具有长期参考价值。
技术文章 Trail of Bits Blog 2026/07/13
文章宣布Trail of Bits在Testing Handbook中新增Rust安全测试章节,系统介绍了用于验证Rust程序安全性的工具和技术。内容首先概述Rust安全保证的边界与未尽问题,然后深入动态分析领域,包括使用Miri检测未定义行为、proptest属性测试、覆盖率测量和变异测试等。接着阐述静态分析工具Clippy的深度用法及推荐lint。此外,还总结了从审计实践中积累的陷阱清单,如操作符优先级差异,并提供了内存清零的三种方案。最后,介绍了专用工具如模型检查器Kani和供应链依赖审查方法。文章旨在为开发者提供一个全面的Rust安全测试流程,但内容为概述,具体细节需参考完整手册章节。
此文系统梳理了Rust安全测试的工具链和最佳实践,从动态分析到静态分析再到供应链安全,覆盖全面,且融入了审计实战经验。适合Rust开发者、安全工程师和注重代码质量的团队参考,可帮助识别常见安全陷阱并集成多种测试方法。虽然文章为概述,但提供了清晰的指引和资源链接,可迁移性强。
工程实践 Simon Willison 2026/07/08
本文详述了Bun从Zig全面重写为Rust的过程,核心驱动是内存管理难题(如use-after-free、double-free)和崩溃导致的维护负担。作者借助Claude驱动的AI代理,利用TypeScript测试套件作为一致性验证,通过动态工作流、对抗性代码审查和流程修复机制,在11天内自动化完成了百万行代码的移植,并已平稳运行一个月。文章展示了代理工程在超大规模代码迁移中的完整工作流程,包括成本($165K API消耗)、质量保障和实际效果,也讨论了语言选择从单向决策变为可逆决策的范式转变,但强调该方法高度依赖高质量测试套件和大量模型输入。
推荐收录,因为该案例系统展示了利用前沿AI模型进行超大规模代码重写的完整实践,从动机、方案设计、自动化执行到质量控制和上线验证,证据链完整。尤其适合关注AI工程化、编程语言迁移、测试驱动开发或开源项目维护的读者,文中关于一致性套件驱动、流程修复而非手工修代码的理念具有很强的可迁移性,但需注意其成功依赖高质量测试资产和充足的模型交互预算。
技术文章 Random Oracle 2026/06/30
文章延续 QCC(Quining C Compiler)的话题,讨论如何把“单文件 C 程序变成 quine”的能力扩展到多程序循环。作者先构造一个基础链路:C 程序生成 Python 程序,Python 再打印出 C 源码,并说明关键前提是把任意字符串稳定转成可执行的目标语言程序,尤其要处理引号、换行和 Unicode 等转义问题。随后文章展示如何把链路继续扩展到 Rust,并指出理论上可继续叠加更多语言,但会受到行长与转义开销的限制。进一步地,作者把目标从“只会打印源码的程序”推广到保留原有业务功能的程序对,通过预处理宏或运行时文本切片从合并源码中裁出 A/B 两个版本,使它们既能执行原功能,也能按条件输出对方源码。文章最后总结这种构造可推广到多个程序,形成任意两两可达的完整图,但也坦承预处理方案会带来大量死代码,运行时裁剪会更干净。
推荐收录,因为文章给出了从单个 quine 到多程序 quine loop 的明确构造路径,包含字符串转目标语言程序、源码拼接、条件编译和可扩展性限制等直接证据。适合关注编程语言、自指程序、源到源转换和编译技术的读者,且其中关于宏裁剪与运行时裁剪的权衡具有可迁移价值。
技术文章 LWN.net 2026/06/30
文章介绍了 Rhombus 这门新的编程语言,核心目标是把 Racket 级别的宏/元编程能力,与更接近 Python 的简洁语法和更实用的标准库默认值结合起来。作者先回顾 Lisp 系语言在元编程上的优势,以及传统括号语法在日常开发中的可读性门槛,再说明 Rhombus 试图通过新语法降低使用宏的心理成本。文中重点讨论了它如何让宏更自然地融入普通代码,而不是只服务于语言黑客或研究场景。文章也指出,这类设计的价值在于提升语言可扩展性,但其长期成功仍取决于生态、工具链和社区接受度,而不只是语法是否“更像 Python”。
推荐收录,因为文章直接围绕“元编程能力如何在普通语言中可用”这一长期主题展开,并给出了 Rhombus 结合语法与宏系统的具体思路。适合关注语言设计、宏系统、DSL 或可扩展语法的读者参考,其可迁移价值在于理解“表达力、可读性与可扩展性”之间的取舍。
工程实践 知乎 - NGINX洪志道 2026/06/28
文章梳理了 NGINX 脚本化能力的演进脉络:从早期 Perl、SSI,到作者参与的 njs、QuickJS,再到自己尝试的 nginx-lua-web,说明 NGINX 一直在扩展可嵌入脚本运行时。核心论点是,这个新项目不想让用户直接面对 NGINX 的 body filter 等内部概念,而是提供更接近纯 Web 运行时的编程体验。作者进一步比较了 OpenResty 常用的 LuaJIT 与官方 Lua,认为后者在当前版本中性能、GC、稳定性和工程可用性已经足够,且更适合做 C 程序的嵌入式胶水语言。为提升易用性,文章还借鉴了 JS Web APIs,强调用 fetch 等标准接口降低脚本门槛。整体更像一次结合 AI 编程实践的工程选型记录,但其中部分关于版本演进和生态判断带有作者经验视角,适合与实际需求一起审视。
文章直接给出了 NGINX 脚本化路线、官方 Lua 选型和 Web API 设计的工程理由,不是泛泛而谈。适合做嵌入式脚本运行时、Nginx/OpenResty 生态或 AI 辅助开发实践的读者参考;但其中对 LuaJIT/官方 Lua 的结论带有作者立场,具体迁移前仍需结合基准测试验证。
科研议题 美团技术团队
文章介绍了美团开源的定理证明模型 LongCat-Flash-Prover,核心目标是让模型从“能给出答案”走向“能生成可由 Lean4 严格验证的证明”。作者将形式化推理拆成自动形式化、草稿生成和证明生成三类原子能力,并结合工具集成推理、混合专家迭代、课程学习式轨迹合成与 RL 训练,构建出一套面向形式化数学的训练与验证框架。文章同时给出 MiniF2F-Test、ProofNet、MathOlympiad-Bench、PutnamBench 等基准结果,并讨论了模型在证明中可能出现的“作弊”行为及其规避方法。
推荐收录,因为它不只是发布一个模型,而是系统讲清了形式化定理证明的任务拆解、数据合成、工具反馈、训练稳定性和评测边界,具有很强的方法论价值。对做大模型推理、自动证明、形式化验证或工具增强学习的读者,都能直接借鉴其中的框架设计与风险控制思路。
技术文章 LWN.net 2026/06/22
这篇文章围绕 Python 的 free-threaded 版本展开,系统回顾了移除 GIL 的动机、相关历史、当前实现状态以及它对 Python 运行时和生态的影响。文章不仅解释了为什么要推进无 GIL,还讨论了这一变化在并行执行、兼容性、扩展模块支持和后续演进上的现实边界,因此适合作为理解 CPython 运行时演化的重要参考。
推荐收录,因为它提供了对 Python 核心运行时演进的结构化梳理,而不是停留在“去掉 GIL”这一结论层面。对于关注解释器实现、并发模型、C 扩展兼容性和语言未来方向的读者,这篇内容有较强的长期参考价值。
技术文章 Racket Blog 2026/06/22
这篇文章围绕 Rhombus 1.0 正式发布,系统解释了这门新语言为什么存在、它要解决什么问题,以及它与 Racket 的关系。核心论点是:Rhombus 试图在“对日常开发友好的常规语法”与“像 Racket 一样强的可扩展性/宏系统”之间取得平衡,并进一步补充了类、模式匹配、静态信息、命名空间组织等语言层面的改进。文章还通过 FAQ 和示例程序说明了它的适用场景、性能定位和生态现状,边界是它仍处于较年轻阶段,库生态和成熟度不如主流语言。
推荐收录,因为它不是单纯的版本发布,而是把一门语言的设计目标、语法哲学和可扩展性机制讲得很清楚,对理解编程语言设计、宏系统与语言生态构建都有长期参考价值。对于关注语言实现、DSL、元编程或 Racket 生态的读者,这篇文章能提供可迁移的设计视角和判断框架。
工程实践 Jane Street Tech Blog 2026/06/15
这篇文章讨论了 Jane Street 如何利用 OxCaml,在 OCaml 与 Python 之间实现类型安全的引用计数与对象共享机制。文章聚焦跨语言互操作中的内存管理、所有权和生命周期约束,核心价值在于把“容易出错的运行时协议”提升为可由类型系统约束的工程方案。它特别适合关注多语言系统、FFI 设计、运行时安全和高可靠工程实践的读者。
推荐收录,因为它不是泛泛介绍 OCaml 或 Python,而是围绕跨语言内存管理这一高风险工程问题给出可复用的方法。文章的价值在于展示如何借助类型系统降低引用计数和对象互操作中的错误概率,对做 FFI、运行时或系统语言工程的人都有参考意义。
技术文章 Eli Bendersky 2026/06/14
这篇文章以 Pluggy 为案例,系统拆解了 Python 插件系统的关键机制:hook 的定义与实现、基于 setuptools entry points 的自动发现与注册、hook 调用的结果聚合与顺序控制,以及插件与宿主之间的 API 边界。作者还将 Pluggy 映射到“插件基础设施”的通用概念框架中,讨论它适合解决什么问题、提供了哪些额外能力,以及在何种场景下未必值得引入依赖。
推荐收录,因为文章不仅介绍了一个具体库的用法,还把它放进更通用的插件系统设计问题里分析,具有跨项目迁移价值。对于需要设计可扩展架构、理解 Python 插件生态或评估是否自研插件框架的读者,都很有参考意义。
科研议题 Amazon Science 2026/06/10
这篇文章介绍了 AWS 将 EC2 的隔离核心拆分为独立的 Nitro Isolation Engine,并用 Isabelle/HOL 对其进行形式化验证,从而为虚拟机隔离提供数学级别的正确性保证。文中重点解释了验证对象的边界、规格与证明的关系,以及如何分别处理功能正确性、内存安全、运行时错误和机密性/完整性等性质;还介绍了 μRust、分离逻辑、最弱前置条件和非干扰等关键方法。文章的价值在于,它不仅展示了一个可落地的商用云形式化验证案例,也清楚说明了这类证明适用的前提、复杂度和局限。
推荐收录,因为它把“形式化验证如何进入商用云基础设施”这件事讲得很完整,既有系统边界设计,也有证明方法和安全性质定义,具有很强的长期参考价值。对做操作系统、云基础设施、安全隔离和程序验证的读者来说,这篇文章能直接提供可迁移的建模与证明思路。
学习路线 知乎 - NGINX洪志道 2026/06/04
文章围绕“主流编程语言该怎么选”展开,但核心并不是语言排行榜,而是帮助读者建立对语言、运行时和软件工程之间关系的整体认知。作者用 C、JavaScript、PHP、Python、Go、Java、Rust 等语言为例,解释了编译与解释的直观差异、脚本引擎与宿主程序的关系,以及不同语言分别解决的工程问题和代价。文章最后强调:语言只是入门工具,真正决定长期成长的是对系统运行、架构边界、复杂度控制和性能问题的软件工程能力。
推荐收录,因为它不是单纯的语言推荐帖,而是把语言选择、工作场景、长期成长和软件工程素养放在同一框架里讨论,适合刚入行和正在转方向的读者参考。文章对“工作语言”和“个人成长语言”的区分、以及从语法走向运行时和系统理解的路径,具有较强的迁移价值。
技术文章 Max Bernstein 2026/06/03
这篇文章系统梳理了动态语言 JIT 和多种编译器中的内联启发式,重点讨论“何时内联”比“如何内联”更难。作者从代码体积、编译时延迟、缓存压力、递归、调用深度、调用频率、调用上下文和 profile 传播等维度,比较了 Cinder、PyPy、V8、JavaScriptCore、SpiderMonkey、HotSpot、.NET、Dart、ART、HHVM 等实现差异,并补充了机器学习、部分内联和 AOT 信息辅助等研究方向。文章的结论是:内联本质上是一个全局收益与局部预算之间的权衡问题,启发式设计必须结合目标运行时、可观测性和分层编译策略。
推荐收录,因为它不是泛泛而谈“内联能提速”,而是把多个真实编译器/JIT 的决策规则、预算约束和调用上下文处理方式放在一起比较,长期参考价值很高。对做编译器、语言运行时或性能优化的读者来说,这篇文章能直接提供可迁移的启发式设计框架和调参视角。
技术文章 Max Bernstein 2026/06/01
这篇文章记录了作者如何用 Z3 验证一段 JIT 生成的分支less 汇编条件,目标是证明 `FIXNUM_MIN / -1` 这一溢出特殊情况的判定与原始 C 逻辑等价。文章不仅说明了 Ruby fixnum 在二进制补码下的边界行为,还展示了如何把等价性证明转成“寻找反例”的 SMT 问题,并通过故意改错常量来验证脚本确实能抓到反例。
推荐收录,因为它把一个很具体的编译/JIT 边界 bug,抽象成了可复用的形式化验证流程,适合做低层代码正确性检查的参考。对做编译器、JIT、运行时或底层位运算逻辑的读者来说,这种“用 Z3 证明等价性”的方法具有很强的迁移价值。
学习路线 知乎 - NGINX洪志道 2026/05/16
这篇文章是一套面向零基础读者的编程入门课程设计,主张先用 Chrome Console 和 JavaScript 建立“代码会执行”的直觉,再围绕一个手机电量模拟案例,按顺序讲解语句、条件、循环、变量、表达式和函数六个最基础概念。作者特别强调以实践驱动学习:先跑代码、再改参数、再回看结果,并把“能自己写出类似小程序”作为真正学会的标准,而不是停留在概念背诵。
推荐收录,因为它不是泛泛谈“如何学编程”,而是给出了清晰的入门顺序、最小工具链和可执行的练习方法,适合真正从零开始的人建立第一层编程感知。它的可迁移价值在于把“先跑起来、再理解”的方法论抽象得很清楚,对其他语言和初学课程设计也有参考意义。
技术文章 Max Bernstein 2026/05/12
文章围绕编译器中的 static single information form(SSI)展开,重点讨论“partial SSI”这一更轻量的实现路径:不必完整实现复杂的 into-SSI / out-of-SSI 算法,而是可以在 SSA 构建阶段、或借助优化阶段已有的支配式重写机制,逐步插入和消除类型细化节点。作者用动态语言 JIT 的例子说明如何根据分支条件、guard 和对象形态推导更精确的类型信息,并进一步利用这些信息消除冗余操作、提升优化效果。
推荐收录,因为它不是泛泛介绍 SSA/SSI,而是把抽象的中间表示理论落到可实现的编译器工程路径上,清楚说明了如何以较低复杂度获得可用的类型细化能力。文章还讨论了适用边界、与完整 SSI 的差异以及 JIT/动态语言场景中的实现权衡,对编译器和运行时开发者都有长期参考价值。
技术文章 知乎 - 南山烟雨珠江潮 2026/05/10
这篇文章系统梳理了 C++ 标准网络库 std::networking 的最新提案方向,核心观点是:网络 I/O 更适合直接建立在 C++20 协程之上,而不是继续沿用 sender/receiver 的 std::execution 抽象。作者从性能开销、复合结果处理、编译时间、ABI 稳定性、学习曲线和生产部署等多个维度对比了两类方案,并详细解释了 IoAwaitable、io_env、Executor、any_stream 等设计如何继承并简化 Asio 的成熟思路。
推荐收录,因为文章不只是转述标准化动态,而是把 C++ 网络编程的关键设计分歧、工程权衡和迁移路径讲得非常完整,适合作为理解标准库网络化方向的长期参考。它对正在使用 Asio、关注 C++ 协程或评估异步 I/O 架构的读者都有直接迁移价值。
工具笔记 matklad 2026/05/08
文章围绕 Zig 的代码格式化工具 zig fmt,分享了两条实用经验:一是可以通过尾随逗号等语法细节“引导”格式化结果,而不是完全依赖格式化器猜测作者意图;二是数组字面量的首个换行位置会影响列式排版,从而可以控制每行容纳多少元素。作者进一步说明,这种可控的格式化方式适合在保持统一风格的同时保留少量人为布局选择,尤其适用于参数列表、命令行 argv 构造等场景。文章也隐含了一个更广泛的观点:优秀的格式化器设计不应只追求唯一答案,而应允许语法信号参与布局决策。
推荐收录,因为它不是单纯的工具使用小技巧,而是揭示了格式化器如何与代码结构协同工作的设计思路。对 Zig 使用者、编程语言工具链开发者以及代码格式化器实现者都有可迁移价值。
技术文章 matklad 2026/05/03
文章围绕 Zig 的错误处理机制,讨论如何在保留强类型错误码和简洁控制流的前提下,为失败路径添加足够的上下文信息。作者对比了显式 diagnostics sink、逐处 catch 打日志和基于 errdefer 的“最小可行错误上下文”三种方式,指出后者在脚本式代码中摩擦更低,但也会带来“错误被处理却先被记录”的副作用。文章进一步抽象出一个更一般的原则:正常路径负责累积上下文,错误发生时再把当前上下文物化出来,并追问这种风格需要怎样的语言特性支持。文章适合关注编程语言设计、错误处理模式和 API 可用性权衡的读者参考。
推荐收录,因为它不是单纯介绍 Zig 语法,而是在分析一种可迁移的错误上下文设计思路,并明确讨论了可用性、可读性和误报风险之间的权衡。对语言设计、库 API 设计以及需要处理失败路径的工程代码都具有参考价值。
技术文章 Eli Bendersky 2026/04/30
文章围绕“WebAssembly 是否算堆栈机”展开,作者认为这更多是术语争论:WASM 虽然主要通过栈完成运算,但同时提供了 locals,使其不像纯粹只能靠栈交换操作(如 dup、swap)的语言那样受限。作者用 Forth 中依赖大量 tuck/swap 的写法作对比,说明在复杂数据流下,WASM 通过命名局部变量能显著提升可读性。接着给出一个 add_to_byte 示例,比较折叠写法与线性写法,强调栈只是中间执行模型,程序员无需手工管理所有压栈出栈顺序。文章进一步通过 wasmtime 生成的 x86-64 代码说明,编译器会把重复读取同一 local 优化掉,最终代码与手写 C/汇编几乎一致。作者最后指出,WASM 对 locals 的不可别名性质让重复加载消除更容易成立,但这些结论仍依赖于没有对同一 local 的中途写入这一前提。
推荐收录,因为文章直接给出了 WASM 栈语义、locals 设计和编译后机器码的对应关系,并用真实反汇编证明了“多次读取 local 不会带来性能损失”。适合关注编程语言实现、虚拟机设计和编译优化的读者,具有较强的可迁移分析价值。
技术文章 matklad 2026/04/20
这篇文章用 Zig 实现了一个仅约 256 行的极简属性测试与模糊测试库,核心抽象不是常规 PRNG,而是“有限随机数生成器”FRNG:它预先接收一段固定熵字节流,并在熵耗尽时返回 OutOfEntropy。作者先在此基础上封装了 bytes、array、int、boolean、int_inclusive、range_inclusive、index 等生成器,再用 weighted 和 swarm_weights 组合出随机动作调度器,用于驱动一个模拟世界持续随机执行请求、消息和崩溃等操作。文章的关键观点是:测试复杂度可以由“消耗了多少随机熵”来度量,因此可以对已知失败样本按熵长度做二分搜索式缩小,找到更短、仍能触发失败的最小输入。为了处理断言崩溃无法在进程内捕获的问题,作者把被测程序作为独立进程,从 stdin 读取熵并以退出码判定成败,再用外部 driver 通过 seed+size 复现实验并搜索最小失败样本。文章强调这种方法不依赖对被测系统注入额外搜索知识,迁移性强,但也依赖测试能够稳定地以“随机输入 + 失败/成功”二值反馈来定义问题边界。
文章直接给出了可运行的 Zig 实现,展示了如何把属性测试、模糊测试和最小化失败样本统一到“有限熵”模型中,而不是停留在概念介绍。适合需要做 fuzzing、回归最小化、可复现实验或语言运行时/测试工具设计的读者参考,迁移价值在于方法本身与具体系统弱耦合。
技术文章 Max Bernstein 2026/04/04
本文系统讲解了编译器中的 value numbering:先从 SSA 中“同形表达式是否可复用”的问题切入,说明它如何用于公共子表达式消除,并区分纯操作与带副作用操作。作者给出局部 value numbering 的实现思路:用哈希表为指令建立值号,遇到已存在的等价指令就用 union-find/Assign 形式替换,从而在单个基本块内消除重复计算。随后文章把问题推进到全局 value numbering,重点解释了为何必须借助支配关系而不是简单按块遍历,以及在分支、汇合和循环中 phi 节点为何需要特殊处理。文章还讨论了内存相关指令的失效与转发,例如 Load/Store forwarding、跨块的 kill set 管理,并对 Maxine、ART、V8、HotSpot 等实现做了对照。最后作者补充了统一哈希表、value partitioning、scoped hash map、JIT 场景中的强度削弱等相关方向,指出该方法对重复纯表达式很有效,但处理副作用和循环时需要额外的可用性与失效管理。
推荐收录:文章明确覆盖了 value numbering、SSA、dominators、phi 处理、内存失效与 load/store forwarding 等关键机制,并给出 Maxine 等真实实现片段作为直接证据。适合编译器、JIT 和程序优化读者参考,迁移价值在于可直接借鉴其“哈希表+支配关系+失效管理”的分析框架;主要边界是它对复杂内存建模与循环优化仍是概述性质。
工程实践 Max Bernstein 2026/03/27
文章围绕 Ruby JIT 实现 ZJIT 如何借助 Perfetto 做性能诊断展开,核心目标是把“侧退出栈计数”这类静态统计,升级为能看时间分布、调用栈和热点聚集位置的可视化追踪。作者先说明仅靠 --zjit-stats 只能知道退出原因数量,却难以定位它们发生在哪些 Ruby 方法中、集中在启动期还是稳态阶段,因此需要引入 trace。随后通过 Perfetto 的时间线和 SQL 接口,把 slice 与 args 表关联起来统计退出原因和顶层方法,直接找到了 ActiveRecord 相关的 shape/type guard miss 热点。实现部分展示了如何导出 trace、为何 JSON 格式会膨胀到 8GB,以及改用更紧凑的 FXT 二进制格式和采样后将体积降到约 100MB。文章也提到还可以继续追踪编译阶段、代码大小、失效、分配和 GC 等事件,但当前结论依赖采样与单次基准,适合做定位和直觉建立,不适合替代完整性能评测。
文章给出了从计数器到可视化 trace 的完整落地路径,并用真实 JIT 热点证明 Perfetto 能直接帮助定位 side-exit 归因。适合做编译器、运行时和性能排障的参考,尤其对需要把追踪数据转成可查询、可视化分析流程的工程场景有可迁移价值。
技术文章 Go Blog 2026/03/24
文章深入解释了 Go 1.26 中类型检查器的“类型构造”和循环检测改进。作者先用简单的别名、切片、指针示例说明类型构造是一个深度优先的过程:只有依赖类型都完成后,当前类型才能变成 complete。随后文章引入递归类型,说明当类型构造返回 incomplete 类型时,许多依赖底层类型的检查必须延后到全部类型完成之后。接着作者用数组长度依赖 `unsafe.Sizeof` 的例子展示了“incomplete value” 与 downstream/upstream 运算符的区分,说明一旦值表达式会迫使对不完整类型做解构,就必须立即报 cycle error。最后文章概述了新的实现方式:在各类上游表达式处统一检查 completeness,阻止不完整值继续传播,并借此修复了旧算法中一些边缘崩溃问题,提升了编译器稳定性。
文章直接给出 Go 1.26 类型检查器的内部机制、错误边界和实现策略,不是泛泛而谈语言特性,而是可复用的编译器设计案例。适合编译器、语言实现和静态分析读者参考,尤其有助于理解递归类型、延迟检查与循环错误检测的通用思路。
技术文章 Go Blog 2026/03/10
文章介绍 Go 1.26 新版 go fix 中的 source-level inliner:它把函数调用按源代码层面展开,并通过 //go:fix inline 指令,让库作者为旧 API、重命名接口和类型/常量迁移提供“自助式”现代化方案。文中以 ioutil.ReadFile 迁移到 os.ReadFile、oldmath 包重构为例,说明 go fix 与 gopls 如何自动提示并批量改写调用点。作者进一步剖析了实现难点:参数消除、求值副作用顺序、可能在编译期失败的常量表达式、名字遮蔽、未使用变量以及 defer 作用域。文章强调该工具追求的是“可证明不改变语义”的整洁改写,因此在批处理场景会比人类更保守,甚至拒绝某些需要函数字面量包裹的情况。
文中直接展示了 //go:fix inline 的迁移用法,并系统解释了源级内联器如何处理语义边界,是理解 Go 代码改写与编译器式重构工具的可靠材料。适合做语言工具、重构引擎或 API 迁移方案的参考,但也要注意它在副作用和 defer 等场景下会刻意保守。
技术文章 Go Blog 2026/02/27
文章系统介绍 Go 编译器在切片分配上的栈化优化演进:从原先 append 扩容时频繁产生 1、2、4… 的堆分配和 GC 压力,到 Go 1.25 对小尺寸 make([]T,0,n) 的推测性栈分配,再到 Go 1.26 对 append 扩容场景也能先用栈上小缓冲、必要时再转堆。作者解释了返回切片等逃逸场景下,编译器如何借助 runtime.move2heap 把最终结果搬到堆上,同时尽量保留中间阶段的栈分配收益。文章还点明这些优化依赖切片最终大小、是否逃逸以及 32 字节等边界条件,并给出关闭优化的调试开关。整体上它展示了 Go 通过编译器与运行时协同减少分配、降低 GC 负担的具体机制与适用边界。
推荐收录,因为文章直接给出了 Go 1.25/1.26 在切片分配上从堆到栈、再到自动回迁堆的实现路径,属于可长期参考的编译器优化案例。适合关注 Go 性能、编译器和运行时协同的读者,也能帮助工程师判断哪些写法会触发或错过这些优化。
技术文章 Max Bernstein 2026/02/25
文章延续 Toy Optimizer 系列,讲作者如何为一个玩具编译器优化器构建模糊测试器,目标不是找崩溃,而是检出优化引入的语义错误。作者随机生成由 load、store 和 escape 组成的小程序,再用解释器在“无别名”和“完全别名”两种参数环境下执行,比较优化前后 heap 与逃逸结果是否一致。文中展示了这种不变量如何迅速暴露故意注入的错误:一旦去掉别名写回的关键逻辑,测试会几乎立刻失败并给出具体差异。作者也说明了局限性,例如只覆盖两种极端别名情况,且该等价定义不适用于会删除分配的优化。整体上,这是一个关于编译器优化测试、属性测试和语义 oracle 设计的实用案例。
推荐收录,因为文章给出了可复用的编译器优化 fuzzing 方案:随机程序生成、语义解释器和基于别名场景的正确性判定,而且能用最小反例迅速暴露优化错误。适合编译器、语言实现和测试工程读者参考;但要注意它的 oracle 依赖当前优化模型,不能直接套到会改变分配语义的场景。
工具笔记 Go Blog 2026/02/17
本文介绍 Go 1.26 中重写后的 go fix:它可按包模式批量应用现代化修复,支持 -diff 预览、按分析器选择性启用,并会跳过生成文件与不匹配的构建配置。作者用 minmax、rangeint、stringscut 和 newexpr 等例子说明,go fix 不只是修 bug,更是在把旧写法迁移到更新的语言/标准库习惯上,甚至能跨包替换“new-like”辅助函数。文章进一步解释了 go vet 与 go fix 统一到 Go analysis framework 后的架构:分析器、驱动、事实传递、gopls/staticcheck 等复用同一套基础设施。它也强调多次运行可产生协同修复,但仍可能出现语义冲突、未使用变量或需要手工处理的边界。最后提出“self-service”静态分析设想,希望未来能让第三方 API 和组织规则也像标准库现代化一样自动推广。
推荐收录,因为文章直接给出了 go fix 的使用方式、分析器机制和典型修复案例,证据充分且不是产品宣传。适合 Go 开发者、工具链维护者和静态分析作者阅读,其中关于批量重构、安全修复与分析框架复用的经验具有较强迁移价值。
技术文章 Max Bernstein 2026/02/16
文章延续 Toy Optimizer 系列,围绕加载/存储转发中的别名分析展开,先指出仅按偏移量划分 alias class 太粗,会把不同类型对象上同一偏移的访问误判为冲突。作者借鉴 type-based alias analysis,用类型层次树的前序/后序区间表示各 heap region,将“是否可能别名”转化为区间重叠查询,并在缺少类型信息时退化到 Any。随后又补充了对象来源、分配点、常量对象和已知内建函数副作用等更强的别名线索,用于局部保留或部分失效缓存的 heap 信息。文章还讨论了未知调用、逃逸对象与保守失效的边界,强调这种做法在 JIT 和受控语言中能以较低成本提升优化精度,但在通用 C-like 场景下需要更强的分析配合。
推荐收录,因为文章给出了从偏移量别名到类型层次 TBAA 的具体改造路径,还展示了与对象来源、内建副作用和未知调用的联动处理。适合做编译器、JIT 和语言运行时优化的参考,尤其对需要在精度与分析成本之间取舍的读者很有迁移价值。
技术文章 Max Bernstein 2026/01/22
文章讨论 ZJIT 在编译 Ruby 字节码时遇到的多入口控制流图设计难题。由于 Ruby 默认参数在调用时求值,编译器需要把默认参数逻辑放在被调函数内部,并同时支持解释器入口、JIT 入口和若干默认参数入口。作者展示了这种 HIR 设计如何让 SSA、RPO 遍历和 Cooper 风格支配树算法都变得别扭,因为图里不再存在唯一的起始块。文中系统比较了三种方案:保留特殊处理、合成超级入口块、或按入口复制整张 CFG,并说明复制方案虽然简单但会带来代码膨胀。最终更新里给出团队选择了 superblock/EBB 方案,接受了更复杂的 dominator 与 predecessor 处理,以换取更清晰的入口模型。文章的边界也很明确:结论主要适用于多入口 IR 设计,后续复杂分析仍需继续验证。
收录价值在于它不是泛泛谈“编译器设计”,而是拿真实的多入口函数 IR、支配树失配和三种可选方案做了具体权衡。适合编译器、语言运行时和 IR 设计读者参考,尤其是需要处理入口分裂、默认参数或多返回点的实现者。
技术文章 Max Bernstein 2025/12/30
文章系统梳理了 GDB 如何借助 JIT 接口恢复 JIT 代码的符号、函数名和行号信息,从而在断点、回溯和反汇编时避免大量“???”。作者先解释旧接口的工作流:JIT 在内存中生成一份包含 DWARF 的临时对象文件,再通过 __jit_debug_descriptor 和 __jit_debug_register_code 通知 GDB 读取。随后又介绍了新版自定义调试信息接口,说明 reader 需要实现的回调、匹配代码区间与帧信息的职责,以及目前各运行时的支持现状。文章还讨论了将 Linux perf map 复用到 GDB 的可行性、GDB JIT 链表导致的 O(n²) 问题,以及 GC/代码移动对符号稳定性的约束。整体来看,它不仅讲清了接口机制,也点出了工程实现中的性能与生命周期边界。
文中直接给出 GDB JIT 旧/新接口的调用链、reader 回调和典型坑位,是理解 JIT 调试基础设施的实用材料。适合做运行时、调试器或语言实现相关工作的读者参考,尤其能迁移到符号注册、代码生命周期管理和可观测性设计中。
工具笔记 Go Blog 2025/09/26
文章介绍了 Go 1.25 新增的 flight recorder:它基于执行 trace,但不再把全量数据写到文件或 socket,而是将最近几秒的 trace 缓存在内存中,等程序检测到故障时再一次性导出。作者给出 `MinAge`、`MaxBytes`、`Start/Stop` 与 `WriteTo` 的使用方式,并说明该机制特别适合长时间运行的 Web 服务。文中以一个 HTTP “猜数字”服务为例,展示如何在请求耗时超过 100ms 时触发快照,再用 `go tool trace` 查看时间线和 flow event。最终定位到 `sendReport` 中 `defer Unlock` 让锁持有时间被意外拉长,导致偶发长尾延迟。文章也明确了适用边界:它不是全量追踪方案,仍需合理控制内存预算和触发条件。
文中直接给出 flight recorder 的 API、配置参数、快照导出和 trace 分析流程,并用真实并发性能问题证明其定位价值。适合维护 Go 长运行服务、排查线上延迟和锁竞争的工程师,迁移价值在于“先留最近窗口、再按异常触发取证”的诊断思路。
技术文章 fasterthanli.me 2024/12/25
文章围绕 Rust 中 async fn in traits 的稳定化,回顾了 free function 和 impl 方法里的 async 早已成熟,但 trait 里长期缺位所造成的生态断层。作者解释了这一特性背后的关键难点,包括异步函数返回值难以直接命名、trait object 的对象安全限制,以及编译器如何把 async 代码降解为状态机。文章还对比了过去常见的 async_trait 宏方案与原生语法的差异,指出原生支持能减少样板代码、提升可读性,但并没有彻底消除 dyn 兼容、泛型边界和性能理解上的复杂性。整体上,它更像是一篇帮助读者跟上 async Rust 现状与迁移边界的技术梳理,而不是入门教程。
收录,因为文章直接围绕 async fn in traits 的稳定化展开,并明确讨论了状态机降解、对象安全和宏替代方案等关键技术证据,而非单纯功能播报。适合已在使用 Rust async 的读者,以及需要判断新特性迁移边界、理解原生语法与 async_trait 差异的工程场景。
工程实践 Datadog Engineering 2024/05/23
文章介绍 Datadog 团队将静态分析器从 Java 迁移到 Rust 的工程过程,核心目标是提升吞吐并降低内存占用。作者围绕旧实现的性能瓶颈、迁移后的实现方式,以及如何保持分析语义一致展开说明,属于一次以性能和资源效率为导向的重写。文中给出的结果很明确:迁移后性能提升约 3 倍,内存使用下降约 10 倍。它展示了在计算密集型开发工具场景中,语言迁移如何换取更好的成本曲线,但也意味着需要承担重写、验证和生态适配的代价。
收录依据很直接:标题和摘要都给出了从 Java 迁到 Rust 的具体改造目标,以及 3 倍性能、10 倍内存下降的量化结果。适合做静态分析器、代码扫描或其他性能敏感开发工具的架构参考,但读者也要注意迁移成本、语义一致性验证和语言生态差异。
技术文章 Faultlore 2024/05/05
文章讨论跨语言 ABI/FFI 兼容性,从 rustc、clang、gcc 对 __int128 的传递分歧切入,指出 ABI 多数未规范化,跨语言调用本质上是类型双关。作者介绍 abi-cafe:根据抽象类型与函数签名生成 caller/callee 代码,双方用 write_val 回调上报所见字节,由测试框架比对,从而在不预设 ABI 实现的前提下发现编译器分歧。1.0 因用具体值描述签名而无法表达枚举、联合等类型;2.0 改用 kdl-script 类型系统和 pun types 描述不同语言中结构不同的对应类型,并处理 tagged/untagged union、repr(transparent)、Option<&T> 优化等双关。核心未解难题是同步不同形状类型树的遍历与比较,项目仍属 WIP。适合编译器、FFI 与系统编程读者。
推荐收录:文章给出 abi-cafe 的黑盒 ABI 测试方法、graffiti value、复合类型树遍历等可迁移设计,并用 __int128 等真实编译器分歧证明其价值。它对 Rust/C FFI、编译器后端和系统编程读者尤其有用,可帮助理解 ABI 测试边界;需注意 2.0 仍为 WIP,复杂类型双关同步尚未完成。
技术文章 Josh W Comeau 2023/04/24
文章围绕 JavaScript 中 `const` 的常见误解展开,指出它并不等于“值不可变”,真正限制的是变量绑定不能被重新赋值。作者重点区分了“assignment(重新赋值)”和“mutation(修改对象内容)”,解释为什么用 `const` 声明的对象和数组仍然可以被修改。文中通过具体示例说明,原始值与引用类型在行为上的差异,以及开发者为何会误把“不可重新指向”理解成“完全冻结”。文章的核心结论是:`const` 适合表达不变的绑定意图,但并不能替代不可变数据结构或深冻结机制。适合已经写 JavaScript、需要减少状态管理和数据共享误解的前端/全栈开发者参考。
推荐收录,因为它直接针对 JavaScript 中最容易被误用的基础概念,且用“赋值 vs 修改”这一可迁移框架解释了 `const` 的真实语义。对前端、全栈和状态管理场景尤其有用,能帮助读者避免把语法约束误当成数据不可变,降低代码理解和维护风险。