编辑: 过于眷恋 | 2018-02-02 |
8 编程人生:15 位软件先驱访谈录已经搬到加州大学伯克利分校求学,我正好可以随她而去. Seibel:Norvig当时在伯克利? Zawinski:是啊.那份工作很奇特.他们有一大群研究生在做自然语言理解 方面的研究,大家基本上都是语言学家,偶尔写些程序.因此他们打算找个 人接手他们编写的那些零零碎碎的代码,并整合成真正能用的东西. 这活儿对我来说相当困难,因为我没有相关背景,无法理解他们到底在 做些什么.因此常常碰到这样的情形:我盯着某样东西,但完全不知所措. 我不理解那是什么意思,不知道下一步该做什么,也不了解要读些什么才能 真正理解它.于是我跑去问Peter.他很礼貌地回应我: 你现在理解不了, 这很正常,周二我有时间,到时给你讲解一下. 结果我就无所事事.于是 我把大块时间都用在折腾窗口系统、 摆弄屏幕保护程序以及之前出于好玩而 捣鼓的那些用户界面之类的程序上. 就这么过了6个月或8个月,然后我意识到自己完全是在虚掷光阴.我什 么都没为他们做,觉得自己就像在度假.后来有几次我真的忙得一塌糊涂, 那种时候回想起在伯克利的那段日子,我就问问自己: 你怎么会放弃那份 度假般的工作?不会是脑袋短路了吧?他们可是付钱让你写屏保的!
9 Jamie Zawinski
1 最后我去了Lucid① ,当时仅存的两家Lisp环境开发商之一.我决定离开 伯克利的主要原因是我觉得自己一事无成,那种感觉很糟.我周围的人都不 是程序员.当然他们都不赖,我仍和其中几个人保持着友谊.只不过他们都 是语言学家,比起解决实际问题来,他们对抽象的事物感兴趣得多.而我想 做出点实际的东西,有一天就能指着某样东西说: 瞧,这活儿漂亮吧,是 我干的. Seibel:你在Lucid的工作成果是XEmacs,不过,你去那里一开始就是做Lisp 方面的开发吗? Zawinski:是的,我在那里做的第一个项目就是用Lisp,哦,我都记不得 是什么机器了,不过应该是台有着16个处理器的并行计算机,我们使用的 Lucid Common Lisp变体提供了几个控制结构,可以将创建的进程分别部署 到不同的处理器上. 我做了一些后端优化工作,主要是减少创建线程的开销,从而让那台机 器可以完成有用的计算,比如实现并行Fibonacci算法,而不用再把时间耗费 ① 由Richard P. Gabriel于1984年创办,1994年破产,Lucid Common Lisp的所有权被 Harlequin收购,后者于1999年被Global Graphics收购,随后Global Graphics将Lucid Common Lisp相关权利卖给Xanalys公司,由此催生了LispWorks公司,现在仍以Liquid Common Lisp为名在出售Lucid Common Lisp.
10 编程人生:15 位软件先驱访谈录在为每个线程新建栈组(stack group)上.我非常享受整个过程.那是我第 一次有机会使用那么奇特的机器. 在这之前我还负责把Lisp迁移到新机器上.大致过程就是,有人已经针 对新架构写好了编译器后端,并且已编译好自举代码.我会拿到这个二进制 文件,据称是针对这台机器的可执行代码,接着我必须剖析它们的装载器格 式,以便写个简单的C程序,装载拿到的文件,将页面置为可执行,并跳转 到那个页面.幸运的话,你就会看到Lisp提示符,之后即可开始手工装载其 他东西. 对任何架构来说,这都是件难事,因为装载器几乎没什么对路的文档. 你只能找个C程序编译一把,然后用Emacs逐字节分析,编辑其中的字节, 尝试把某个字节改成零,看看有什么结果,程序会不会停止运行. Seibel:你刚才提到它没什么对路的文档,指的是文档不准确,还是根本就 没有文档? Zawinski:通常都有文档,不过往往都是错的.或者文档太过陈旧,讲的是 三个版本之前的东西,天知道.而遇到问题,往往就是要追究精确细节的时 候.有时只是略微改了一下某个文件,装载器就不再认为那是个可执行文件