为什么主流语言的sort函数都选择了Timsort

1959年,Tony Hoare发明了快速排序。这个算法在教科书中被奉为圭臬,平均时间复杂度$O(n \log n)$,原地排序,缓存友好,几乎完美。然而,六十多年后的今天,当你调用Python的list.sort()、Java的Arrays.sort()或Rust的稳定排序时,底层运行的却是一个叫Timsort的算法。 ...

10 min · 4652 words

Python的GIL为何困守三十年:从单线程性能到多核时代的漫长博弈

2007年9月,Python创始人Guido van Rossum在一篇博客文章中写下了一段被无数次引用的话: “我会欢迎移除GIL的补丁——但前提是单线程程序的性能不能下降。” ...

14 min · 6545 words

闭包捕获:为什么同一个循环变量在不同语言中行为截然不同

1964年,Peter Landin在一篇题为《The Mechanical Evaluation of Expressions》的论文中首次提出了"闭包"(closure)的概念。他将闭包定义为一个包含λ表达式及其相关环境的"信息束"。六十年后,这个概念几乎出现在所有现代编程语言中——JavaScript、Python、Rust、Go、Swift、C++、Java——但每种语言的实现方式却大相径庭。 ...

9 min · 4494 words