1700436860
1700436861
我一年多都没去动这些代码,但终于鼓足勇气开始摆弄它。慢慢地、小心翼翼地,我开始了升级。除了缺乏注释和文档,最大的问题是,它极大地依赖于Graphic Systems CAT照排机,而这种机型业已过时。
1700436862
1700436863
最后,我设法找到了所有依赖CAT特殊功能的代码,并换成由字符集、字号、字体和分辨率等排版器特性表驱动的通用代码。我发明了一种排版机描述语言,这样Troff就可以根据特定排版机的能力来产生输出。驱动程序将该输出转换为特定设备所需的输入。这就产生了所谓的与设备无关的版本,我称其为Ditroff[10]。它还使其他文档编制预处理器,特别是Pic,能够利用新排版设备的更高分辨率来绘制线条和图形。
1700436864
1700436865
其中一种设备是摩根泰勒(Mergenthaler)出品的新型排版机Linotron 202。从指标上看,似乎正可取代CAT照排机。它速度快,分辨率高,通过绘图的方式在屏幕上显示字符。它的处理器是Computer Automation出品的标准微型计算机“Naked Mini”。Naked Mini由一个简单的程序控制,类似于我为其他排版机编写的程序。这套设备主要的缺点是价格高昂,在1979年售价5万美元。鉴于我们用旧排版机打出了赫赫战绩,管理层几乎没有经过任何讨论就批准购买新设备。
1700436866
1700436867
Linotron 202一到手,我们就发现它的硬件出乎意料地不可靠;更糟糕的是它的软件。在之后几个月中,摩根泰勒的维修人员几乎每天都要过来,肯·汤普森和乔·康登(图5-8)还开展了对硬件进行逆向工程的壮举。
1700436868
1700436869
1700436870
1700436871
1700436872
图5-8 乔·康登,约1981年(杰勒德·霍尔兹曼供图)
1700436873
1700436874
乔本来是物理学家,但随着兴趣转移,他成了出色的电子电路设计师。他为中心编写了许多用于硬件实验的电路设计工具,并与肯一起设计了Belle国际象棋计算机。他的硬件专业知识对摸透Linotron 202至关重要。
1700436875
1700436876
肯首先为机器上运行的二进制程序编写了反汇编器。(他在某个晚上用几个小时就完成这项工作,而我则回家吃饭,然后回来工作整晚。)
1700436877
1700436878
通过拆解摩根泰勒程序,肯和乔对排版机本身的工作方式有了切身体会。经过几个星期紧张的逆向工程,他们弄清了摩根泰勒的专有字符编码,并编写了新代码,这样我们就可以创造自己的字符,例如,图5-9所示最上端的贝尔系统标志、用于输出棋局和棋盘图的国际象棋字体,以及有多种用途的彼得面容(图5-10)。
1700436879
1700436880
1700436881
1700436882
1700436883
图5-9 记录了与Linotron 202斗智斗勇过程的贝尔实验室备忘录,未正式发布
1700436884
1700436885
1700436886
1700436887
1700436888
图5-10 彼得脸视力表(杰勒德·霍尔兹曼供图)
1700436889
1700436890
肯为摩根泰勒控制器写了B语言解释器,我们则编写B程序来驱动它。有份技术备忘录详细讲述了这个故事。可能出于避免透露摩根泰勒知识产权的考虑,贝尔实验室管理层封存了这份备忘录,但它最终在2013年被公布。图5-9展示的是第一页的部分内容,80-1271-x等不完整的内部备忘录编号表明从未分配过正式编号。
1700436891
1700436892
当202终于运行起来时,其高分辨率使它有可能实现有趣的图效果,包括半色调图像和线图,如图5-9中展示的数字排版机工作流程图。对于后者,我创造了一种名为Pic的语言,可以用文字来描述组织结构图或网络数据包图这样的图形。当然,它的语法部分采用Yacc,词法部分采用Lex。图5-11所示为Pic输入和输出的一个简单例子。
1700436893
1700436894
1700436895
1700436896
1700436897
图5-11 Pic绘图语言(输入和输出)
1700436898
1700436899
5.图书出版
1700436900
1700436901
1700436902
1700436903
1700436904
1700436905
文档编制工具之所以能很好地发挥作用,原因之一是普适性强:它们被广泛应用在手册、技术文件、书籍等出版物上。代码作者们的办公室在同一条走廊上,如果程序有缺陷或者工作不顺畅,就会有强大压力来推动他们修复问题,并在必要时增加功能。当然,这不仅仅适用于文档编制软件。我们都是自己软件的用户,这给了我们改进软件的真正动力。
1700436906
1700436907
计算科学研究中心的成员在20世纪70年代和80年代写出了特别多有影响力的图书,远超人们对一个工业研究实验室的预期。因此,经过一段时间后,贝尔实验室成为著名的计算和计算机科学权威书籍的来源。
1700436908
1700436909
阿尔·阿霍写了几本广泛使用的课本,包括1977年与杰夫·厄尔曼合写的名作“龙书”《编译原理》(Principles of Compiler Design)(图5-12),还有与杰夫及约翰·霍普克罗夫特(John Hopcroft)合写的《计算机算法的设计与分析》(Design and Analysis of Computer Algorithms)。本贾尼·斯特劳斯特鲁普(图5-13)在20世纪80年代创造了C++,几年后写了几本C++书。乔恩·本特利在《ACM通讯》上的专栏文章结集成《编程珠玑》(Programming Pearls)一书。数学中心的迈克·加里(Mike Garey)和戴维·约翰逊(David Johnson)用Troff和Eqn为他们的大作《计算机和难解性:NP完全性理论导引》 (Computers and Intractability: A Guide to the Theory of NP Completeness)排版。我们也以图书形式出版了Unix 和Plan 9的用户手册,诸如此类。这些出版物成为好几代程序员和计算机科学专业学生的标准教材和参考书。
[
上一页 ]
[ :1.70043686e+09 ]
[
下一页 ]