2

将Walter Bright带往写一门语言、现在排在前20名的道路是从好奇开始的——也有侮辱。

请输入图片描述

我喜欢弄清楚事情是如何运作的,并从非常早期的阶段设计它们(我爱Tom Swift系列的书【注1】)。早期,我知道我自己在设计火车头或施耐德杯赛车。我的学位是机械工程。但是机械工程让我沮丧,因为建造任何东西都有昂贵的代价,以及我的糟糕至极的建造水平。

在另一方面,编程,我可以建造能想象到的最错综复杂的机器,零成本,只需要计算机访问。和很多程序员一样,我开始开发游戏。开发游戏的动机是某种上帝情节——你能够创造完整的、奴隶般地遵守你规则的一个世界。在游戏《Empire》里,我不仅仅创造了这样的世界,而且花了无数小时规划如何让计算机更好地操作敌方军队。甚至到了今天,我仍然在考虑优化的方法。

然而,问题在于计算机策略对计算机性能的渴求远远超过了可用机器的能力,因此我对编译器如何优化代码产生了兴趣。编译器好像喜欢彻底的、充满魔力的设备,它把源代码转化成机器码。这个魔术究竟如何实现的?在《BYTE》杂志把源代码发布到Tiny Pascal之前,这是宇宙中非常神秘的东西。我研究了程序的每一行代码;在掌握之后,我觉得我拿到了通往圣殿的口令。

过了几年。在80年代早期,我发现我自己成为了面向MS-DOS开发软件的开发小组成员。我们都用C,因为它是唯一的高级语言,我们发现它事实上能够在PC上运行。其它语言实现令人难以置信地糟糕。甚至C编译器也是让人讨厌的,但至少它们是可用的。它们产生的代码非常可怕,不存在优化。我产生了一个想法,我自己能够写一个更好的C编译器。

我向一个同事透漏了这个想法,他建议我和他,还有一个当地C的大牛一起吃午餐,该大牛将给我如何开展的一些建议。我们过去了,我的朋友向这位大牛介绍了我的宏大目标。他鄙视我的回答一直刻在我的脑子里,“你到底算老几,你居然认为你能写一个C编译器?”

现在想想我不得不感谢他,因为我发现 向他炫耀的欲望成为了最有力的动机。我开始实现C编译器,也就是广为人知的Datalight C。感谢我在优化上的兴趣,它成为PC上第一个拥有数据流(data-flow)的优化编译器。这样一个概念当时太新了,以致于在PC杂志基准陷入了麻烦,因为编译器认为基准什么也没有做而删除了所有的废弃代码——记者误认为我的编译器有问题,或作假,Datalight C得到了一个负面评论。(当然,这使我更加疯狂,那个年代还没有随处可用的互联网,我无法发表辩驳文章。)

后来被转化为Zortech C。那时候,PC上已经有很多其他的C编译器了(我想那时候有30个)。我调查一番找到了竞争优势,在书店发现了Bjarne Stroustrup的书。我想,“嗯,加一堆新的关键词,数月之内,我将有一个C++编译器!”可能是看轻了那个编程的世纪。如果我知道我面临什么,或许我会相信那个说我做不到的人。

不管如何,80年代末很多人正工作在C的继任者上。

你甚至在那时的新闻组里找到引用叫做“D”的项目。由于各种原因,包括Zortech的一款便宜的C++编译器准备登陆最流行的平台,C++埋葬了其它的语言,并统治了90年代的编程;我深受鼓舞。

随着时间的推移(那时候是90年代),我也写了生成原生代码的Java编译器和一个JavaScript编译器/解释器。这些产品不够成功。我注意到,忙于我需要的东西 要比 忙于我被告知的其他人需要的东西 好一点点。

比如,一天我和一个程序员朋友慢跑时,他说,“世界急切追求的是能生成原生代码的Java编译器。你会因此发大财的!我使用Java,它是真正的必需品。”我告诉他,碰巧了,我写了一个,他马上就可以开始使用。当然,他从来没有用。

我发明了《Empire》游戏是因为它是我想玩的游戏。我开发一个C编译器是因为我需要用来开发《Empire》(和其它项目)的较好的编译器。Java和JavaScript编译器是其他人的想法。不过还是回到D的出处。

没有人工作在编译器上超过15年,而不会产生语言优化的想法。我尝试了C和C++编译器的很多语言优化,它们都太平常了。没有人对语言扩展感兴趣,他们想要标准的可编译的语言,他们是对的。不幸的是,得到能够被标准委员会采用的想法是一个费力的、常年官僚的过程——我忍受不了这个过程。

在1999年,我认为我累了,在我变疯之前我花了6个月看电视。

是时候返回生活了。对于现存语言存在问题的抱怨由来已久了;我决定给机器商店通电。当解决这样的问题时,我总是想起Gimli矮人【注3】:“死亡是一定的,有小的成功机会。我们还等什么?”为什么不是呢?至少我手握长剑,为光荣的战争而战斗。

因此D启程了,踉踉跄跄做为一个独立的项目。如果我没有为某种语言写过编译器,我用它编程就从来不觉得舒服(我知道,又一个怪癖),但是我有足够的经验实现各种语言,以致于我对让D运行起来非常有信心。如今我也充分利用了现存C++编译器生态系统来工作。

数年后,D首次出现在Slashdot,它开始快速地引起了用户和贡献者的注意。事实证明,我在从一种语言想要的东西中,很难成为一个唯一的人!D和全世界的贡献者一道,怀着雄心疯狂地成长。甚至在数月前的Dconf2013大会上,我们才知道彼此是什么样子。(这是互联网革命的最伟大的方面:你能够成功地与其他人协作,而不知道他们的性别、年龄、长相、种族、宗教、语言、文化、残疾、历史等等。它纯洁得像知识界的精英。只有你的想法、贡献以及你如何展示自己。)

就像D的情况,没有互联网它就不能存在。其他完全不具可比性的热心人怎样才能走到一起?像github和bugzilla之类的协作工具的崛起对于D的发展起到了绝对的关键作用(当然,还有开源模式!)。

但是我也不得不学习,经常是痛苦的方式:

  1. 我的天性趋向于单打独斗。我曾经在各种工作得到的绩效考评,通常包含了像“Walter需要学习与其他人更好地工作”之类的话。我一度几近疯狂地急切地想控制D社区的一切,我不得不改变了。
  2. 我不得不学习如何管理都是志愿者参与的项目。既然我不支付给任何人报酬,我就不能要求任何人做任何事情。我不得不找到其它方法。我的性格测试非常靠近“呆子”的排名,因此激励别人于我而言不是自然的。这实际上是一个令人着迷的挑战。
  3. 在D论坛,对新语言特性的建议每天都有。我不得不说太多“不”,真很难说出口,让提建议的人听到也比较痛苦。
  4. 管理是一件苦差,我不太适应。我在Zortech就没有做好这个工作;在各种合作的工作中,我(英明地)从来没有被晋升到管理。但是有了D,这不能回避了——我不得不学习如何管理,因为我想让D走向成功。
  5. 我朋友知道,我热爱辩论。我参与了很多网上的口水战。但是我在D论坛不能那样做,因为根据口水战的结果,没有人曾经改变过他们的想法,不管他们错得有多严重:-)。所有这些经验实际上变成了一个奇妙的优势——我能够分辨出一个交谈帖子在什么时候将开始演变成徒劳的争论,然后采取措施来降温并消除掉。

我仍然不得不与急切的”Shields up! Phasers on vaporize!”愿望战斗。当然,当D论坛的任何人都同意时,这对我就成为一件进行中的工作。D过去是、并继续保持一种令人尖叫的体验,它从很多其它语言借鉴了最好的想法,它也是来自世界各地的很多、很多贡献者的大量的、无私的努力的总和,他们一直只是以他们完成的成就为自豪。

所有这一切产生了一个结果,我特别珍惜,我爱用D编程。它是我希望我能一直拥有的语言。我很开心我没有听唱反调的人、Debbie Downers,当然还有多年前的无名的C大牛,我欠他们一个感谢。

那么,你想编写你自己的语言吗?我所能说的全部就是:死亡是一定的,有小的成功机会。你们还等什么?

注1:Tom Swift:http://en.wikipedia.org/wiki/TomX8XSwift
注2:Computer Strategy Game 战略游戏(也叫策略游戏)是一种广泛存在于图板游戏、电视游戏和电脑游戏的游戏形式。它要求游戏的参与者“拥有”做出决策的能力。在战略游戏中,决策对游戏的结果产生至关重要的影响。战略通常是与运气相对的,然而,很多游戏既包含战略成分又包含运气成分,这给战略游戏的划分带来一定的困难。因此,我们可以用游戏的战略成分来描述这个游戏。
注3:http://zh.wikipedia.org/wiki/矮人_(中土大陸)


原文 How I Came to Write D
翻译 腊八粥


思否编辑部
4.3k 声望116.9k 粉丝

思否编辑部官方账号,欢迎私信投稿、提供线索、沟通反馈。