8

编写一个基于云的编译器,将编译后的代码单元传播到云中的不同机器上,是否有任何实际好处?在编译后立即在应用程序中获得软件即服务架构是否有好处,或者固有的延迟是否会使这种方法不切实际?

4

9 回答 9

3

我不确定我是否误解了您的观点,或者其他答案是否有。您是在谈论某种自动并行化任务吗?到目前为止给出的答案似乎是在谈论分布式编译——即使用云来加快编译时间。我假设您是在谈论针对云计算资源的编译器。

如果您实际上是在谈论分布式编译,那么显然 distcc 之类的东西会满足您的需求。

如果您要问一个更有趣(恕我直言)的问题,即针对分布式架构的编译器是否有用,我的回答是响亮的“是”。然而,可行性是问题的核心。延迟本身不是问题,但是连贯性(即确保所有单元的正确版本都到位)和具有良好的启发式方法将是一个问题。

最好的地方可能是 Occam 编程语言——它针对的是晶片机,这与我们现在感兴趣的分布式系统架构类型并没有完全不同。我相信 Occam 之后的一些工作可能会提供有关最先进技术的有用线索。

于 2009-10-05T14:45:45.637 回答
2

我使用过这样的系统,但它适用于本地集群,而不是云。但原理是完全一样的。不幸的是,我不记得它叫什么了——但它很酷,看着你的源文件被外包给你部门的其他电脑。

编辑:它被称为IncrediBuild

于 2009-10-02T22:38:58.443 回答
2

您可以使用distccmake -j对最典型的 unix 代码进行分布式编译。如果您定期编译大块代码,它可能会为您带来很大的加速... afaik samba(免费 smb 实现)开发人员使用它来实现此目的。distcc仅以分布式方式进行编译阶段,留下预处理和链接到主机。

与“云”的交互可能会导致延迟,但我仍然认为使用更复杂的 c++ 代码可能非常有用。我想如果你有超过 100 个编译单元(fe .cpp 文件),你会得到明显的加速。

于 2009-10-02T23:39:54.420 回答
1

我相信这是不切实际的。今天的硬件可以在合理的时间内做任何中小型项目的编译;多核 CPU 更是如此。

唯一的例外是从源代码构建整个操作系统(例如 Debian);对于此类应用,构建农场被广泛使用。但是,需要构建农场的用户通常可以自己创建它们,而不需要去云端。

于 2009-10-02T22:38:45.747 回答
1

Xcode 有一个分布式构建功能,可以让你做到这一点,但我认为在 LAN 以外的任何地方,大多数时候它会非常慢。

于 2009-10-02T22:50:50.603 回答
0

这取决于。我们曾经使用旧的基于 C++ 的编译需要 3-4 小时。对于类似的事情,卸载编译将非常有用。但在 C++ 项目中,这通常更不可能。

使用 C# 或 Java,编译时间明显更快,因此它可能不那么重要。

于 2009-10-02T22:37:33.420 回答
0

如果它是某种持续集成工具,我认为这可能会很有用。对于某些开发环境,很难进行正确的设置。例如,我曾经参与过一个项目,团队使用FlashDevelopAdob​​e 的 Flex SDK编译 SWF 文件。在个人计算机上进行设置有时会很痛苦。如果服务可以监控项目目录或 git/SVN/etc。存储库并构建最新的 SWF,但是,我认为这会很有用。

我想这也可以用于跨平台项目。或者,该服务可以支持浏览器内的 IDE,例如Mozilla 的 Bespin

于 2009-10-02T22:51:08.627 回答
0

我已经看到了在 GridGain 之上运行 JUnit 测试的一个很好的演示,并且 GridGain 可以在云中运行。

不过,我认为编译器在云中的价值不大。

于 2009-10-02T23:44:17.200 回答
0

是的,谢谢你的提问,我也在这个领域进行研究。实际上它很有意义并且存在,http://www.cloudcompiling.com/,但就我所见,它仍然是前 10 名服务。

延迟仅存在于代码的上传中,因此,如果开发人员正在使用良好的连接并且不太远(就网络跃点和“良好”跃点而言),那将不是问题。

云上的延迟是云提供商的问题,如果是您的云提供商,那么您需要一个良好的平衡策略。

于 2011-03-30T14:24:46.177 回答