我喜欢学习代码库,当我遇到漂亮的设计或新颖的想法/算法时,感觉就像我在探索一个洞穴并找到隐藏在岩石后面的金子一样。
通常,我将潜入一个代码库中,以弄清楚如何解决问题或实现算法,然后扩展到其他部分,在进行过程中从心理上映射所有内容。 有时候,我希望找到一些有趣的东西,而在其他情况下(非常罕见),我这样做是因为我喜欢阅读,就像有时我不止一次喜欢读书一样。
我做的事情不像以前那样多,当然不如我想做的那么多,但是我仍然偶尔会遇到这样的问题。 当我和弟弟还年轻,无法上网,或者任何其他人谈论我们的兴趣爱好,甚至是相关书籍时,我们将依赖语言解释器(以及后来的编译器)以及包含在其中的示例应用程序代码在软盘上学习如何操作(我们最接近的资源是Amiga Basic的手册,该手册与我们的第一台计算机Amiga 500捆绑在一起)。


当我们最终可以访问Internet时(我每周要乘公共汽车去大学一次,呆在那里几个小时,然后学到我能学到的一切,并且用可以在Amigas上检查的东西尽可能多地填充磁盘。 ,我将其带回了家),我找到了最令人印象深刻且最著名的Amiga应用程序Term的源代码。 这对我来说是一个里程碑。 您可以在这里阅读所有内容。 我想那是我对代码库的真正迷恋开始的时候。


我认为,如果我列出一些对我来说很突出的代码库,可能会对其他人有所帮助。 这份清单会很短-我肯定会忘记当时很多对我来说很有趣的清单-,而且多数情况是乱序的,但是如果您想像我一样感到惊讶或学习一些知识,就不妨考虑一下一两件事。
- Seastar和ScyllaDB:我长期以来学习代码库的最大乐趣; Seastar是一项非常令人印象深刻的成就,并且是我经历过的最出色的全方位C ++代码库。 ScyllaDB是Seastar框架的应用程序,它在大多数情况下也表现出与Seastar相同的品质。 如果您关心“现代” C ++,那么这些就是从内而外理解的代码库。
- Aeron and Disruptor:我不喜欢Java或任何其他JVM语言。 我会在需要时编写Java,但是该语言对我没有吸引力。 马丁·汤姆森(Martin Thomson)编写的这两个代码库是迄今为止我研究过的最有趣,写得很好的Java代码库。 他们的美与他们实施的设计的优雅和巧妙相匹配。
- Hashicorp代码库:尽管我不介意,但我也不喜欢Go语言。 在我研究过的所有Go代码库中,Hashicorp的代码库很容易从其他代码中脱颖而出。
- Linux内核:无需评论。
- 愚蠢:Facebook令人难以置信的C ++ 11库。 通常,代码质量很高,对于那些有兴趣学习新算法和设计的人来说,学习机会太多了。 尤其是F14,它是一种具有相同代码库/实现的美观设计。
- HHVM:我研究过的最有趣,质量最高的Facebook代码库。 真正的宝石。
- Tensorflow:这是我研究过的最好的Google代码库。 出色的设计,非常高质量的代码,并且易于理解所有内容如何组合在一起。
- 虚幻引擎:虚幻引擎的代码库由于组成其的组件的绝对大小和复杂性,在某种程度上难以导航和难以追踪。 如果您有耐心,您将获得太多的“哈哈”时刻。
- SQLite:这是用于难以描述的代码库的地方。 了解一切的工作原理非常容易,而且对于对数据存储的构建方式感兴趣的任何人都非常有价值。
- Chrome和V8:Chromimum代码库教会了我很多关于在各种平台上构建UI的知识,而V8代码库非常重要,因为Javascript在当今如此重要。 也不难理解。 它们结构合理,外观漂亮。
- Postgres:请参见SQLLite注释。 此代码库的一个小问题是,似乎作者并未将对过去几年中引入的各种API的更新/改进和新的系统调用进行合并-但这丝毫没有降低代码的重要性和质量。 我真的很喜欢影响procarray.c中代码实现的设计,这类似于MariaDB的组提交实现,而这又是平面组合思想的一个转折。
- HAProxy:如果您关心网络I / O,则应学习此代码库。 这也很容易理解。
- 毁灭战士:如果说我第一次看和玩毁灭战士就对我印象深刻,那就太轻描淡写了。 因此,当我第一次访问代码库时,我花了很长时间浏览它,试图了解它是如何实现的。 卡马克是个天才。
- LMDB:代码非常少,这里真正重要的是此内存映射数据库的想法和设计。 其极高的性能归功于其开发人员的巧妙设计和务实的决策。
- Erlang:您应该对其进行研究,以了解轻量级进程的工作方式,消息传递的实现方式以及其VM和调度程序的工作方式。 考虑到所有因素,代码质量不是很高,但这是值得的。 您可能还想签出QNX。
- LLVM:通过学习LLVM,我学到了很多有关编译器和优化器的知识。 代码库质量很高,并且很容易找到解决方法。
- WebKit:请参阅V8评论。
- LuaJIT:我研究过的最好的C代码库。 它是如此的优雅,优美,设计得很好(包括LuaJIT和实现它的代码)。 我不能推荐它。
- Redis:Redis中HyperLogLog和基数树的实现非常优雅,并且有据可查。 直截了当地了解Redis的所有工作原理。 如果您对高性能单核服务器设计感兴趣,则应进行研究。
- Abseil:Google的C ++库代码的开源集合,旨在增强C ++标准库(如开发人员所述)。 非常高质量的代码,非常聪明的设计选择,尤其是在其出色的哈希映射实现中。
- 编译时正则表达式:@hankadusikova令人难以置信的constexpr /编译时正则表达式是一个了不起的成就。 这也是一个真正的大开眼界。 她的设计基于类型和类型匹配,您应该观看她的CppCon 2018演示并浏览她的幻灯片,以了解其工作原理。 如果您关心C ++和constexpr /编译时编程,那么这是您需要学习的代码库。
- RE2:这是Google开源的最好的代码库之一。 大量评论且实施得很好,这很重要,原因之一是它说明了DFA / NDFA的强大功能。
我记得他们会用更多我认为有趣的代码库更新此列表。 我还将添加一些有关它们的评论,它们有趣或重要的原因。
同时,您应该检查此处列出的内容,我相信这值得您的时间和精力。
尽情探索他们吧!
这篇博客文章在Hacker News上。 您可能想在 这里 阅读 评论 。 您可以在 Twitter ( @markpapadakis ) 上找到我 。