UNIX是從哪裡來的?

致所有人的問候🙂這幾週,我讀了一些編程方面的書,這讓我很高興,事實是,學習編程的最佳方法總是帶著一本書,任何可以找到的文章,教程,指南(包括我的)都僅僅是將基準與有關該主題的真實書籍進行比較時。 現在,我們還必須定義什麼是“真正的”書,因為並非所有書通常都是好書,而且許多書甚至可能花費超過其真正價值並浪費時間。

這些年來,我所閱讀的書籍清單和我可以推薦的書籍清單相差很大,但是毫無疑問,在我們最喜歡的一些書籍中(沒有特定的順序):

  • 馬特·沃克(Matt Walker)通過CEH認證的道德黑客。
  • Python入門:Magnus Lie Hetland撰寫的《從新手到專業》。
  • 黑客:喬恩·埃里克森(Jon Erickson)的剝削藝術。
  • Massimo Banzi撰寫的Arduino入門。
  • Cameron Newbam和Bill Rosenblatt學習bash Shell。
  • 學習Arnold Robbins,Elbert Hannah和Linda Lamb的vi和vim編輯器。
  • Greg Kroah-Hartman(也是Gentoo開發人員)的堅果殼中的Linux內核。
  • Jens Gustedt撰寫的Modern C
  • 《 Shellcoder手冊》,作者是克里斯·安利(Chris Anley),約翰·希斯曼(John Heasman),費利克斯(FX)Linder和杰拉爾·裡查特(Gerardo Richarte)。
  • Brian W. Kernighan和Dennis M. Ritchie(C的創建者)的C編程語言
  • Richard Stallman,Roland Pesch,Stan Shebs等人使用GDB進行調試。
  • 黑客入侵Linux:來自ISECOM研究人員的Linux安全秘密和解決方案,包括Pete Herzog,MargaBarceló,Rick Tucker,Andrea Barisani(另一位前Gentoo開發人員),Thomas Bader,Simon Biles,Colby Clark,Raoul Chiesa ,Pablo Endres,Richard Feist,Andrea Ghirardini,Julian“ HammerJammer” Ho,Marco Ivaldi,Dru Lavigne,Stephane Lo Presti,Christopher Low,Ty Miller,Armand Puccetti等。
  • 操作系統:Dhananjay M. Dhamdhere的基於概念的方法
  • Scott Chacon和Ben Straub製作的Pro Git
  • 專家C編程:Peter Van Der Linden的深層秘密。

我可以對這些書中的每一個都說得很高,但是今天,我們將從清單的最後一本書中摘錄一些內容,因為許多這些選題書使我著迷,並幫助我更好地理解了C和程序設計的一些複雜秘密。 🙂

Unix和C

當我們談論UNIX時,歷史與該系統的起源和語言的發展息息相關,而該語言的發展至今是該系統及其派生工具(包括Linux)開發中使用最多的語言之一。 奇怪的是,這兩個人都是“錯誤”的產物。

複數 這是一個龐大的項目,將貝爾實驗室,通用電氣和麻省理工學院自身聯合起來,創建了一個操作系統,該系統存在許多錯誤,其中最重要的性能故障之一就是使該系統幾乎無法使用。 我們談論的是1969年,因此當時的硬件無法支持運行系統本身所需的大量軟件。

直到1970年,幾名貝爾工程師才開始為PDP-7開發簡單,快速,輕便的操作系統。 整個系統已經寫成 彙編 並被稱為 UNIX的 模仿 複數 因為他只想做幾件事,但要做好事,而不是第二件事所意味著的巨大浪費。 現在您可以了解為什麼 時代 從1月XNUMX日開始 1970。 for對我來說,這是一個相當奇怪的事實。 那時,仍然沒有人談論C本身,而是談論 新B 因為Ritchie的想法來自當時已經使用的B語言。

早期C

多年來(1972-3),自從新語言開始形成以來,就開始使用術語C,並且在這個時候出現了另一個奇怪的事實,許多程序員和程序員都在說:

程序員知道您從0開始而不是從1開始計數。

好吧,這並不是完全正確的-直到今天,這種方式一直被認為是因為在創建時,對於編譯器編寫者而言,使用以下方法更容易計算數組 抵消,這些表示從原點到所需目標的距離,這就是為什麼:

array[8]=2;

它告訴我們元素 由於將2個單位添加到數組中以到達要存儲元素8的存儲空間,因此將數組的定義為2,因為在C之前,由於C,許多語言從1開始計數,現在幾乎所有語言都從0開始🙂這不是程序員的錯,而是編譯器作者的錯。

伯恩貝殼

這個主題儘管與C沒有直接關係,但可以幫助一個以上的人理解為什麼Shell編程如此奇特,並且知道這一點當然很奇怪。 史蒂夫·伯恩(Steve Bourne)在那個季節為Algol-68編寫了一個編譯器,這是一種其中的鍵( {} )替換為單詞,因此我們可以在C中定義如下:

#define IF if(

#define THEN ){

#define ELSE }else{

#define FI };

這些只是Algol理解的一些示例,但是如果我們今天將其應用於Shell編程,您將理解為什麼在Shell中您的程序需要一個 fi 每個 if 🙂當然很有趣。

開始閱讀

我無法告訴您這本書的所有細節,特別是因為其中許多已經是編程主題,需要先了解背景知識,但是我想我會與您分享一些我發現的奇怪軼事🙂我還沒有有時間去做一些在待辦事項上的文章,因為這些最近的書簡直讓我著迷,我每天都在享受它們,而最重要的是試圖使他們充分理解它們。 問候,很快我將可以與您分享更多主題,問候。


本文內容遵循我們的原則 編輯倫理。 要報告錯誤,請單擊 這裡.

13條評論,留下您的評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   約翰 他說:

    您的文章對我來說非常有趣。 非常感謝。

  2.   HO2Gi 他說:

    一如既往的有趣。

  3.   何塞·拉斐爾 他說:

    非常有趣的澄清是好的。

  4.   亞歷克斯 他說:

    EXCELENTE

  5.   丹尼爾加 他說:

    有趣的! 非常感謝。

  6.   塞貢多 他說:

    複數? 它不會是multics(https://en.wikipedia.org/wiki/Multics)

    索引從1開始的語言是撒旦的發明...

    1.    克里斯·阿德 他說:

      有趣的註釋🙂我想在歷史上的某些時候都使用了兩個術語:

      https://www.landley.net/history/mirror/collate/unix.htm

      顯然是90年代中期寫的同一本書。

      感謝您的澄清🙂問候

      1.    塞貢多 他說:

        是的,這真是一件奇怪的事,您使我感到懷疑,我看了一份“購買的” Expert C編程副本:深刻的機密和multics的到來,這是我第一次聽說複數。 多麼好奇,讓我們想起了特里克斯兔

        1.    克里斯·阿德 他說:

          哈哈哈當然很好奇,我檢查了我的英語深層機密,那裡也說著密爾度(因為你也讓我懷疑了)……也許那是時間的一種表達😛

          問候

  7.   ED774 他說:

    偉大的貢獻

  8.   匿名 他說:

    有趣的是,儘管可以肯定地,Multrics是由於打印錯誤而引起的,因為該操作系統的原始名稱是Multics,而Unix最初被稱為Unics,確切地指的是那個很棒的操作系統,最終是由語音,Unics se轉換為Unix之後,現在,您只需提及誰被認為是Unix的作者; 肯·湯普森(Ken Thompson),傳說中湯普森(Thompson)和里奇(Ritchie)都在貝爾實驗室的自助餐廳裡對他們的項目發表評論,這是里奇向湯姆普森(Thomposon)建議他用C程序重寫他的Unics,他編寫的語言是…… ,是歷史。 😉

    順便說一下,以前所有程序都是用機器的指令編寫的,這使得它們完全依賴於硬件,C的創新之處在於它使編寫程序更容易,並且語言獨立於實現程序設計的硬件。編譯器是一種多年後的Java的哲學,即程序不依賴於操作系統,因此添加了著名的Java虛擬機。

    1.    克里斯·阿德 他說:

      關於傳奇的壞事是,它們以不止一種方式扭曲了歷史……而且它們可以使您認為某些事情在不存在的情況下會發生……就像湯普森和里奇之間的現有對話(我會隨意省略)這樣的事實,因為它導致歷史和技術錯誤(C不在UNIX之前)...

      至於第二個......另一個歪曲現實的傳說,因為在C之前有B,A,pascal,Ada,algol-60,PL / 1和其他一些正確編程的語言(與彙編語言大不相同)以及它們的方言取決於處理器的硬件的體系結構),因此C並沒有在這種意義上進行``創新'',他只是採用了其他語言中已經存在的解決方案,最終它變得比這些語言更快,更好地流行....唯一的部分事實是Java基於可移植性的概念後來創建了虛擬機,但是Java不僅為此依賴C,而且還遵循其他模型,否則我們將在Java中沒有面向對象的編程範式。

      我覺得我應該澄清這種情況,因為任何不那麼精通的人都可以將其視為真實,然後相信它是這樣發生的...問候🙂

  9.   伊格納西奧·埃斯基維爾(Ignacio Esquivel) 他說:

    與往常一樣,感謝您的貢獻,本文非常有趣。