深度解析塑造未来的技术文章。

编程语言

深入解析编程语言:新特性、性能表现与生态系统发展。

17 篇文章
03 编程语言

约束解码:把LLM变成快速决策模型

有个不起眼但很实用的小技巧:如果你只关心LLM输出的第一个token,就可以把它当成选择题来问,一次前向传播就能拿到答案。约束解码——把词表里除了你允许的少数几个token之外全部屏蔽掉——能让生成式模型看起来很像一个分类器。不用解析JSON,不用重试循环,也不用为了输出十一个字符跑十一步自回归。一次前向、一次soft...

编程语言James Whitfield2026年10月11日10 分钟
04 编程语言

Rob Pike 的五条编程法则,至今依然有效

1989 年,Rob Pike 写下了五条编程法则。他后来还参与创造了 Go、UTF-8 和 Plan 9。这几条法则简短到能写在一张索引卡上,却深刻到让编程界争论了 37 年。大多数开发者至少在博客或技术大会上见过其中一些。但真正内化的人并不多,这很可惜,因为它们能省下大量白费的力气。

编程语言James Whitfield2026年3月19日9 分钟
05 编程语言

规格与实现的鸿沟,才是 Bug 的藏身之处

编程语言理论圈子里时不时会冒出一个说法:‘足够详细的规格说明,与代码没有区别。’这个观点很有挑衅意味,暗示着‘描述程序应该做什么’和‘让程序真正去做’之间的界线,比我们想象的要薄得多。如果你的规格精确到足以消除所有歧义,那你其实已经把程序写出来了。

编程语言James Whitfield2026年3月18日9 分钟
06 编程语言

超越 SQLite 的可嵌入图数据库

SQLite 无处不在。它在你的手机里、浏览器里、智能电视里,说不定还在你的汽车里。它解决了一个根本问题:让应用无需运行独立服务器就能拥有完整的 SQL 数据库。它做得非常出色,以至于「嵌入式数据库」几乎成了 SQLite 的代名词。但 SQLite...

编程语言James Whitfield2026年3月16日9 分钟
07 编程语言

开源项目失去核心领导者之后会怎样

Ryan Dahl 离开 Node.js 后,项目虽然挺了过来,但经历了多年的治理结构调整、一次分叉(io.js)以及后来的重新合并,才终于稳定下来。Guido van Rossum 辞去 Python 的 BDFL(“终身仁慈独裁者”)一职后,社区花了数月讨论治理模式,最终才确定设立指导委员会。Deno...

编程语言Elena Vasquez2026年3月13日9 分钟
08 编程语言

JIT 编译器如何让动态语言变快

Ruby 一直被认为很慢。Python 也是。JavaScript 也曾如此,直到 V8 把它提速到足以承担服务端负载。动态语言如何变快,背后的故事就是 JIT(Just-In-Time,即时编译)的故事,也是实践计算机科学中最迷人的领域之一。最新一章是:Ruby 的 ZJIT...

编程语言James Whitfield2026年3月9日10 分钟
09 编程语言

Java 一直在进步,只是没人注意到

Java 是编程语言界的“小透明”,总是得不到应有的尊重。问问三十岁以下的开发者提到 Java 会想到什么,他们脑海里浮现的大概是 XML 配置文件、企业级 Bean 和 AbstractSingletonProxyFactoryBean。这门语言的口碑停留在 2008 年,那时 Java 6 是最新版本,写...

编程语言James Whitfield2026年3月4日9 分钟
10 编程语言

CPU分支预测:代码里隐藏的性能瓶颈

Stack Overflow上有一个非常有名的回答,浏览量超过300万次。问题是:为什么处理排序后的数组比处理无序数组更快?代码完全相同,都是一个带if语句的循环,唯一的区别是输入数组是否有序。有序版本快了6倍。背后的原因就是CPU分支预测,它揭示了现代计算中影响最深远的性能因素之一。

编程语言James Whitfield2026年2月27日10 分钟
11 编程语言

FFmpeg 详解:你缺失的心智模型

我们都遇到过这种情况。你需要转换一个视频,于是去搜索,找到一个 Stack Overflow 上的回答,命令看起来像是有人胡乱敲了一通键盘:ffmpeg -i input.mov -c:v libx264 -preset slow -crf 22 -c:a aac -b:a 128k -movflags...

编程语言Marcus Rodriguez2026年2月26日10 分钟
12 编程语言

从零构建Shell教会你的Unix知识

每个开发者每天都在用Shell,但很少有人真正理解它在做什么。Shell看起来像一个应用程序——你输入命令,它执行——但实际上它只是Unix底层原语之上的一层薄封装,而这些原语是操作系统运行的基石。从零构建一个Shell是理解进程、文件描述符、管道和信号的最佳方式——这些概念支撑着从Web服务器到Docker容器的一切...

编程语言James Whitfield2026年2月22日9 分钟
13 编程语言

Lisp 六十年后为何仍然重要

每隔几年,就会有人写一篇“Lisp 已死”的文章;而每隔几年,又会有人指出,你最喜欢的现代语言里,有一半特性其实都是从 Lisp 那儿“借”来的。垃圾回收、一等函数、闭包、动态类型、同像性、REPL 驱动开发、宏——这些概念大多在今天多数开发者出生之前,就已在 Lisp 里被发明或推广。Lisp...

编程语言James Whitfield2026年2月18日9 分钟
14 编程语言

每个开发者都该了解的 Linux 系统 API

1969年,Ken Thompson 和 Dennis Ritchie 在贝尔实验室的办公室里做出了一系列设计决策,这些决策的寿命比那个时代几乎所有其他技术都长。他们写出 Unix 时用的 PDP-7...

编程语言James Whitfield2026年2月15日11 分钟
15 编程语言

Python 的 JIT 编译器终于来了

Python 从诞生起就一直被说“太慢”。Python 社区的标准回应是“热点循环用 C 扩展来写”,这实际上一直是在承认:语言默认的执行模型有根本性的局限。CPython 逐条解释执行字节码,每条指令都通过 switch 语句分发。这种设计简单、可移植、好调试,但在计算密集型任务上,它大约比编译后的 C 代码慢...

编程语言James Whitfield2026年2月14日9 分钟
16 编程语言

jemalloc为何重要:大规模内存分配

每次你的程序调用 malloc(),都得决定把虚拟内存中的哪一块交出去。这个决定对小程序来说微不足道,但到了大规模场景就成了棘手的工程问题。糟糕的分配器会造成内存碎片、浪费 RAM、在线程之间制造锁竞争,还会在操作系统回收页面时引发延迟尖峰。好的分配器则能避免这些问题。jemalloc 就是一个好的分配器,而...

编程语言James Whitfield2026年2月7日9 分钟
17 编程语言

为什么好软件需要时间,急不得

Flask 花了八年才发布 1.0 版本。SQLite 自 2000 年起就一直在积极开发,至今仍在持续改进。Linux 内核已有三十多年历史,可以说是越老越好。与此同时,一家获得风投支持的普通创业公司,通常被期望在 18 个月内拿出增长数据,否则就得解释原因。

编程语言James Whitfield2026年2月1日9 分钟