词法作用域与动态作用域:为什么这个六十年前的设计抉择至今仍在影响你的代码

1975年,麻省理工学院的 Gerald Sussman 和 Guy Steele 正在开发一门新的 Lisp 方言。他们遇到了一个看似简单的问题:当一个函数引用外部变量时,它应该找到哪个值?这个问题困扰了编程语言设计者十五年,而他们的解决方案——采用词法作用域——后来成为现代编程语言的标配。 ...

15 min · 7062 words

热重载:为什么修改代码不需要重启程序?

按下 Ctrl+S,屏幕上的界面几乎瞬间更新——没有重新编译的等待,没有应用重启的闪烁,甚至当前填写的表单数据都还在。这种被称为「热重载」的能力,已经成为现代开发体验的标配。但它究竟是如何工作的?为什么有些语言能轻松实现,而有些却举步维艰? ...

12 min · 5707 words

Markdown解析器的二十年博弈:为什么一行文本能引发如此复杂的技术战争

在Stack Overflow上搜索"Markdown解析",会出现超过2万个问题。其中最高赞的一个问题是:“为什么***foo***会被解析成斜体加粗,而***foo**却变成了粗体加星号?“这个看似荒谬的问题,实际上触及了Markdown解析器最核心的设计困境。 ...

9 min · 4487 words

WebAssembly十年:从浏览器的第四种语言到「隐形」的基础设施

2017年6月,Figma工程团队在官方博客发布了一组测试数据:将C++渲染引擎从asm.js迁移到WebAssembly后,大型设计文档的加载时间缩短了3倍。这是WebAssembly早期最有力的一次「实力展示」,也让很多人相信这项技术将彻底改变Web开发的格局。 ...

9 min · 4410 words