BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

基于Clang的缓存型C++编译器Zapcc开源

| 作者 Sergio De Simone 关注 13 他的粉丝 ,译者 谢丽 关注 10 他的粉丝 发布于 2018年6月27日. 估计阅读时间: 2 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

Zapcc是一个缓存型C++编译器,基于Clang/LLVM的一个分支创建,据称重编译的速度快50倍,完整构建的速度快2到5倍。由Creemple开发,最初在2015年底发布,Zapcc现在开源了。

Zapcc编译速度提升主要是因为使用了一个编译服务器(zapccs),该服务器驻留在内存中,从客户端接收编译命令。Zapccs仅解析C++头文件一次,并把所有模板实例和生成的代码都保留在内存中。在这一方面,可以把Zapcc视为是以更极端的方式使用了预编译的头文件,但是,它可以获得的信息比预编译头文件多得多,而且又不需要让预编译头文件发挥作用的所有设置。

在处理十分复杂的C++头文件,尤其是那些使用了模板的头文件时,与Clang相比,Zapcc特别快。因此,也就不用奇怪,在构建boost::math时Zapcc的速度是Clang的40倍,在WebKit完整构建时快4倍,在Clang完整构建时快2倍。类似地,在增量重编译时,Zapcc比Clang快50倍。另一方面,当源文件比头文件复杂很多时,Zapcc就提供不了多少好处了,纯C项目对于Zapcc而言是最坏的情况,根本就不能提升速度。实际上,Zapcc禁止缓存C文件。

据Creemple介绍,由Zapcc生成的代码其运行时性能和由Clang生成的代码一样。

zapccs使用的内存数量是决定整体性能的一个重要因素。Zapcc允许开发人员设置内存限值,当达到限值时,zapccs会使用一个空的缓存自动重启。如果找不到可用的服务器实例,那么Zapcc会设法启动一个新的服务器实例,开发人员可以使用-j标识控制并发服务器最大数量。根据项目的复杂度,服务器较少而内存限值较高时,Zapcc可能运行得更快。

据项目主要开发者Yaron Keren介绍,Zapcc是经过重大修改的Clang,修改超过20万行。我们不认为它有一天会进入CLang基线。Zapcc意在取代Clang和gcc,其目标是与所有构建系统集成。它获得了Linux x64的完全支持。

查看英文原文:Caching Clang-Based C++ Compiler Zapcc Open-Sourced

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

ramdisk不行吗? by Kraft Bai

Ramdisk就可以了 这么麻烦

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT