来源:市场资讯
(来源:图灵人工智能)
肯尼斯·艾弗森在哈佛大学做了五年助教,最终没能拿到终身教职。
![]()
院长拒绝提拔他的理由听起来很充分:五年间,除了一本薄薄的小册子,他几乎没有任何学术产出。
颇具讽刺意味的是,正是这本"小册子",后来为他赢得了计算机界的最高荣誉:图灵奖。
![]()
这本小册子的名字叫做《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/
也许你会发现,五十年前的那些奇怪符号,至今依然锋利如初。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.