有空的时候,我浏览一下Github的代码库。在使用新的计算机软件、工具或实用程序时,我也喜欢考虑它是如何工作的。通常,我研究它的代码库以了解它的内部模块和外部依赖项如何组合在一起以完成工作。几年前,在查看Python语言代码时,我偶然发现了一些用C编写的源文件,并检查了GNUC编译器集合的实现。我发现这个高级的C编译器是用C写的,学习事物的内部结构,加深理解,可以颠覆我们的认知,学到丰富的知识。过去的开发人员努力为现代开发人员创造一个和平的世界。作为现代开发人员,我们应该感谢他们的出色工作。当我浏览Github存储库时,我注意到世界各地的开发人员完成了以下杰作。阿波罗11号制导计算机(AGC)阿波罗11号首次将人类送上月球。只有4KB物理内存的阿波罗制导计算机(AGC)完成了对飞船的控制。AGC的软件是用AGC汇编语言编写的,并存储在一个称为ropememory的特殊只读存储器中。之前有人把源代码的扫描件上传到网上。然后将这些模块转换为文本文件并上传到Github存储库。AGC登月舱代码片段,作者截图Apollo工程团队付出了巨大的努力,编写了大量的汇编代码,才实现了如此惊人的壮举。1960年代的编程比现在难得多。因为那时候的编程语言大多是需要直接操作硬件的低级语言。因此,程序员必须编写经过良好优化的代码才能更有效地使用硬件。QuakeIIIArenaQuakeIII-Arena是由idSoftware开发的第一人称射击游戏。它是在90年代开发的,当时由于idTech3等游戏引擎的技术,3D游戏行业正在兴起。不像现在,那时候的硬件资源非常有限。因此,游戏开发人员必须为图形元素的渲染编写经过良好优化的代码。许多游戏编程都需要向量归一化,这就需要求平方根的倒数。如前所述,开发人员必须为这些与图计算相关的工作选择最高效的算法。因此,HammerofThunderIII-Arena开发团队使用了一种非常聪明的方法来进行倒数平方根计算,如下所示使用位级计算。QuakeIIIArena中平方根倒数的快速算法,作者截取这段代码的优化程度,90年代能开发出这么好的电脑游戏,真是了不起。今天,游戏开发通常不需要处理这种级别的计算,因为物理功能已经由游戏引擎实现。C语言,GNU编译器代码集,是高级编程语言的鼻祖,因为它既非常接近硬件,又提供了很好的可读性。作为C语言的编译器,GNU是自引导的。换句话说,它是一个应用编译器自举概念的C语言程序。Github上GNUCompiler存储库中的这个文件是我见过最长的C源文件(可能还有比这更长的C源文件,但我没见过)。GNUC编译器中解析器的源文件有20,000多行代码,作者截图Chromium许多流行的网络浏览器(如GoogleChrome、MicrosoftEdge和Opera)都是基于Chromium开源项目,该项目具有两个主要依赖项:1)Blink渲染引擎。它是WebCore库的一个分支,由Webkit团队基于KHTML/KJS开发;2)v8JavaScript引擎。该引擎由Chromium团队开发。毫无疑问,Chromium代码库非常庞大,并且依赖于许多第三方模块,例如gRPC和Skia。然而,Chromium团队将所有组件组织在一个非常优雅的结构中。他们非常明智地将用户界面和内部功能分开,以提高整个项目的可维护性。分区良好的ChromiumUI组件抽象层的目录结构,作者截图此外,该代码库还包含ChromiumAndroid和iOS移动端程序的源代码。大型跨平台应用的目录结构划分可能会有些复杂。不过,Chromium对Linux、Windows和Mac不同平台的代码目录结构进行了很好的划分。Gitk如今,基本上每个软件开发团队都使用Git进行代码历史记录和版本管理。Git最初是由Linux内核的创建者LinusTorvalds开发的。确实,Gitk的源文件是Git代码中的一个神奇模块。Gitk是一个GUI应用程序,它允许我们直观地浏览提交历史记录。我们可以使用以下CLI命令来比较两次提交之间的差异。$gitdiff
