15

每一位程序员都应该学习的优秀代码

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzIzNjUxMzk2NQ%3D%3D&%3Bmid=2247506475&%3Bidx=1&%3Bsn=2982e5cf41a7cee3d07d2f4e800a3e7b
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

uaAfiyj.jpg!mobile

作者 | Shalitha Suranga

策划 | 田晓旭

有时,开发人员编写的代码对硬件的利用能达到让人惊叹的地步,并给整个世界留下深刻的印象。

当我闲暇时,我会浏览 Github 的代码库。使用新的计算机软件、工具或实用程序时,我也喜欢琢磨下它的运行机制。通常情况,我会研究它的代码库,以了解其内部模块和外部依赖是如何有机结合来完成工作。

几年前,我查看 Python 语言代码时,突然发现了一些 C 语言编写的源文件,并检查了 GNU C 编译器集合的实现。我发现这个先进的 C 语言编译器就是用 C 语言编写的。学习事物的内部结构并深入了解,可以颠覆我们的认知并学到丰富的知识。过去的开发人员通过自己的辛勤工作,为现代开发人员创造了一个太平的世界。作为现代开发人员,我们应该感谢他们的出色工作。

当我浏览 Github 代码库时,我注意到各地的开发人员完成了以下的杰作。

1 阿波罗 11 号导航计算机(AGC)

阿波罗 11 号使人类第一次成功地登上了月球。只有 4KB 物理内存的阿波罗导航计算机(AGC)完成了对航天器的控制。AGC 的软件以 AGC 汇编语言编写,并存储在称为磁心线储存器(ropememory)的特殊只读存储器中。之前有人将源代码的扫描副本上传到了 Internet。然后,这几个模块被转换为文本文件,并上传到了 Github 代码库。

riQVBrI.png!mobileAGC 登月模块中的代码片段,作者截图

阿波罗(Apollo)工程团队付出了巨大的努力,编写大量的汇编代码来取得如此惊人的成就。在 1960 年代,编程可比现在困难多了。因为在那时,编程语言多为低级语言,需要直接操作硬件。所以,程序员必须编写精心优化的代码来提高硬件使用效率。

2 雷神之锤 III 竞技场

雷声之锤 III——竞技场是由 id Software 开发的第一人称射击游戏。它开发于上世纪 90 年代,当时由于 id Tech3 等游戏引擎的技术的出现,3D 游戏行业开始兴起。不像现在,那时候硬件资源非常有限。因此,游戏开发人员必须编写精心优化的代码以实现图形元素的渲染。许多游戏编程都需要实现矢量归一化,这提出了对平方根倒数运算的需求。如前所述,开发人员必须为这些与图形计算相关的工作选择最有效的算法。因此,雷声之锤 III——竞技场开发团队使用一种非常聪明的方法进行平方根倒数运算,比如下面这样使用位级计算。

rAZzMfa.png!mobile雷神之锤 III 竞技场中的平方根倒数快速算法,作者截图

这段代码的优化水平以及在 90 年代就能开发出如此出色的计算机游戏这一事实,真的很让人惊讶。如今,游戏开发通常不需要处理这一级别的计算,因为物理函数已经由游戏引擎实现。

3 GNU 编译器代码集

C 语言是高级编程语言的鼻祖,因为它既非常靠近硬件又能提供良好的可读性。 作为 C 语言的编译器,GNU 是自引导的。 换句话说,它是应用编译器引导概念的 C 语言程序。 Github 上的 GNU 编译器代码库中的这个文件是我见过的最长的 C 语言源文件(可能有比这更长的 C 语言源文件,但是我没见过)。

URF7fi2.png!mobileGNU C 编译器中的解析器的源文件有 2 万多行代码,作者截图

4 Chromium

流行的 Web 浏览器(例如 Google Chrome,Microsoft Edge 和 Opera)很多是基于 Chromium 开源项目,该项目有两个主要依赖: 1)Blink 渲染引擎。 它是 WebCore 库的一个分支,该库由 Webkit 团队基于 KHTML/KJS 进行开发; 2)v8 JavaScript 引擎。 该引擎由 Chromium 团队开发。 毫无疑问,Chromium 代码库非常大,并且依赖很多第三方模块,例如 gRPC 和 Skia。 但是,Chromium 团队以一种非常优雅的结构来组织所有组件。 他们非常明智地将用户界面和内部函数分开,以提高整个工程的可维护性。

vuQbM3B.png!mobile划分良好的 ChromiumUI 组件抽象层的目录结构,作者截图

此外,此代码库还包含 Chromium Android 和 iOS 手机端程序的源代码。大规模的跨平台应用程序目录结构的划分可能会有些复杂。但是,Chromium 对 Linux,Windows 和 Mac 不同平台代码目录结构的划分做的非常棒。

5 Gitk

如今,基本上每一个软件开发团队都会使用 Git 来进行代码历史和版本的管理。Git 最初由 Linux 内核的创始人 LinusTorvalds 开发。确实,Gitk 的源文件的 Git 代码中一个神奇的模块。Gitk 是一个 GUI 应用程序,可以让我们以可视化方式浏览历史提交记录。我们可以使用以下的 CLI 命令来比较两次提交之间的差异。

$ git diff <commithash> <commithash>

但是,借助 Gitk 的可视化展示方式,我们可以更快速地明白不同提交之间的差异。Gitk 的整个源代码只有一个文件。它是使用 Tk UI 工具包(Tcl 的扩展程序)以 Tcl 脚本语言编写的。它仅仅通过一个源文件就实现了整个 GUI 应用程序,还选择了一种动态编程语言来大大加快 GUI 应用程序的开发速度。

6n2emmR.png!mobileGitk 由约 1 万 2 千行代码的单个源文件来实现,作者截图

原文链接:

https://medium.com/swlh/impressive-sources-codes-that-every-developer-should-see-b68028b36da5

今日推荐文章

为什么软件开发很难?

点个在看少个 bug   :point_down:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK