技术趣闻:十三种编程语言和它们名称背后的故事
编程语言的名称通常既公式化又枯燥无聊,但其中也不乏一些令人眼前一亮的字眼。在今天的文章中,我们将一同了解编程语言名称背后的那些创意与灵感。
如果玫瑰不叫玫瑰,芳香是否如故?
程序员们普遍认为,软件开发工作当中难度最高的一项任务就是为成果命名。尽管这种情况并不多见,但命名过程中尤其令人头大的就是面对着一种新型编程语言。
在一种新型语言的设计工作宣告结束后,随之而来的命名过程往往遵循以下几个步骤:以语言本身的特性或者描述为名,采取首字母或者缩写形式(例如BASIC、COBOL、TCL以及LISP);从现有语言当中派生而来的新名称(例如C++、C#以及CoffeeScript);又或者直接取自某位对数学或者计算科学作出卓越贡献的伟人(例如Ada、Pascal以及Turing)。
不过有时候,语言设计得们也会发掘出一些特别的灵感、进而为我们带来更为丰富的命名方式。下面我们就一起来看看这十三种拥有不同寻常名称的编程语言和它们背后的故事。
Python
这款最初发布于1991年的语言人气极高,它是由荷兰程序员Guido van Rossum于上世纪八十年代末着手开发的。由他一手打造的这款新型脚本语言派生自ABC编程语言,其诞生源自Rossum在圣诞节假期中的兴趣之作。
当需要为这种全新语言选择名称时,van Rossum希望选择一个“简短、独特而且略带神秘色彩”的字眼。他从著名英国喜剧团体Monty Python(巨蟒)身上得到了灵感,他本人也是该剧团的铁杆粉丝。不知道他当时有没有考虑过Dead Parrot(死鹦鹉,同样为英国喜剧团体)这个名称。
Java
Java的前身是诞生于上世纪九十年代早期、由Sun公司打造的Green项目,该项目的初衷在于为即将到来的智能设备浪潮——例如互动式电视——建立一套技术支持方案。这款新语言在建立之初被称为Oak,但Sun公司的律师团很快发现该名称已经被注册,这迫使他们必须重新寻找合适的新名称。
公司旋即召开了一系列会议,并整理出一份简短的备选名称清单(经过律师团队的严格甄选),其中包括Silk、DNA以及Java。尽管现在我们已经无法考证当初是哪位仁兄最先推荐了Java这一选项,但它确实受到了大多数与会者的广泛支持。Java的灵感源自Peet咖啡店(Java即英文的爪哇,以盛产咖啡而闻名),这里是Sun公司的各位工程师们最青睐的休闲场所。
Forth
Forth语言的开发工作可以追溯到上世纪六十年代,由Charles Moore负责开发。他曾于1968年效力于一家名为Mohasco的家居家具公司,当时公司为他配备了一台IBM 1130微型计算机外加一台2250图形显示器,希望他能借此进行地毯产品的设计。
由于无法利用FORTRAN语言进行图形设计,Moore决定自己开发一套编程语言——这就是Forth。他最初选择的名称是“Fourth”,代表这是第四代语言。但问题在于,IBM 1130微机只允许在文件名当中包含最多五个字符,所以在去掉了“U”之后、Forth由此诞生。
Perl
作为一款被称为“瑞士军刀”的语言,Perl以其出色的灵活性与强大能力闻名于世。Perl由Larry Wall于上世纪八十年代末所创建。在为其选择名称时,Wall表示他希望能在简短的词汇中包含“积极的内涵”。他考虑过使用他妻子的名字(Gloria),但后来转而选择了“pearl(珍珠)”。
然而当时这个名称已经被另一款编程语言所占用(即PEARL,‘流程与实验自动化实时语言’的缩写),为了避免冲突、他去掉了其中的“A”并由此衍生出perl。值得注意的是,最初peal这个名称的四个字母全部为小写,这是受到了Unix全部小写规则的启发。不过到了后来,也就是1993年Perl 4版本正式发布时,名称的首字母开始转为大写并一直沿用至今。
Lua
Lua是由TeCGraf于1993年创建的一款脚本化语言——很多朋友对于TeCGrag可能并不熟悉,它是巴西里约热内卢天主教大学计算机图形技术小组的简称。Lua以TeCGraf此前所开发的两款早期语言为基础,它们分别是DEL(即日期输入语言)与SOL(即简单对象语言)。
当一种结合了DEL与SOL的精华与其它诸多功能(例如流控制)于一身的新型语言被创造出来时,开发者为其取名为Lua——也就是葡萄牙语中的“月亮”。理由非常简单,因为作为其父辈,SOL在葡萄牙语中是指“太阳”。
Smalltalk
Smalltalk是一个包含多种面向对象编程语言的家族,最初由Xerox公司的帕洛阿尔托研究中心(简称PARC)于上世纪七十年代所创建。它的出现给众多后续出现的编程语言带来了重大影响,其中包括Java、Python以及Ruby等等。
Alan Kay的学习研究小组一手建立起了Smalltalk,而根据Kay的回忆,当时选择这个名称是为了迎合“印欧神话体系”中的设定。在这套理论系统中,像宙斯以及托尔这类名号霸气侧漏的神往往历尽坎坷、饱经磨难。因此他反其道而行之,选择了Smalltalk这样一个听起来就人畜无害的字眼,平和舒缓的风格也让人们不至于对这种语言抱有不切实际的期望。
Logo
Logo是一款由麻省理工学院人工智能实验室的多位计算机科学家于上世纪六十年代中期开发完成的编程语言,当时主要是为了满足教学需要。它属于Lisp语言的一类分支,能够被用于实现多种编程概念的教学、同时也给Scratch等后续教学型语言带来了深远影响。
它的一大主要特点在于利用海龟图形生成源自命令的输出结果。Logo这一名称明显源自希腊语的“logos”,原意为“字”或者“思想”,开发者希望借此对其与传统中面向数字的编程语言加以区分。
Ruby
Ruby由松本行弘于1993年所创建,这款真正面向对象的脚本化语言被作为Perl以及Python的替代方案。与Perl类似,松本希望选择一个与珠宝相关的词汇为其命名。在与同事石冢圭树进行讨论之后,最终名称选项被锁定在Coral(珊瑚)与Ruby(红宝石)二者之间。
Ruby最终当选,这一方面是由于松本更喜爱这个名称、另一方面它同时也是石冢的生日石。松本还明确指出,虽然Perl所代表的珍珠象征着六月、而Ruby所代表的红宝石则象征着七月,但Ruby并非Perl的继承者(松本一直认为Perl只是一种‘玩具性质的语言’);相反,Ruby将彻底取代Perl。
Scheme
在上世纪五十年代末,麻省理工学院的John McCarthy创造出了Lisp。作为历史最为悠久的早期高级编程语言之一,Lisp很快成为人工智能研究者们最为青睐的编程方案。随着时间的推移,Lisp的一系列不同分支也争相涌现,其中就包括Planner与Conniver。
1975年,麻省理工学院的Gerald Jay Sussman与Guy Steele开发出了Lisp的又一款衍生方案,并按照Planner与Conniver的命名惯例为其选择了Schemer作为名称。不过这种语言当时运行在由麻省理工学院自主开发的ITS(即非兼容分时系统)系统之上,该系统强制要求文件名由两部分组成、且每一部分最多只能包含六个字符。有鉴于此,Schemer最终被缩减成了Scheme。
Scala
Scala语言由Martin Odersky于2001年创建,它身兼函数与面向对象两种特性。它在编写时充分考虑到了将开发成果编译为Java字节码的需求(在此之前,它也能够被编译为.NET代码)。
Scala这一名称的确定基于两个不同理由:第一,由于结合了可扩展LAN、因此它具备很好的扩展(scale)能力;第二,“scala”在意大利语中代表着楼梯或者阶梯,这为该语言赋予了美好的双重含义——帮助使用者通往目标的卓越编程语言。
Scratch
Scratch是一款教学性编程语言,由麻省理工学院媒体实验室于2003年开发完成。孩子们可以利用它将屏幕上的各个积木状模块(被称为sprite,即精灵)连接起来,并借此完成程序创建。在它的帮助下,年轻的开发者们能够创造出属于自己的故事、电影、游戏、音乐以及一切曾经出现在他们梦中的事物。
这款语言的名称来自嘻哈电台主持人通过旋转并刮擦(scratch)塑胶唱片来创造全新音效与音乐作品的表演方式。
AWK
任何一位曾经与Unix系统打过交道的朋友肯定也对AWK相当熟悉,这是一种用于处理文本文件的解释型语言。它最初诞生于1977年,当时被作为Unix grep工具的通用版本使用,随后于1979年首次成为Unix版本7中的内置方案。
在开发Perl时,Larry Wall受到了来自AWK的诸多影响。与其它大部分编程语言的名称一样,AWK同样是个缩写词;但与常见情况不同的是,这一缩写代表的并非语言本身的作用、而是来自贝尔实验室的三位开发者的姓氏首字母:Alfred Aho、Peter Weingerber以及Brian Kernighan(上图)。
Groovy(精妙,亦有时髦之意——如上狗所示)
时间转回2003年,当时Java程序员James Strachan希望能用上一款像Python或者Ruby那样的脚本化语言——但却要能够运行在Java平台之上。这可怎么办?