开源的部分价值是为入门新平台或新语言的人们提供出色的示例代码。
您遇到的最好的开源代码是什么,为什么您喜欢您的选择?任何语言都可以,但是我对您可以指出的Objective-C的最佳示例特别感兴趣。
显然,这是一个开放式的问题,因此我将让问题开放一段时间,看看我们会得到什么样的答案。
谢谢!
编辑:对于“最佳”,我正在考虑遵循给定语言或平台中的惯用法的代码,以及使代码“专业”的部分-好的文档,测试套件等。代码简洁,但是不太聪明而不是非常简洁或健谈的代码。
开源的部分价值是为入门新平台或新语言的人们提供出色的示例代码。
您遇到的最好的开源代码是什么,为什么您喜欢您的选择?任何语言都可以,但是我对您可以指出的Objective-C的最佳示例特别感兴趣。
显然,这是一个开放式的问题,因此我将让问题开放一段时间,看看我们会得到什么样的答案。
谢谢!
编辑:对于“最佳”,我正在考虑遵循给定语言或平台中的惯用法的代码,以及使代码“专业”的部分-好的文档,测试套件等。代码简洁,但是不太聪明而不是非常简洁或健谈的代码。
Answers:
我不得不说,多年来看过一些开源代码后,我对所有这些都感到非常失望。
对我来说,主要的烦恼是评论很少,通常唯一的评论是一些冗长而合法的版权声明。
linux内核是一个示例,其中文件经常甚至没有在注释中说出它们服务的目的(例如XYZ驱动程序至少会告诉我我在正确的位置)。
我来自商业和国防编程领域,在这些领域中,编码标准要求明智的可理解注释,不仅是要说明代码单元的功能,而且在整个代码中,必须有描述算法,方法,特殊性,hacks /聪明事物的注释块。 ,所有这些使以后的人都可以快速查看并找出正在执行的操作,而不用费力地遍历实际代码。
可能的道理是:告诉我您在做什么,不要让我弄清楚。
我没有找到任何能做到这一点的开源代码。至于将开源作为学习良好编码实践的一种方式,我的黄疸建议是:不要。
唐纳德·努斯(Donald Knuth)编写了两个程序,以帮助他比出版商更好地排版他的书中的数学公式。
这两个程序(最终版本)是使用Literate Programming编写的,它允许创建源代码的印刷排版版本,并将它们作为书籍出版。这些只是我读过的最好的文档记录的程序!
它们不可用于在线阅读,但是Amazon也允许您通过以下网址 “查找” Metafont书:http: //www.amazon.com/Computers-Typesetting-D-Metafont-Program/dp/0201134381/
警告:这是沉重的负担,这就是为什么每本书要运行600页的原因。
我从OS项目中看到的一些最干净,文档最完整的源代码。
我发现LLVM源代码非常易读。我很确定它是我所见过的最干净的C ++。如果您不熟悉它,那么它基本上就是一个编译器构建工具包。
但是,这是一个很大的项目,所以不要指望能够快速准确地了解一切工作原理。但是,获得高层次的概述应该很容易。
这不是一个很大的项目,但是SubSonic ORM对我来说非常容易破解。这是我第一个真正能够真正修改所需方式的开源项目。其他大多数人最终都看了看源头,然后把头撞在墙上。我有几个小时的时间来部分支持PostgreSQL(基于SQL Server提供程序)。这是我见过的组织最完善的项目……尽管并不是说我看过很多开源项目。
首先是一个简单的示例:事件处理系统zope.event的代码。我使用了其他事件系统,这些系统将事件调度到不同的事件侦听器。当我看到zope.event代码时,是Facepalm的时候,我意识到一些事情可能会很简单。
它是用Python编写的,下面是全部代码:
subscribers = []
def notify(event):
""" Notify all subscribers of ``event``.
"""
for subscriber in subscribers:
subscriber(event)
要添加订户,请执行以下操作:
from zope.event import subscribers
subscribers.add(MySubscriber())
我见过的最好的KISS例子。
再举一个更复杂的例子:火星人的代码库非常好,而且易于阅读,即使它使用了一些聪明的Python hacks。对于大多数使用火星人构建的Grok代码也是如此。
考虑阅读本书《开源应用程序的体系结构》。它应该使您对本书中讨论的项目为何以及如何做出设计决策提出批评。
与其寻找可能会长期困扰您的最佳项目,不如尝试和欣赏某些项目的设计,这也许超出了本书的范围。这可以帮助您在这些项目的成功基础上继续前进,而不必重复他们的错误(或者通常称为重新发明轮子)。