阅读reviews at Amazon和ACCU表明John Lakos的书,大型C ++软件设计可能是用于模块化的Rosetta Stone。
与此同时,这本书似乎非常罕见:没有多少人读过它,也没有盗版电子版本。
那么,您怎么看?
答案 0 :(得分:35)
我已经阅读过它,并认为它是关于大型C ++项目的一些实际问题的非常有用的书。如果您已经阅读了很多关于C ++的知识,并且对物理设计及其含义有所了解,那么您可能在本书中找不到那么多“新”的东西。
另一方面,如果您的构建需要4个小时,并且您不知道如何减少它,请获取副本,阅读并全部使用。
你会很快开始编写物理上更好的代码。
[编辑] 如果你想从某个地方开始,并且不能立即掌握这本书,我发现Games From Within series on physical structure即使在阅读大规模C ++设计之后也很有用。
答案 1 :(得分:17)
有趣的是,"More C++ Gems"包含一个缩短的(到88(!)页)版本的Lakos'书,也可以浏览(完全,我相信,因为它属于本书的前半部分){ {3}}。
所以,欢迎所有感兴趣的人:)
答案 2 :(得分:13)
Lakos曾经为制作EDA软件的Mentor Graphics工作。他参与了用C ++构建EDA软件,他们希望有效地使用C ++('不超过C代码的开销不超过5%')并理清如何在早期工作站上构建软件,这些软件真的需要很长时间来编译大型C ++应用程序。
这本书非常好读 - 它讨论了各种各样的主题,Lakos确实知道他的东西。他真的来自于必须从C ++编译器中获取高效代码的背景,以及如何设置C ++程序以使其可维护,并且可以合理快速地编译和链接。
我认为Lakos有很多洞察力,我建议你阅读它。然而,从模板之类的功能可以广泛使用之前,它就是'trad'C ++。我的副本不是出售; ^)
答案 3 :(得分:9)
我认为这本书在20世纪90年代后期得到了很好的回读。它已经过时了,现在与20世纪50年代的电话簿相关。
我和Lakos合作了几年,他试图实现这些想法。我还有我的现代C ++项目,我用大约2000个源文件构建 - 足够大,我已经构建了一些。使用像冰淇淋这样的程序,通过并行分布式构建可以轻松减少构建时间。每个编译器都会缓存已打开的标题 - 只有通过做一些真正令人发指的事情,任何像scons这样的现代构建工具都会扩展到成千上万的翻译单元而不做任何特别的事情,包括测试在内的构建时间需要几分钟才能完成。
将库接口限制为一些“词汇类型”(与OO概念不同,他意味着只使用Int,float,string,char,以及其他一些我不记得)非常差扩展任何东西的建议。您的构建将寻找类型不匹配,您不希望在运行时只是为了更容易编写make文件。
这主要是本书的要点 - 我如何编写C ++以使其适用于1993年的工具?此外,本书描述的Mentor Graphic项目是所有帐户的灾难。甚至这本书本身就暗示了这一点。
大规模C ++ 以源代码形式提供 - 这些是“物理依赖”,而不是链接库(本书从未提及其他更重要的依赖,如数据库,套接字,处理器架构,等)。
这本书充满了听起来不错的想法,但有更好的方法可以在实践中扩大规模。如果您想学习大型C ++库,请查看Boost或Xerces,看看他们做了什么。他们真的在实施大型项目,而不是写下它们。
答案 4 :(得分:4)
它有点过时了(实际上它写的时候已经过时了)。如果我没记错的话,很多都是为了减少你现在可能用模板做的依赖。
虽然这可能是大型项目的经验教训之一,但您通常不会使用尖端的功能和工具。
答案 5 :(得分:4)
John Lakos的“大规模C ++软件设计”是一个引人深思(但通常被忽视)的宝石吗?
答案 6 :(得分:3)
是的,在某些方面,这本书有点过时,其中一些是C ++特定的。尽管如此,它提供了很多关于处理大型程序中的复杂性和耦合的有用建议,并且他的大多数建议都适用于任何面向对象的语言。我也发现它非常易读。
如果您可以追踪副本,我相信您会发现它值得一读。这是我的十大编程书籍。
答案 7 :(得分:3)
从历史的角度来看,这是一本优秀的书,也是一本重要的书。
请注意,要实施本书中描述的实践,您需要团队内的相当规范和协议。以下是一些需要注意的事项:
Lakos对他所谓的“组件”和“包”有精确的定义。这些是大规模设计的关键。但是,它们需要遵守有关如何命名源文件和头文件以及包含它们的顺序的约定。遗憾的是,大多数人(包括引用Lakos的人)很少遵循这些惯例。
这本书是关于C ++的,但概念更广泛适用。但是,由于C ++是一种如此复杂的语言,本书的很大一部分教你如何有效地使用C ++。如果你能超越它,即使你使用其他语言,你也可以发现它很有用。
一些处方,例如使用“名称空间”可能会被认为是有争议的。许多人认为名称空间应该在C ++中以有限的方式使用。
答案 8 :(得分:2)
当然,从“我如何减少构建所需的时间”这个角度来看,它有很多有用的东西,特别是在减少编译时间依赖性方面,尽管可能有一些不再相关,甚至可能,考虑到多少这些天使用的是模板。
不,你不能得到我的副本:)
答案 9 :(得分:0)
我想添加所有这些答案,它只对C有用,因为这种语言存在标题地狱的问题。今天有些建议很无用,比如现在由编译器完成的保护或者当你最好使用一些预编译的头文件(每个包一个)时对头文件进行分组。
如果你问我是否值得购买,那么我回答:只有你是C / C ++开发的初学者。当前的C ++世界(模板和模板以及我已经提到模板)的当前问题都不符合。
但我只是再看一遍这本书。它给了我美好的回忆,并再次告诉我为什么这个语言是完全错误的,需要被替换。