最精彩的Unix程序

这篇文章的作者道格拉斯·麦克罗伊(Douglas McIlroy)是一位美国数学家,工程师和程序员。他以在Unix操作系统中开发管道,面向组件编程的原理以及几个原始实用程序而闻名,该实用程序包括:spell,diff,sort,join,speak,tr。

有时,您会遇到非常精彩的程序。回顾过去,我多年来一直在整理Unix的明珠。基本上,这些程序很少见,不是必需的程序。但是使它们与众不同的是独创性。我什至无法想象我自己想到了其中任何一个的想法。

分享,哪些程序对您也有很大的影响?

PDP-7 Unix


首先,PDP-7 Unix系统本身。它的简单性和功能使我从功能强大的大型机切换到小型机器。这是分层文件系统的精髓所在,它是一个单独的外壳程序和用户级过程控件,Multics在经过数百年的开发之后,无法在大型机上实现。Unix的缺点(例如,文件系统中的记录结构)与它的创新(例如,shell中的输入输出重定向)一样具有启发性和解放性。

直流电


罗伯特·莫里斯(Robert Morris)的用于可变精度台式计算器的数学库使用反向误差分析来确定每一步所需的精度,以达到用户指定的精度。在1968年北约软件工程会议上,我在有关软件组件的报告中提出了可以产生任何所需准确性的参考程序,但是我不知道如何将它们付诸实践。dc仍然是我所知道的唯一可以做到这一点的程序。

错字


错字会根据它们与文本其余部分的相似性来排列文本中的单词。像“ hte”这样的眼镜往往排在最后。罗伯特·莫里斯(Robert Morris)自豪地说,该程序对于任何语言都将同样有效。尽管拼写错误无法帮助发现语音错误,但对于任何键入的单词来说,它都是一个真正的发现,并且在出现有趣程度不高但对词典进行更准确的拼写检查之前取得了很多成就。

错字在内部和外部都一样意外地排列。相似性度量算法基于三字组的出现频率,这些三元组以26×26×26的数组进行计数。在很小的内存中,单字节计数器几乎没有足够的空间,因此实现了一种将大数字压缩为小计数器的方案。为避免溢出,对计数器进行了概率更新,以支持对计数器值的对数进行估计。

eqn


随着照相制版的出现,有可能但非常累人地得出经典的数学符号。Lorinda Cherry决定开发一种高级描述语言,不久Brian Kernigan加入了她。他们的杰出举动是用书面形式表达口头传统,因此eqn非常容易学习。eqn是描述数学表达式的语言的第一个预处理器,此后几乎没有改进。

结构


布伦达·贝克(Brenda Baker)开始开发她的Fortan-to-Ratfor转换器,这违背了老板-我的建议。我认为这可能导致源文本的特殊重新排序。它将没有操作员编号,但其他方面不会比Fortran的结构良好的代码更具可读性。布伦达证明我错了。她发现每个Fortran程序都有规范的结构形式。程序员更喜欢规范形式,而不是他们自己最初编写的形式。

帕斯卡


在伯克利的Sue Graham小组创建的编译器中,诊断语法是我所见过的最有用的-并且它是自动完成的。出现语法错误时,编译器建议插入令牌以继续解析。没有试图解释什么是错的。有了这个编译器,我在一个晚上就学会了Pascal,而没有任何指导。

部分


partsLorinda Cherry 的模块隐藏在WWB(Writer's Workbench)程序包中,该模块仅基于一本小词典,拼写和语法规则为英语文本中的单词定义词性。根据此注释,WWB程序显示文本的风格指示符,例如形容词,从属从句和复杂句子的优势。当Lorinda在今日的NBC频道上接受采访并谈论WWB文本中的创新语法检查时,这是电视上首次提到Unix。

egrep


Al Aho希望他的确定性正则表达式解析器能够取代Ken的经典非确定性解析器。不幸的是,后者在egrep构建确定性自动化的同时已经完成了对复杂正则表达式的传递为了赢得这场比赛,Al Aho绕过了自动机状态表呈指数增长的诅咒,发明了一种动态建立仅识别过程中实际访问的表记录的方法。

螃蟹


卢卡·卡德利(Luca Cardelli)迷人的Blit窗口系统元程序产生了虚拟螃蟹,这些螃蟹在屏幕的空白空间中漫游,越来越多地咬住活动窗口的边缘。

一些一般的想法


尽管从外部看不到它,但是理论和算法在大多数此类程序的创建中起着决定性作用:错字,dc,struct,pascal和egrep。实际上,最令人惊讶的是理论的不寻常应用。

列表的几乎一半的原始作者-pascal,struct,parts,eqn-是女性,这大大超过了计算机科学领域中女性的人口比例。

道格拉斯·麦克罗伊(Douglas McIlroy)
,2020年3月

All Articles