最偉大的 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


來源: www.habr.com

添加評論