每个程序员都应该学习的优秀代码
作者| Shalitha Suranga
翻译|王利民
规划|田
有时候,开发者写出来的代码可以惊人的利用硬件,打动全世界。
业余时间会浏览Github的代码库。在使用新的计算机软件、工具或实用程序时,我也喜欢琢磨它的运行机制。通常我会研究它的代码库,了解它的内部模块和外部依赖是如何有机结合完成工作的。
前几年看Python代码,突然发现一些用C语言写的源文件,查了一下GNU C编译器集合的实现。我发现这个高级C语言编译器是用C语言写的。学习事物的内部结构,深入理解,可以颠覆我们的认知,学习到丰富的知识。过去的开发者通过自己的努力,为现代开发者创造了一个和平的世界。作为现代开发者,应该感谢他们的出色工作。
当我浏览Github代码库的时候,我注意到下面的大作都是各地的开发者完成的。
阿波罗11号导航计算机
阿波罗11号首次使人类成功登陆月球。只有4KB物理内存的阿波罗导航计算机(AGC)完成了对航天器的控制。自动增益控制的软件是用自动增益控制汇编语言编写的,存储在一个特殊的只读存储器中,称为组内存。之前有人把源代码的扫描件上传到了网上。然后,将这些模块转换成文本文件,上传到Github代码库。
AGC登月模块中的代码片段,作者截图
阿波罗工程团队为了取得如此惊人的成就,付出了巨大的努力,写出了大量的汇编代码。在20世纪60年代,编程比现在困难得多。当时的编程语言多为低级语言,需要硬件直接操作。因此,程序员必须精心编写优化代码,以提高硬件使用效率。
雷神之锤3竞技场
雷锤III——竞技场是id Software开发的第一人称射击游戏。它发展于20世纪90年代,当时由于id Tech3等游戏引擎的出现,3D游戏行业开始崛起。不像现在,硬件资源非常有限。因此,游戏开发人员必须编写精心优化的代码来渲染图形元素。很多游戏编程都需要实现向量归一化,这就对平方根倒数运算提出了要求。如前所述,开发人员必须为这些与图形计算相关的任务选择最有效的算法。所以雷锤III——竞技场的开发团队用了一个非常巧妙的方法来计算倒数平方根,比如下面的关卡计算。
雷神之锤3竞技场平方根倒数快速算法,作者截图
这段代码的优化水平,以及90年代能开发出这么优秀的电脑游戏,实在是太神奇了。现在的游戏开发通常不需要处理这种级别的计算,因为物理功能已经由游戏引擎实现了。
GNU编译器代码集
c语言是高级编程语言的鼻祖,因为它非常接近硬件,能提供很好的可读性。作为C语言的编译器,GNU是自引导的。换句话说,它是一个应用了编译器引导概念的C语言程序。Github上的GNU编译器代码库中的这个文件是我见过的最长的C源文件(可能有更长的C源文件,但我没见过)。
GNU C 编译器中的解析器的源文件有 2 万多行代码,作者截图
Chromium
流行的 Web 浏览器(例如 Google Chrome,Microsoft Edge 和 Opera)很多是基于 Chromium 开源项目,该项目有两个主要依赖:1)Blink 渲染引擎。它是 WebCore 库的一个分支,该库由 Webkit 团队基于 KHTML/KJS 进行开发;2)v8 JavaScript 引擎。该引擎由 Chromium 团队开发。毫无疑问,Chromium 代码库非常大,并且依赖很多第三方模块,例如 gRPC 和 Skia。但是,Chromium 团队以一种非常优雅的结构来组织所有组件。他们非常明智地将用户界面和内部函数分开,以提高整个工程的可维护性。
划分良好的 ChromiumUI 组件抽象层的目录结构,作者截图
此外,此代码库还包含 Chromium Android 和 iOS 手机端程序的源代码。大规模的跨平台应用程序目录结构的划分可能会有些复杂。但是,Chromium 对 Linux,Windows 和 Mac 不同平台代码目录结构的划分做的非常棒。
Gitk
如今,基本上每一个软件开发团队都会使用 Git 来进行代码历史和版本的管理。Git 最初由 Linux 内核的创始人 LinusTorvalds 开发。确实,Gitk 的源文件的 Git 代码中一个神奇的模块。Gitk 是一个 GUI 应用程序,可以让我们以可视化方式浏览历史提交记录。我们可以使用以下的 CLI 命令来比较两次提交之间的差异。
但是,借助 Gitk 的可视化展示方式,我们可以更快速地明白不同提交之间的差异。Gitk 的整个源代码只有一个文件。它是使用 Tk UI 工具包(Tcl 的扩展程序)以 Tcl 脚本语言编写的。它仅仅通过一个源文件就实现了整个 GUI 应用程序,还选择了一种动态编程语言来大大加快 GUI 应用程序的开发速度。
Gitk 由约 1 万 2 千行代码的单个源文件来实现,作者截图
