写点什么

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

  • 2018-06-26
  • 本文字数:796 字

    阅读完需:约 3 分钟

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

2018-06-26 05:342112
用户头像

发布了 1008 篇内容, 共 446.6 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

工业4.0|振动分析能做到预防性维护吗?

清水河路人甲

游戏夜读 | 跟风说一说爬虫

game1night

计算机操作系统基础(十三)---线程同步之读写锁

书旅

php laravel 线程 操作系统 进程

对mysql事务的认识,再不懂我就捶死我自己!

你是人间四月天

MySQL 面试 mysql事务

面试官:反射都不会,还敢说自己会Java?

码农月半

Java 面试 反射 java反射

架构师训练营第 5 周——学习总结

在野

极客大学架构师训练营

架构师课程第五周 作业

杉松壁

写给大忙人看的内存管理

苹果看辽宁体育

后端 操作系统

Hash一致性算法的Java实现

wei

熟悉JVM吗?为什么新生代内存需要有两个Survivor区?

南南

Java 面试 深入理解JVM JVM原理

如何通过调试学习 nginx ?

张小方

c++ nginx 后端 高性能 服务器端开发

数酒瓶童谣:从99数到0

程李文华

架构师训练营第5周-一致性hash算法总结及作业

傻傻的帅

极客大学架构师训练营

架构师训练营 一致性Hash算法Java实现

Cloud.

k6简单入门

风中之心

性能测试

老是自以为JVM懂了,那你知道 i = i++和 i = ++i 的区别吗?

小谈

Java 面试 编程语言 JVM 程序

「架构师训练营」第 5 周作业 - 一致性哈希算法

guoguo 👻

极客大学架构师训练营

没有微服务项目经验,就别去面试官那里送人头了

小谈

Java 架构 面试 微服务 SpringCloud

超级专家术语学习机

程李文华

Cordova项目使用Android Studio真机调试

麦洛

android Android Studio 真机调试

IDEA 不为人知的 5 个骚技巧!真香!

王磊

Java 工具 IDEA

面试官80%会问的分布式事务中的“最大努力通知”事务

无予且行

Java MySQL 面试 事务

这是什么神仙面试宝典?半月看完25大专题,居然斩获阿里P7offer

码哥小胖

Java spring 面试

深入理解ThreadLocal:拨开迷雾,探究本质

itlemon

源码分析 ThreadLocal

因为我的一个低级错误,生产数据库崩溃了将近半个小时

鄙人薛某

Java MySQL 数据库 故障定位

架构师训练营第五周 - 总结

Eric

极客大学架构师训练营

你那么追捧的 SpringBoot,到底替你做了什么?

爱java爱自己

spring

架构师训练营作业 (第五周)

王海

极客大学架构师训练营

阿里P7岗位面试,面试官问我:为什么HashMap底层树化的标准元素个数是8

鄙人薛某

Java 面试 hashmap 哈希

解决死锁的4种基本方法(建议收藏)

小吴选手

Java 死锁

hash一致性算法与优化

Mr.Monkey

基于Clang的缓存型C++编译器Zapcc开源_开源_Sergio De Simone_InfoQ精选文章