代码之家  ›  专栏  ›  技术社区  ›  Wayne

关于“大型C++软件设计”的思考

  •  38
  • Wayne  · 技术社区  · 7 年前

    阅读 reviews at Amazon ACCU 建议John Lakos的书, 可能是模块化的罗塞塔石。

    与此同时,这本书似乎真的很少见:没有多少人读过,也没有盗版电子版在四处流传。

    10 回复  |  直到 8 年前
        1
  •  39
  •   kshahar    16 年前

    另一方面,如果你的构建需要4个小时,而你又不知道如何缩减它,那就去拿一份拷贝,读一读,然后把它全收进去。

    您将很快开始编写物理性能更好的代码。

    如果你想从某个地方开始,但又不能马上拿到这本书,我找到了 Games From Within series on physical structure 即使在阅读大型C++设计时也是有用的。

        2
  •  18
  •   Wayne    12 年前

    有趣的是, "More C++ Gems" 包含缩短的(到88(!)Lakos的书的版本,也可以浏览(完全,我相信,因为它属于书的前半部分) online at Google books .

        3
  •  15
  •   Jordan H.    11 年前

    Lakos曾为Mentor Graphics工作,后者生产EDA软件。他参与了在C++中构建EDA软件,他们希望有效地使用C++(不超过C代码的5%开销),并在早期工作站上构建如何编译一个大型C++应用程序需要很长时间的软件。

    这本书读得很好——它讨论了各种各样的话题,拉科斯确实知道他的东西。他真正的背景是必须从C++编译器中获得高效代码,以及如何设置一个C++程序,以便它可以维护和编译,并能很快地链接。

    我认为拉科斯有很多见解,我建议你读一下。然而,它是“TRAD”C++从一个时间之前的特征,如模板广泛可用。我的副本不出售;^)

        4
  •  11
  •   Lance Diduck    11 年前

    我认为这本书在20世纪90年代末是一本很好的读物。当时它已经过时了,现在几乎和20世纪50年代的电话簿一样重要。

    我和拉科斯共事了几年,在那里他试图实现这些想法。我还有我的现代C++项目,我用大约2000个源文件构建的——规模足够大,而且我已经建立了几个。通过使用诸如icecream之类的程序进行并行分布式构建,构建时间很容易缩短。每个编译器都会缓存打开的头文件——只有通过做一些非常离谱的事情,任何现代构建工具(如scons)才能扩展到数千个翻译单元,而不需要做任何特别的事情,因为构建时间(包括测试)需要几分钟才能完成。

    这主要是书的要点——我如何编写C++,以便它能用1993的工具工作?此外,书中描述的Mentor Graphic项目是一场灾难。就连这本书本身也提到了这一点。

    大规模C++ 是以源代码的形式提供的——这些是“物理依赖关系”,而不是链接库(而且本书从未提及其他更重要的依赖关系,如数据库、套接字、处理器体系结构等)。

    这本书充满了听起来不错的想法,但是有更好的方法可以在实践中扩大规模。如果你想学习大型C++库,请看 Boost 或 Xerces

        5
  •  5
  •   Martin Beckett    8 年前

    虽然这可能是在大型项目中要学习的课程之一,但您通常不会使用最先进的功能和工具。

        6
  •  4
  •   Rob Grant    16 年前
        7
  •  4
  •   Neeraj Sangal    16 年前

    从历史的角度来看,这是一本优秀的书,也是一本重要的书。

    请注意,要实现本书中描述的实践,您需要团队中相当多的纪律和一致性。以下是需要注意的几点:

    1. 这本书是关于C++的,但是概念更广泛地适用。但是,由于C++是一种复杂的语言,所以书的大部分内容都是教你如何有效地使用C++。如果你能克服这一点,即使你使用其他语言,你也会发现它很有用。

    2. 一些药方,比如关于“名字空间”的使用,现在可能被认为是有争议的。许多人认为,C++中的名称空间应该以有限的方式使用。

        8
  •  4
  •   Peter Mortensen    9 年前

    如果你能找到一本,我相信你会发现它值得一读。它在我的十大编程书籍列表中。

        9
  •  3
  •   Joseph Pecoraro    9 年前

    当然,从“如何减少构建所需的时间”的角度来看,它有很多有用的东西,特别是在减少编译时依赖性方面,尽管考虑到现在使用了多少模板,其中一些可能不再相关,甚至不可能。

    推荐文章