值得每個碼農(nóng)去學(xué)習(xí)的優(yōu)秀開源代碼
我通常會在有空的時候瀏覽Github存儲庫。 另外,當我開始使用新的計算機軟件,工具或?qū)嵱贸绦驎r,我喜歡查看特定軟件的工作方式。 大多數(shù)時候,我看一下它的代碼庫,以了解事物如何與內(nèi)部模塊和外部依賴項完全配合。
幾年前,我正在檢查Python語言實現(xiàn)的源代碼。 此后,我注意到了幾個C源文件,并突然檢查了GNU C編譯器集合的實現(xiàn)。 我發(fā)現(xiàn)這個現(xiàn)代的C編譯器是用C本身編寫的。 學(xué)習(xí)事物的內(nèi)部結(jié)構(gòu)并進一步深入,可以為我們帶來驚人的感覺和豐富的知識。 過去的開發(fā)人員已經(jīng)做出了巨大的努力,為現(xiàn)代開發(fā)人員創(chuàng)造了一個和平的世界。 但是,作為現(xiàn)代開發(fā)人員,我們應(yīng)該感謝他們的出色工作。
當我瀏覽Github存儲庫時,我注意到世界各地的開發(fā)人員已經(jīng)完成了以下令人印象深刻的工作。
阿波羅11號制導(dǎo)計劃
阿波羅11號是第一個成功的使人類登月的任務(wù)。 只有4 KB物理內(nèi)存的阿波羅制導(dǎo)計算機(AGC)為控制航天器提供了支持。 AGC的軟件以AGC匯編語言編寫,并存儲在稱為繩索存儲器的特殊只讀存儲器中。 一段時間之前,已掃描了源代碼的掃描副本,這些副本已上傳到Internet。 此后,有人將幾個模塊轉(zhuǎn)換為文本文件,然后將其上傳到Github存儲庫。
> Piece of code from the Lunar module of AGC, screenshot by the author
阿波羅(Apollo)工程團隊付出了巨大的努力,通過用匯編語言編寫了許多代碼行,以取得如此驚人的成就。 在1960年代,編程比現(xiàn)在更加困難。 因為在那時,編程語言的抽象級別較低。 此外,程序員必須編寫超級優(yōu)化的代碼才能有效地使用硬件。
雷神之錘III競技場
Quake III Arena是由id Software開發(fā)的第一人稱射擊游戲。 它是在90年代開發(fā)的,當時3D游戲行業(yè)剛剛開始使用id Tech 3游戲引擎進行開發(fā)。 當時,硬件資源非常有限。 因此,游戲開發(fā)人員必須編寫精心優(yōu)化的代碼以呈現(xiàn)圖形元素。 許多游戲編程計算都需要向量歸一化概念,這提出了平方根反比計算的要求。 如前所述,開發(fā)人員必須為這些與計算機圖形學(xué)相關(guān)的工作選擇最有效的算法。 因此,Quake III Arena團隊使用一種非常聰明的方法進行快速反平方根計算,如下所示,使用位級計算。
> Fast inverse square root function in Quake III Arena, screenshot by the author
這段代碼中使用的優(yōu)化水平以及為在90年代實現(xiàn)如此出色的計算機游戲而編寫的整個代碼顯然令人驚訝。 如今,游戲開發(fā)通常不處理這一級別的計算,因為物理功能已經(jīng)由游戲引擎實現(xiàn)。
GNU編譯器集合
C編程語言就像現(xiàn)代計算之父一樣,因為它通過提供良好的人類可讀的抽象級別而與硬件之間的距離非常近。 確實,GNU C編譯器已啟動。 換句話說,它是使用編譯器自舉概念以C編程語言編寫的。 我注意到我從Github上的GNU編譯器集合的代碼庫中看到了最長的C源文件(可以有比這更長的C源文件,但這是我看到的)。
> GNU C Compiler's C parser source file has more than 20k lines, screenshot by the author
Google Chrome
流行的Web瀏覽器(例如Google Chrome,Microsoft Edge和Opera)基于Chromium開源項目,該項目具有兩個主要依賴項:Blink呈現(xiàn)引擎(是由Webkit團隊開發(fā)的WebCore庫的一個分支),以及v8 JavaScript引擎, 由Chromium項目團隊開發(fā)。 毫無疑問,Chromium代碼庫非常大,并且具有許多第三方模塊,例如gRPC和Skia。 但是,Chromium團隊以很好的方式構(gòu)造了所有組件。 他們明智地分離了用戶界面相關(guān)的邏輯和內(nèi)部功能邏輯,以在整個項目中實現(xiàn)非常好的可維護性因素。
> Well-organized abstract UI controls of Chromium, screenshot by the author
此外,此代碼庫還包含Chromium Android和iOS應(yīng)用程序的源代碼。 構(gòu)建大規(guī)模的跨平臺應(yīng)用程序可能會有些復(fù)雜。 但是,Chromium對Linux,Windows和Mac的平臺特定代碼有令人印象深刻的分離。
Git
如今,Git幫助幾乎每個軟件開發(fā)團隊管理編碼歷史和版本。 Git最初由Linux內(nèi)核的創(chuàng)始人Linus Torvalds制作。 確實,Git的代碼庫包含一項神奇的工作,這是Gitk的源文件。 Gitk是一個GUI應(yīng)用程序,可以幫助我們直觀地瀏覽提交。 我們可以使用以下CLI命令來檢查兩次提交之間的差異。
- $ git diff <commit hash> <commit hash>
但是,由于它是視覺工具,因此Gitk允許我們這么快地看到修改。 Gitk的整個源代碼只是一個文件。 它是使用Tk UI工具包(是Tcl的擴展)以Tcl腳本語言編寫的。 他們通過僅用一個源文件實現(xiàn)整個GUI應(yīng)用程序,也通過選擇動態(tài)編程語言以加快GUI應(yīng)用程序開發(fā)來完成了出色的工作。
> Gitk was implemented as a single source file with around 12k lines, screenshot by the author