来源:市场资讯

(来源:图灵人工智能)

肯尼斯·艾弗森在哈佛大学做了五年助教,最终没能拿到终身教职。

打开网易新闻 查看精彩图片

院长拒绝提拔他的理由听起来很充分:五年间,除了一本薄薄的小册子,他几乎没有任何学术产出。

颇具讽刺意味的是,正是这本"小册子",后来为他赢得了计算机界的最高荣誉:图灵奖。

打开网易新闻 查看精彩图片

这本小册子的名字叫做《A Programming Language》

打开网易新闻 查看精彩图片

(注:这个故事由另一位图灵奖得主弗雷德·布鲁克斯讲述。不过据考证,艾弗森在哈佛期间并未正式出版此书,他当时只是发明了一套用于教学的符号系统。)

一个直白的名字,一门不简单的语言

"A Programming Language"的缩写是APL。

这个名字实在搞笑,让人联想到《鹿鼎记》里那间"有间客栈":

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

但就是这样一门语言,却在计算机科学史上留下了浓墨重彩的一笔。

大家对APL的评价可以说是两极分化。

批评者认为它是世界上最丑陋的编程语言,代码里充斥着奇奇怪怪的符号,以至于你需要一块专用键盘才能正常输入。

打开网易新闻 查看精彩图片

比如康威生命游戏,在APL里可以压缩成一行让人望而生畏的符号串。

打开网易新闻 查看精彩图片

拥护者则视它为有史以来最具影响力的编程语言之一。

APL本质上是函数式的,它强迫程序员以并行的方式思考;它支持任意形状和尺寸的矩阵,提供了你能想象到的几乎所有运算符:选择、拆分、连接、投影、重塑……

据说有人曾用几天时间在APL里写出一个SQL解释器,没有其他语言能做到这种程度。

为数学而生,为数组而设计

艾弗森设计APL的初衷并非为了编写计算机程序,而是为了更优雅地表达数学思想和算法。

这使得APL拥有了一套极其独特的符号体系:希腊字母、箭头、圆圈……

这些符号在键盘上找不到,却构成了APL表达力的基石。

举几个例子:

数组赋值:

A ← 1 2 3 4

数组相加:

A← 1 2 3 4B← 5 6 7 8A + B ⍝ 输出 6 8 10 12

生成1到5的序列:

n ← ⍳ 5  ⍝ n的值是[1,2,3,4,5]

对每个元素求平方:

n * 2     ⍝ 结果是[1,4,9,16,25],APL中星号表达的是平方,不是乘法

求和:

+/ n      ⍝ 结果是 1+2+3+4+5 = 15 ,“/”是规约运算,它使得左侧的运算符(+)应用到右侧所有元素

对数组n求平均值

(+/ n) ÷ ⍴n     ⍝ ⍴ 是求一个数组的个数

再复杂一点:生成6个1到999之间的随机数,并按升序排列:

x [ ⍋ x ← 6 ? 40 ]

矩阵运算同样是APL的强项。假设有两个2×2矩阵A和B:

打开网易新闻 查看精彩图片

我们要计算两个矩阵的乘积C = A × B

A← 2 2 ⍴ 1 2 3 4B← 2 2 ⍴ 5 6 7 8C← A +.× B

稍微解释一下:

(1) 2 2 ⍴ 1 2 3 4 将一维数组 1 2 3 4 重新排列为一个 2x2 的矩阵 A。⍴ 是reshape的意思。

(2) 2 2 ⍴ 5 6 7 8 将一维数组 5 6 7 8 重新排列为一个 2x2 的矩阵 B。

(3) +.× 是APL的内置运算符,用于矩阵乘法。

可以说,一旦熟悉了这些符号,代码的简洁程度令人震惊。

APL的核心就是数组,它甚至可以被称为"Array Programming Language"。

从哈佛失意到IBM辉煌

离开哈佛后,艾弗森加入了IBM研究院,薪水翻了一番。

在那里,System/360的架构师、图灵奖得主弗雷德·布鲁克斯给了他一句关键的建议:"坚持做你真正想做的事,管理层渴望新想法,只要不是太离谱,都会得到支持。"

打开网易新闻 查看精彩图片

(弗雷德·布鲁克斯)

艾弗森于是继续打磨他在哈佛创建的符号系统,这一打磨,竟磨出了一门完整的计算机编程语言。

1964年,IBM推出里程碑式的大型机System/360,APL也在其上实现了。

打开网易新闻 查看精彩图片

当时的编程世界几乎被批处理统治:程序员把代码输入计算机,然后等待很久才能看到结果。

打开网易新闻 查看精彩图片

APL却提供了一套完整的交互式编程环境:输入语句,立即得到响应。

程序可以在数十人同时使用的计算机上定义、调试、运行和保存。

对于那些饱受打孔卡批处理之苦的程序员来说,APL无异于一场解放。

IBM自然不会放过这个商业机会,围绕APL开发了大量软件与库:

Starmap:绘制恒星与行星位置的函数集

IBGS:交互式商业模拟游戏

Graphpak:交互式图形包

MINIPERT:基于关键路径法(CPM)的项目管理系统

APL财务规划系统

APL计量经济学规划语言

一旦掌握APL,编程速度会大幅提升,这使它在建模和原型开发领域展现出独特价值。

1973年,Continental Can公司需要为旗下21家制造厂开发一套库存管理系统。他们的FORTRAN程序员折腾了一年也没搞定。后来STSC公司的一名销售出马,用APL Plus仅一周就搭出了一个可用的工作模型。

在20世纪60年代末到80年代初的大型机时代,APL无疑占据了重要的一席之地。

从巅峰到小众

1980年,在IBM工作了二十年的艾弗森离开公司,回到加拿大,加入IP Sharp Associates,专注于APL的咨询与服务。

1990年,为了解决APL特殊字符输入不便的问题,艾弗森与华裔科学家许罗杰(Roger Hui)共同发明了J语言。

打开网易新闻 查看精彩图片

J语言完全基于标准ASCII字符集,保留了APL的核心思想,却摆脱了专用键盘的束缚。

进入80年代,随着个人计算机的兴起,Basic、Pascal、C等语言逐渐成为市场主流。

APL慢慢退居幕后,在科学计算、统计学、保险精算、金融分析等领域继续发光发热。

APL的符号化表达和强大的数组处理能力,使其深受领域专家和数据科学家的青睐,这些人未必是专业程序员,却能用APL高效地完成复杂计算。

今天,APL还值得了解吗?

首届图灵奖得主艾伦·佩利斯(Alan J. Perlis)说过:"如果一门语言不能改变你的编程思维方式,那它就不值得学习。"

APL正是这样一门语言,它迫使你用全新的视角看待数据与运算,用数组而非循环去思考问题。

如果你好奇这种上古的异域编程体验,不妨去 Try APL 上玩一玩。

https://tryapl.org/

也许你会发现,五十年前的那些奇怪符号,至今依然锋利如初。