Perl 大师 Larry Wall

作者:Marjorie Richardson
Larry Wall, the Guru of Perl

3 月 1 日,我通过电子邮件与 Perl 脚本语言的创建者 Larry Wall 进行了“交谈”。 Larry 非常健谈,我想你会发现这次采访既有趣又有信息量。 我肯定是这么认为的。

Marjorie:最初,是什么启发你编写 Perl 的?

Larry:这取决于你所说的“最初”是什么意思。 就像摩西说的那样:“起初,神创造天地。” 我并不是完全在开玩笑。 无论你是否关心如何解读圣经,我认为宇宙对于任何渴望成为创造者的人来说,都是一个非常重要的灵感来源。 我当然试图将一个充满想法的宇宙放入 Perl 中,并且取得了一些成功。

就个人经历而言,我的父亲是一位牧师,我的祖父和外祖父也都是牧师,而且我的许多祖先也都是。 我的妻子喜欢说牧师是为智慧而生的(虽然我猜她可能只是为了奉承我)。 无论如何,我的确获得了一套相当不错的脑构造基因。 除此之外,我还获得了丰富的思想和技能遗产,其中一些进入了 Perl 文化。 例如,你可以改变世界的观念。 其他人很重要。 对交流的热爱和对修辞的理解,更不用说语言学了。 对文本重要性的欣赏。 将一切事物联系起来的愿望。 建立而不是摧毁的热情。 当然,还有坚定不移的信念,即真正的财富不是用你积累的东西来衡量的,而是用你传递给别人的东西来衡量的。

Perl 的起源直接受到了我遇到的一个问题的启发,我无法用我拥有的工具解决这个问题。 或者更确切地说,我无法轻松地解决这个问题。 正如使徒保罗简洁地指出的那样:“凡事都可行,但不都于人有益。” 我最终可以用 awk 和 shell 解决我的问题,但我恰巧拥有程序员的三大美德:懒惰、急躁和傲慢。 我太懒了,不想用 awk 来做,因为要让 awk 按照我想要的方式跳来跳去会很难。 我太急躁了,不想等待 awk 完成,因为它太慢了。 最后,我自负地认为我可以做得更好。

当然,实际编写像 Perl 这样的东西需要大量的努力、耐心甚至谦逊。 如果我只是为自己做这件事,我可能不会付出努力。 然而,从一开始我就意识到其他人会使用 Perl,所以我总是将“懒惰曲线”整合到整个社区,而不仅仅是我自己。 我是间接的懒惰。 所以我们又在谈论教区长了。

Marjorie:好吧,这确实完全回答了这个问题。 我必须承认我没想到你会追溯到宇宙的开端。 :-) 你是怎么想出这个名字的?

Larry:我想要一个简短且带有积极含义的名字。(例如,我永远不会将一种语言命名为“Scheme”或“Python”。) 我实际上查看了字典中的每个三字母和四字母单词,并将它们全部拒绝了。 我曾短暂地考虑过以我的妻子 Gloria 的名字命名它,但这承诺会在家庭方面造成混乱。 最终,我想出了“pearl”这个名字,意思是 Practical Extraction and Report Language(实用提取与报告语言)。 当我想出这个名字时,“a”仍然在名字中。 但我听说有一种名为“pearl”的晦涩的图形语言的传言,所以我将其缩短为“perl”。 (当我给 Perl 另一个含义 Pathologically Eclectic Rubbish Lister(病态的折衷主义垃圾清单)时,“a”已经消失了。)

另一个有趣的趣闻是,“perl”这个名字最初并没有大写。 当时 UNIX 仍然是一个小写字母操作系统。 事实上,我认为你可以称它为反大写操作系统。 这有点像那些开始在网上发帖并假装不将任何东西大写的人。 最终,他们中的大多数人都会回到他们意识到偶尔大写对于有效沟通有用的地步。 就 Perl 而言,我们在 Perl 4 左右意识到区分“perl”程序和“Perl”语言是有用的。 如果你找到第一版骆驼书,你会看到标题是 Programming perl,带有小写的“p”。 现在,标题是 Programming Perl

Marjorie:好的,Perl 现在完美了吗,还是你会继续进一步开发?

Larry:嗯,两者并不相互排斥。 看看 Linux。 :-)

实际上,Perl 从未被设计成完美。 它被设计成进化,变得更具适应性。 生物学上讲,没有完美的生物。 你最多可以说的是,一种生物或多或少地适应其所处的环境。 事实上,生物学家现在才意识到,对于一个环境来说似乎“完美”的任何生物,一旦环境发生变化,就很可能面临灭绝的危险。 过度专业化只与你的生态位一样好。 我们不仅仅是在谈论恐龙,还在谈论蜗牛,猎豹和巴西的无数甲虫——更不用说 Visual Basic 了。

我们已经看到了计算领域许多过度专业化的生物的死亡:Lisp 机器、Ada 芯片和许多所谓的第四代语言。 任何用过时架构的汇编语言编写的程序现在都已过时。 同样,任何将其命运与单个操作系统联系起来的程序都可能会随着这艘船沉没。 我不知道 Windows 还能承受多少鱼雷才能沉没,但如果它沉没,一大批专业程序也会随之沉没。 显然,由于与开源运动相关的各种原因,Linux 没有这个问题。

无论如何,回到 Perl。 从一开始,Perl 就被设计为可改变的。 这涉及某些权衡,其中一些对于那些不按我的方式思考的人来说似乎不是最佳的。 例如,我希望能够在不破坏旧程序的情况下向 Perl 添加新关键字,所以我将它们放在与变量名分开的命名空间中。 这意味着变量名或关键字必须以某种方式标记为特殊。 我选择标记变量,因为它也使得将变量插入字符串变得容易,并且因为在计算机语言(例如 BASIC)中标记变量的历史悠久。 请注意,这在某些环境中实际上是非适应性的,即在某些纯粹主义者的脑海中,他们认为添加的标点符号使 Perl 变得丑陋,并且太像 BASIC。 好吧,也许它确实如此。 那又怎样? 这是一个有意识的权衡,以便 Perl 从长远来看更有用。 在这方面,Perl 在包含计算机科学家思想的特定生态位中不太适应,但在整个世界中更具适应性。 我从未后悔过这种特殊的权衡。

当然,一旦你克服了第一印象,Perl 中有很多计算机科学家喜欢的东西,例如词法作用域变量和闭包。 所以总的来说,那些能捏着鼻子把奶酪吃到嘴里的计算机科学家们发现味道是可以忍受的。

更重要的是,Perl 5 引入了一个扩展系统,很像 Linux 的模块系统,允许在不实际更改核心语言的情况下继续开发语言。 也就是说,你可以引入一个 Perl 模块,该模块以受控的方式扭曲语言以达到你的目的。 如果一个模块变得足够流行,我们可以考虑将其作为 Perl 核心的一部分——也许。

这并不是说我们永远不会再改变核心。 我们最近添加了对多线程和 Unicode 的支持。 有趣的是,即使我们现在确实对核心进行更改,我们也让它看起来像是程序员正在引入一个扩展模块。 本质上,如果你使用某种方式扭曲语义的奇特的新核心功能,你必须声明它。 这就是我们如何保持与旧 Perl 脚本几乎完全兼容的方式。 大多数 Perl 1 脚本仍然可以在 Perl 5 下不变地运行。 顺便说一句,功能声明就在最前面,依赖关系在编译时可见,因此我们很少因为缺少功能而在执行过程中死亡。 将此与 shell 编程进行比较,在 shell 编程中,你甚至不知道你打算调用的所有程序是否真的存在,直到你尝试运行它们,然后,砰!

Marjorie:你未来对 Perl 的开发计划是什么?

Larry:如果我能预测到这一点,我就会比现在更聪明。 我只是足够聪明,知道我没有那么聪明,这就是我最初设计 Perl 来进化的原因。

话虽如此,我可以告诉你我在一个项目中寻找的一些特征。

首先,如果它与文本处理有关,Perl 是自然的选择。 Perl 从未停止成为一种文本处理语言,尽管它早已摆脱了仅仅是一种文本处理语言的束缚。 这就是 Perl 成为 CGI 编程的自然选择的原因之一,因为 Perl 擅长于将文本撕裂并重新组合在一起。

其次,我寻找那些涉及将事物粘合在一起的项目。我们不会在乐高积木上使用胶水——我们将那些原本不应该在一起的东西粘合在一起。作为一种胶水语言,Perl 具有纤细的特性,使其能够流入微小的缝隙;同时又具有浓稠的特性,使其能够填补较大的空隙。Perl 总是能在间隙中找到归宿。典型的 CGI 脚本或 mod_perl servlet 将数据库与 Web 粘合在一起。当这个特殊的间隙消失时,还会有其他的间隙出现。

第三,我寻找那些让被剥夺权利的人获得特权的项目。我们开玩笑说要将我们的剩饭剩菜送到非洲的饥民手中,但事实上,在美国之外,还有数十亿潜在的程序员,他们负担不起花费数百美元购买操作系统或应用程序的费用。中国最近向我认识(并且为之工作)的一家出版商订购了 20 万册互联网书籍。这仅仅是个开始。这就是我去年在 Perl 中加入 Unicode 支持的原因。当然,文本处理也与 Unicode 有关。

说完这些,我下一个开发项目寻找什么几乎无关紧要,因为我现在不做大部分 Perl 开发工作了。Perl 社区的力量比我强大许多数量级,他们才是真正使 Perl 成为脚本语言终极之选的人。我只是坐在场边偶尔欢呼一下。我现在正在欢呼。啦啦啦!:-)

Marjorie:Perl 在哪些方面比 Python 和 Eiffel 等其他脚本语言更好?

Larry:Perl 是独一无二的,不仅在脚本语言中,而且在一般的计算机语言中也是如此。它是唯一一种有意识且明确地设计成后现代主义的计算机语言。所有其他的计算机语言在某种程度上仍然停留在现代主义时代。现在,事实上,我通常不使用“后现代”这个词来描述 Perl,因为大多数人并不真正理解后现代主义,即使他们接受它。但事实是,美国文化已经变得彻底后现代,不仅在音乐和文学中,而且在时尚、建筑和整体的多元文化意识中也是如此。

现代主义是基于一种傲慢,一套单一文化的遮眼罩,它将原创性置于一切之上,并导致设计师相信,如果他们想到了一些很酷的东西,那么它必须被认为是普遍很酷的。也就是说,如果某件事值得做,就值得把它做到极致,排除所有其他方法。看看 Lisp 中括号的使用,或者 Python 中将空白字符作为语法的使用。或者许多语言(包括 Java)中强制使用对象。所有这些都是剥夺最终用户自由的方式,“为了他们自己的利益”。它们只是奥威尔《一九八四》中“新语”的版本,在这种语言中,不可能产生坏的想法。我们在 20 世纪 70 年代逃脱了时尚警察的控制,但许多程序员仍然是网络警察的奴隶。

相比之下,后现代主义允许在解释任何艺术作品时考虑文化和个人背景。你如何穿着是你的事。这是 Perl 口号的起源:“不止一种方法可以做到!” Perl 为你提供不止一种方法来做任何事情的原因是:我真的相信计算机程序员想要有创造力,他们可能有许多不同的理由想要以特定的方式编写代码。你选择优化什么,这是你的事,不是我的事。我只是提供油漆——你来画画。

Marjorie:谁在使用 Perl?他们如何使用它?

Larry:几年前,我在一个贸易展上遇到一位代表美国国家安全局 (NSA) 的人。他顺便对另一个人提到,他用 Perl 编写了一个过滤器程序,所以在没有告诉他我是谁的情况下,我问他是否可以告诉别人 NSA 使用 Perl。他的回答是:“难道不是每个人都在用吗?” 所以现在我不告诉别人 NSA 使用 Perl。我只是告诉别人 NSA 认为 每个人都在使用 Perl。毕竟,他们应该知道。

作为一个有趣的旁注,结果证明这家伙正是那个关闭了 Perl (间接) 为之编写的项目的 NSA 管理员。当我指出 Perl 很可能成为该项目最持久的遗产时,他感到有些好笑。

至于每个人使用 Perl 来做什么,那真是五花八门。几年前,当我被告知 Perl 在华尔街被大量使用时,我感到非常惊讶。“每隔一张桌子上都有一本 Perl 书”,我就是这样听说的。但当你意识到市场分析师需要不断修改他们的模型,并且需要扫描新闻服务以获取可能与其市场地位相关的信息时,这就很有道理了。快速原型设计和文本处理是他们所需要的。

许多人将 Perl 与 CGI 脚本联系起来,尽管大部分繁重的工作都是由 Apache 下的 mod_perl servlet 完成的。Perl 在客户端也同样被大量使用,用于机器人程序和网络爬虫,它们导航 Web 并构建各种在线数据库中隐含的链接。这还不是全部。如果你曾经收到过垃圾邮件(谁没收到过?),你的电子邮件地址几乎肯定是用 Perl 脚本从网上收集的。垃圾邮件本身很可能也是通过 Perl 脚本发送的。可以说 Perl 是网络滥用的首选语言。人们几乎可以为此感到自豪。

这仅仅是 Perl 用途的冰山一角。在不涉及盖洛普先生或美国人口普查局的情况下,了解 Perl 用途的最佳方法是查看综合 Perl 档案网络(简称 CPAN)中的大约 800 个可重用扩展模块。如果你浏览这些模块,你会得到一个印象,Perl 几乎可以与世界上的所有事物进行交互。稍微思考一下,你可能会发现 Perl 能够与所有事物进行交互的原因,与其说是 Perl 本身可以与所有事物对话,不如说是 Perl 可以让世界上的所有事物相互对话。其组合数量是惊人的。《Perl Journal》(不要与Linux Journal混淆)的第一期包含一篇题为“Perl 如何拯救人类基因组计划”的文章。它解释了所有不同的基因组测序实验室如何使用具有不同格式的不同数据库,以及如何使用 Perl 将数据整合为一个有凝聚力的整体。

Marjorie:我们收到了来自 ActiveState Tool Corporation 的 PerlDirect 产品公告,上面写着

“PerlDirect 通过以下特性为 Perl 提供可靠性、稳定性、支持和问责制:经过验证、质量保证的 Perl 及其流行的扩展版本;建议和支持;Y2K 测试套件;以及 Perl Alert 每周公告。PerlDirect 提供了一个机会,让订阅者能够直接向参与开源开发的领先组织提供意见。基本年度订阅费起价为 12,000 美元。”

你是否与这家公司有联系?我认为他们提供让订阅者以每年 12,000 美元的价格直接为开源开发提供意见,这很有意思。这合理吗?

Larry:听起来像是一份非常普通的合同。我认为即使是理查德·斯托曼也不会反对这样一种观点,即支持是自由软件赚钱的有效方式。

我与 ActiveState 没有直接联系,但我与他们合作过,我认为他们解决的问题远远超过他们制造的问题。你必须明白,他们的市场一直是 Windows 领域,在那里你实际上是在帮人们一个忙,通过为他们收费来做事情,因为这是避免让他们感到困惑的唯一方法。Linux 用户比这更聪明,当然,但有些 Linux 用户还不够聪明,无法意识到 Windows 是一种不同的文化,而 Perl 是一种对环境敏感的后现代语言,在不同的文化中看起来会有所不同。

Marjorie:哦,我不是想暗示我认为他们不正当,只是好奇你是否认识他们。你对开源运动有什么看法?你认为它会成为一种真正的现象,还只是一种过眼烟云?

Larry:我一定有一个连接性而不是分离性的大脑,因为我认为这两种观点都是正确的。而且我也认为它们都是错误的。:-)

我们怎么能声称开源正在成为一种真正的现象,而它在过去的几十年里已经是一种真正的现象了呢?我们只是在向所有人指出一种已经证明可以产生出色代码的实践。另一方面,我们当然试图使它成为一种更真实的现象,因为我们希望更多的人会觉得它对于许多以前在封闭模式下开发的软件来说,是一种有效的开发模型。

当然,这只是一种过眼烟云——就像我们过去对自由形式语法、结构化编程以及最近的面向对象编程也有过其他过眼烟云一样。

你必须明白的是,从过眼烟云的观点来看,人们代表着道路上的一种分叉。这就像《启示录》中将绵羊与山羊分开一样。这些烟云中的一些从一边掠过,进入了遗忘的境地,而另一些则从另一边掠过,进入了共同的实践,通常是在一段过度热情之后。自由形式语法、结构化编程和面向对象编程都是好的(适度地)。但请注意,所有这些过眼烟云在流行之前都有着被证明有用的历史。进入遗忘境地的过眼烟云是那些根植于历史而非某人的美好愿望(通常是来自营销部门的人)中的烟云。按照这个标准,开源很可能会进入共同实践,因为它已经在共同实践中了。

在我看来,开源运动只是我们文化日益增长的后现代主义的另一种表现。相比之下,商业秘密的概念只是对不惜一切代价追求原创性的现代主义思想的翻炒。多年来,我们对代码重用给予了很多口头上的支持,但它只有在开源的情况下才能真正发挥作用。一个后现代的计算机程序员真正相信重用好的代码,无论它是否是原创的。这不再是一个值得骄傲的地方。一个好的后现代主义者应该抄袭他或她认为很酷的东西。

Marjorie:如果一切都变成开源,程序员如何谋生?

Larry:与许多开源倡导者相反,我不认为一切都会变成开源。我所看到的是,越来越多的人认识到,任何类似于大规模基础设施的东西都应该是开源的,就像美国已经认识到州际公路不应该是收费公路一样。另一方面,我们不希望城市停车场是免费的,除非在某些开明的城市。因此,我预计 Windows 会在 Word 之前变成开源。

话虽如此,就像有很多方法靠开放科学谋生一样,也有很多方法靠开源谋生。但我认为,这正是开源运动需要进一步发展的地方。开放科学最初是富人的爱好,但直到教育机构接管了它的赞助,它才真正发展成我们今天所看到的形式。开源还没有完全做到这一点。或者更确切地说,它已经开始这样做了,但随后许多教育机构陷入了对万能金钱的追逐。我希望有更多的地方能效仿加州大学伯克利分校的做法。

玛乔丽:说到这里,你是怎么谋生的?

拉里:一开始,我和其他人一样,做编程和系统管理员的工作,然后在业余时间做我的自由软件。后来,我写了一本书,开始收取版税。这本书成了畅销书,所以它给我的出版商 O'Reilly & Associates 带来的利润甚至比给我的还多。当然,他们必须用这笔钱支付更多的人,所以最终还是平衡了。

总之,三年前,我和蒂姆·奥莱利想到,任何对 Perl 有益的东西对 O'Reilly & Associates 也有益,所以现在他们付钱让我做任何我喜欢的事情,只要它对 Perl 有帮助。这是一种很好的共生关系。

玛乔丽:有什么有趣的项目想告诉我们吗?

拉里:我应该在编写《骆驼书》的第三版,所以目前我官方上没有任何其他有趣的项目。当然,我一直在玩蒂姆·奥莱利圣诞节送我的 Palm Pilot,但如果你不说,我就不说。

玛乔丽:成交。给我们一些个人信息——你上过什么学校,有什么兴趣等等。

拉里:我童年的前半段在洛杉矶南部度过,离瓦茨骚乱爆发地大约两英里,童年的后半段在华盛顿州布雷默顿度过,那里没有爆发骚乱,但我确实从高中毕业了。在我童年的第三个阶段,我去了西雅图太平洋大学,一开始主修化学和音乐,后来转到医学预科,最终(在花了几年的时间在 SPU 计算机中心工作后)最终主修自然语言和人工语言(一个自我设计的专业)。之后,我和我的妻子在伯克利和加州大学洛杉矶分校的语言学系读研究生。当时,我们实际上计划成为传教士(更具体地说,是圣经翻译),但我们不得不因为健康原因放弃了这个想法。有趣的是,现在传教士可能从 Perl 中得到的好处比他们从我作为传教士那里得到的还要多。真奇怪。

至于我的兴趣,这很难说,因为我倾向于对任何有趣的东西感兴趣。这几乎包括除了歌剧和肥皂剧之外的一切——太空歌剧没问题。

玛乔丽:你有什么爱好?

拉里:阅读,听妻子给我读书(尤其是太空歌剧)。和我的家人讨论任何事情。做纽约时报纵横填字游戏。玩麻将。练习合气道。看动漫。(也许日本肥皂剧也可以。)和我的鱼玩耍。从我买来维持它们生命的设备中拯救我的鱼。

玛乔丽:看起来你很忙也很快乐——一个很好的组合。你早餐吃什么?

拉里:我早餐吃各种各样的东西——但一般来说,我都是午餐时间吃早餐。

玛乔丽:看来什么时候都一样好。感谢你给了我们这么多时间。这很有趣。

加载 Disqus 评论