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