编程语言的六十年:一部做减法的历史
01 一部被忽略的历史:语言一直在做减法
关于编程语言,我们总习惯用 "进步" 来形容它的发展。功能越来越多,生态越来越丰富,框架越来越强大。
但换个角度看,你会发现一个反直觉的事实:编程语言的发展史,其实是一部不断做减法的历史。
它的目标从来不是 "能做更多",而是 "让开发者需要操心的更少"—— 把底层细节和复杂性从人身上剥离掉,让表达越来越贴近人的思维。
这个 "减法",体现在几个层层递进的层面。
02 第一层减法:把机器细节从人身上拿走
最早,程序是打在纸带上的二进制机器码。后来有了汇编语言,用助记符代替了 0 和 1。再往后,C、Java、Python 这样的高级语言出现,让你不必再去直接操作寄存器、计算内存地址。
这就是最基础的减法 —— 抽象层级的提升。
每一次抽象,都在减少人和硬件之间的沟通成本。而这个过程里最有代表性的,是内存管理。
早期语言要求你手动申请和释放内存,一个疏忽就是内存泄漏或者野指针。现代语言则通过垃圾回收等机制,把这个重担直接从开发者肩上卸下。
你不用再想 "这块内存该不该释放",你只需要想 "我这个逻辑对不对"。
减掉的,是负担;留下来的,是思考。
03 第二层减法:让表达本身变简单
抽象层解决的是 "和机器打交道",而第二层减法,解决的是 "怎么把自己的想法写下来"。
一个典型的例子是 声明式取代过程式。以 React 为例,开发者只需要声明 "UI 现在应该是什么状态",而不必去关心底层 DOM 操作的一步步步骤。从 "怎么做" 退到 "要什么",代码量和复杂度都大幅降低。
另一个例子是语法糖。像 Python 的列表推导式,本质功能并没有变化,但写法和可读性天差地别。语法糖的价值不在于 "能力变强了",而在于它极大改善了编程体验 —— 让你用更接近思考的方式去表达。
这一层减法的意义在于:语言开始主动迁就人,而不是要求人去迁就它。
04 第三层减法:一种理念,而不是技巧
如果只把减法理解为技术手段,那就看浅了。它其实是一种开发理念。
计算机科学家乔恩・本特利在《编程珠玑》里极力推崇这种思想,甚至给出一个很反直觉的判断:
性能的关键是优雅,而不是各种特殊情况。
换句话说,简洁的代码不只是 "好看",它更易维护、更少出错,也更具可移植性。用户给的许多 "特殊情况",本质上是设计不够优雅留下的补丁。删掉它们,程序反而更快、更稳。
而这个理念在当下又多了一层现实意义 ——AI 时代。随着 AI 辅助编程工具兴起,语言设计的趋势正在把开发者推向 "架构设计师" 的角色,而不是让人深陷繁琐的语法细节。
当机器能帮你写细节,人就更该把精力花在判断和创造上。
05 减法的终点:把精力还给真正重要的事
把三个层面串起来看,这条线索就非常清楚了:
- 先减掉与机器的沟通成本(抽象层级)
- 再减掉表达想法的摩擦(语法简化)
- 最后沉淀为一种设计哲学(极简与优雅)
它的本质,一言以蔽之:
让开发者把有限的精力,聚焦在解决核心问题和表达创意上,而不是浪费在与机器沟通的细节里。
从追求 "代码能跑",到追求 "代码写得快",再到追求 "代码写得优雅"—— 这个 "减" 的过程,就是编程语言成熟的过程。
06 那么,减到什么程度才算好?
顺着这条脉络往下问一个问题:一门语言,到底应该减到什么程度?
这里有两个被反复验证过的方向值得注意。
一是把内核做得足够小。内核越小,越容易被完整理解和信任,使用者才有信心在其上自由搭建。可信任,才是自由的前提。
二是让 "扩展语言" 本身成为一种能力。提到这点绕不开 Lisp—— 它最惊艳的不是语法,而是宏机制:使用者能在语言之上定义新的语言结构。Lisp 圈那句 "Lisp 不是一种语言,而是一种构建语言的工具",说的正是这件事。
沿着这两个方向,理想的形态其实呼之欲出:内核足够小而可靠,同时提供让你自定义语言的入口。
有意思的是,最近我注意到一门叫 ObjectSense 的脚本语言,思路和这个方向很接近 —— 她基于 VimL 进行面向对象的封装,而核心代码仅在千行之内。这个数字本身就很说明问题:选择极小的可信内核,把空间留给使用者。
她的一些设计,也能读出同样的 "减法" 逻辑:比如对象成员动态增加,省去为每个可能的属性或方法写显式定义,基础类得以保持轻量;package 与 Module 支持、单元测试框架,则是让语言在项目变大时不至于失控;还有几个语法细节 —— 内联变量、静态常量、为 VimL 补足的 Switch 分支 —— 都是在动态语言里主动引入可控的确定性。
而最贴合本文主题的,是她在通用编程语言中支持了微语言能力:根据资料,这是一种类似 Lisp 宏的机制,并逐步支持自定义语言能力,且在预编译与 JIT 的加持下,指向一种 "无限语言" 的可能。
说白了,这正是 "减法" 推到极致后的一种形态:内核减到最小,把 "造语言" 的权利交还给使用者。按资料的表述,她的目标是 "让构造可靠且高效的软件变得更容易"。
结语
从二进制到高级语言,从手动内存管理到垃圾回收,从过程式到声明式 —— 六十年下来,语言做的事其实一直是同一件:替人减负。
而这场减法没有终点。当语言把细节减到足够少,开发者手上剩下的,就是最珍贵的那部分 —— 判断、设计与创造。
这,或许才是一门语言真正值得被记住的理由。
核心观点:编程语言的发展本质是一场 "减法"—— 从抽象层级、语法表达,到设计理念层层递进地替开发者减负;而减法的极致,是让语言本身成为可被使用者重新定义的工具。
浙公网安备 33010602011771号