最伟大的 Unix 程序

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

有时您会遇到非常精彩的节目。 在翻遍我的记忆之后,我编制了一份多年来真正的 Unix 瑰宝清单。 基本上,这些都是非常罕见且不是那么必要的程序。 但让他们脱颖而出的是他们的独创性。 我什至无法想象我自己想出了其中任何一个的想法。

分享哪些节目也让你印象深刻?

PDP-7 Unix

对于初学者来说,PDP-7 Unix 系统本身。 它的简单性和强大功能使我从功能强大的大型机变成了微型机器。 这是大型机上的 Multics 经过数百人年的开发仍无法实现的典型的分层文件系统、独立的 shell 和用户级进程控制。 Unix 的缺点(例如文件系统的记录结构)与其创新(例如 shell I/O 重定向)一样具有启发性和解放性。

dc

Robert Morris 的可变精度桌面计算器数学库使用逆误差分析来确定每个步骤所需的精度,以实现用户指定的结果精度。 在 1968 年的北约软件工程会议上,在我关于软件组件的报告中,我提出了可以产生任何所需精度的参考程序,但我不知道如何将它们付诸实践。 dc 仍然是我所知道的唯一可以做到这一点的程序。

错字

拼写错误根据与文本其余部分的相似性来排列文本中的单词。 像“hte”这样的拼写错误往往出现在列表的末尾。 罗伯特莫里斯自豪地说,该程序对任何语言都同样有效。 虽然打字错误不能帮助您找到拼音错误,但它对所有排字员来说都是一个真正的福音,并且在有趣得多但更准确的字典拼写检查器出现之前它做了很多好事。

错别字在内部和外部一样出乎意料。 相似度度量算法是基于三元组出现的频率,在一个 26×26×26 的数组中计数。 微小的内存几乎没有足够的空间容纳一个字节的计数器,因此实施了一种将大数字压缩到小计数器中的方案。 为避免溢出,计数器以概率为基础进行更新,保持对计数器值对数的估计。

方程

随着照相排版的出现,打印经典数学符号成为可能,但非常乏味。 Lorinda Cherry 决定开发一种更高级别的描述语言,很快 Brian Kernigan 加入了她的行列。 他们的绝妙举措是将口头传统转化为文字,因此 eqn 非常容易学习。 作为同类中的第一个数学表达式语言预处理器,eqn 从那时起就没有太大改进。

结构

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

帕斯卡

由伯克利的 Sue Graham 小组创建的编译器中的语法诊断是我见过的最有用的——而且它是自动完成的。 出现语法错误时,编译器会提示您插入一个标记以继续解析。 没有试图解释什么是错的。 有了这个编译器,我一晚上就学会了 Pascal,手边没有任何手册。

部分

隐藏在 WWB(Writer's Workbench)模块中 parts Lorinda Cherry 仅根据小型词典、拼写和语法规则来确定英语文本中单词的词性。 基于此注释,WWB 程序显示文本的文体指示器,例如形容词、从句和复杂句子的流行程度。 当 Lorinda 接受 NBC 的 Today 采访并谈到 WWB 文本中创新的语法检查时,这是电视上第一次提到 Unix。

埃格雷普

Al Aho 希望他的确定性正则表达式解析器能够超越 Ken 的经典非确定性解析器。 不幸的是,后者已经完成了对复杂正则表达式的传递,而 egrep 建立了自己的确定性自动化。 为了继续赢得这场比赛,Al Aho 发明了一种方法,只在识别过程中实际访问表中的那些条目,从而绕过了自动机状态表呈指数增长的诅咒。

螃蟹

Luca Cardelli 为 Blit 窗口系统设计的迷人元程序释放了虚拟螃蟹,它们在空白屏幕空间中游荡,越来越多地咬掉活动窗口的边缘。

一些一般的想法

虽然从外面看不出来,但理论和算法在大多数这些程序的创建中起到了决定性的作用:typo、dc、struct、pascal、egrep。 事实上,最令人惊讶的是该理论的不寻常应用。

将近一半的列表——pascal、struct、parts、eqn——最初是由女性编写的,远远超过计算机科学领域的女性人口。

道格拉斯·麦克罗伊
2020年XNUMX月


来源: habr.com

添加评论