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

C++:何时需要重新编译有问题?

  •  1
  • Jersey  · 技术社区  · 7 年前

    在什么情况下,需要重新编译代码是一个问题?

    我是一个有兴趣的外行,没有任何专业的编码经验来提高我的理解。我反复使用的文章和书籍处理了某些编码习惯或设计选择的应用增加了重新编译程序的可能性的情况。作者显然对此感到担忧,但遗憾的是,他们从未明确解释根本问题*

    对于任何软件专业人士来说,这个问题似乎都很愚蠢,但在我的私人编码工作中,没有一个是有必要重新编译真正关心的问题。我怀疑这是一个现实世界的问题,需要特定的背景,我恳请任何有经验的软件工程师为无知的人提供启示。

    非常感谢。


    *例如ScottMeyer的有效C++:关于内联的第30项

    1 回复  |  直到 7 年前
        1
  •  1
  •   2785528    7 年前

    单主题历史课:

    在某些语言中,程序员(有一定经验)可以了解到,只需在现有消息中添加字段对现有代码没有影响。任何不使用任何新字段的代码都不需要重新编译。对于C++,情况并非如此。

    同一团队还可能将这些消息捕获到单个“消息”文件中,因为更改一条消息不会影响其他消息,添加新消息只会影响使用它的代码。同样,对于C++,情况并非如此。

    在C++中,在一个包含N条消息的文件中更改单个消息的任何方面(字段名称、大小、字段类型、命名等),都会触发对所有消息的重新编译。抄送包含N个消息中的文件。


    在我参与的一个大型C++项目中(我们网站上有100多个参与者),一个清晨的完整构建可能会在大约一个小时内完成。该构建分布在多个处理器上(但由团队共享)。到中午,整个构建持续时间通常超过3小时。

    环境说明:1到3小时的构建时间几乎与共享有限的实验室设备(即注册访问、等待轮到您等)一样痛苦,在这些设备上调试更改。

    在什么情况下需要重新编译代码a 问题

    编辑-编译-测试-调试周期的持续时间决定了程序员的工作效率。此循环持续时间长/慢时会出现问题。

    对于大型C++项目,我们学会了在一天结束时合并(其他提交),然后启动一个构建,并希望它在早上完成(通常不会)。

    在一天中(上午晚些时候到一天结束时),您只构建小的更改,调试工作,并推迟将代码“合并”到其他贡献者代码中。这种努力将继续增长。

    在白天(清晨之后),您无法合并并完成系统的重建以调试您的贡献。

    这就是问题所在。。。交付工作代码是贡献者应该做的事情。


    用于比较:

    在我的主桌面上,我可以在几分钟内切换窗口并完全重建最大的项目。我的大多数应用程序周期为<1分钟。