..

未来的编程语言

在《黑客与画家》中,保罗·格雷厄姆(Paul Graham)有一篇《一百年后的编程语言》(The Hundred-Year Language )描述了他对未来的编程语言的看法,文章有点长,主要的观点如下:

  1. 编程语言像生物一样进化
    • 有些语言是“进化死胡同”,比如 COBOL,Java 可能也是。
    • 成功的语言会位于进化树的主干上,而不是分支。
  2. 未来计算资源极其丰富
    • 计算机将变得极快,效率不再是第一优先级。
    • 我们应该用效率换简洁性,让编程更轻松,只在必要时优化。
  3. 语言核心应极简
    • 语言的核心(基本操作符)应少而精。
    • 一门语言能用自身写出的部分越多,越优秀。
  4. 数据结构将“扁平化”
    • 很多数据结构(如字符串、数组)只是为了性能。
    • 将来可能统一为更基本的结构,如字符串 = 字符列表,数字 = 列表长度。
  5. 多层抽象是未来趋势
    • 未来语言会有多层解释器,牺牲速度换取灵活性。
    • 自底向上编程(逐层构建语言)将更普遍,也更利于复用。
  6. 并行计算不会主导编程
    • 虽然总说要“并行是未来”,但大多数程序不会用并行,除非明确需要。
    • 并行优化将是后期考虑,不是默认设计。
  7. 语言设计权从学术界转向黑客
    • 像 Python、Ruby 这类语言由实践者设计,更贴近需求。
    • 这是好事,未来语言将更实用、更创新。
  8. 百年语言可以现在开始设计
    • 我们可以设想资源无限,问:“写这个程序最简洁的方式是什么?”
    • 用这种思路设计的语言,今天就能作为伪代码或原型使用。

我不是PL(Programming Language)专家,甚至没有什么PL的相关知识,只是从编程语言的发展历史中得出一些观察。纵观历史,编程语言从汇编、C,到C++、Java、Python,到现在的Rust、Go、Zig等,PL的的发展向着两个方向优化:

  • 越来越接近自然语言(多层抽象),方便使用(解释型),比如Python
  • 为了安全越来越严格(静态类型),比如Rust、Zig

底层的库的开发对安全性会有要求而选择更加安全的做静态检查的语言,而在应用层会选择更加灵活的解释型语言,写出越来越多的月抛型的脚本语言,来快速实现想法。语言从编译型向解释型转变是一个大趋势。

但是,由于LLM的出现会带来一些转变,有一种新的编程语言,非常符合Paul Graham的设想:

  • 语言的核心极简,甚至没有类型系统,去掉所有的类型检查
  • 非常抽象
  • 解释型
  • 几乎没有性能优化

它就是自然语言,LLM会作为一个超级解释器,来解释自然语言,完成任务。

比如一个场景,把一个CSV文件转换成JSON文件,在两年前,必须写一个脚本来实现这个功能,而现在可以直接用自然语言描述这个任务,直接输出结果,没有产生任何脚本和中间产物。

诚然,现有的LLM还不够稳定和强大,无法完全替代传统的编程语言,但是回顾下历史,执行码从机器码到后来的字节码,以后未尝不能是token。

编程语言从编译型到解释型,我们失去的是性能,但得到的是便利;从解释型到自然语言,我们失去了更多的性能,但得到的是自由。

EOF 🤞