【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

基于 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:341402
用户头像

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

关注

评论

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

图解超难理解的 Paxos 算法(含伪代码)

多颗糖

分布式 算法 分布式系统 架构师 一致性算法

不走寻常路

滴滴技术

招聘 滴滴技术 地图与公交事业群分享月

反向保理系统设计

森林

Netty源码解析 -- 服务端启动过程

binecy

Netty nio

对象的实例化内存布局与访问定位

朱华

Java 对象初始化

Java 未捕获异常处理

朱华

Java Exception

打破区块链游戏经济的隔阂,或许该从跨游戏资产入手

CECBC

区块链 游戏

滴滴导航若干关键功能的技术突破与实践

滴滴技术

人工智能 滴滴技术 滴滴导航

JAVA中的内部类详解

倔强的攻城狮

Java

后疫情时期,看区块链如何赋能文创产业加快经济复苏?

CECBC

区块链技术 文创产业

《谛听说智能》迎来圆满落幕,企业降本增效新指南

Geek_e670ab

有状态的服务其实可以做更多的事情

架构师修行之路

分布式 微服务

数字经济2.0—趋势、逻辑、选择

CECBC

区块链 数字经济

违规内容屡屡曝光下,企业如何自救

Geek_e670ab

mybatis plus 自动更新数据库时间的小坑

废材姑娘

Java mybatis

MySQL-技术专题-mysql的联合索引

洛神灬殇

第四周 作业二:系统架构学习总结【未陌】

a d e

系统架构 互联网架构

都别拦着我,我要删库了

MySQL从删库到跑路

Linux oracle重装 MySQL 运维 root

第四周 作业一:系统架构【未陌】

a d e

系统架构

MySQL-技术专题-事务和并发一致性问题

洛神灬殇

Kubeless 架构设计 | 玩转 Kubeless

donghui

Serverless kubeless

看这里!带你快速体验MindSpore V1.0(For ubuntu 18.04)

华为云开发者联盟

华为 AI 技术

链表反转的两种实现方法,后一种击败了100%的用户

小Q

Java 程序员 数据结构 算法 开发

当我在听播客时,我在听什么?

Nydia

读——沟通的艺术,看入人里,看出人外(第三章)

废材姑娘

浅析:线程安全

朱华

Java 多线程与高并发

中国首个“芯片大学”即将落地;生成对抗网络(GAN)的数学原理全解

京东科技开发者

技术 网络 GAN 芯片

kubernetes是微服务发展的必然产物

架构师修行之路

Kubernetes 分布式 微服务

学习笔记:架构师训练营-第四周

四夕晖

高并发 系统架构演化

MySQL-技术专题-解决死锁问题

洛神灬殇

头条终面:写个消息中间件

yes

面试 消息队列

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