写点什么

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

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

关注

评论

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

CRM和ERP的Sales Organization的映射关系

汪子熙

中间件 CRM SAP ERP

CRM中间件里的发布-订阅者模式

汪子熙

CRM SAP ERP abap

数字货币兴起背后:全球货币超发 主权信用贬值

CECBC

CRM product UI里assignment block的显示隐藏逻辑

汪子熙

CRM SAP abap

ABAP OPEN SQL里OPEN CURSOR和SELECT的比较

汪子熙

CRM SAP abap ST05 OPENSQL

如何用ABAP代码读取CDS view association的数据

汪子熙

CDS SAP abap CDS view

中间件事务码R3AC1里Block Size的含义

汪子熙

中间件 CRM SAP abap

设计千万级学生管理系统的考试试卷存储方案

俞嘉彬

如何使用代码获得一个function module的Where Used List

汪子熙

CRM SAP abap SAPGUI

如何在Chrome development tool里查看C4C前台发送的未经 GZIP 压缩之前的请求细节

汪子熙

chrome SAP C4C Chrome开发者工具

ABAP和Java里关于DEFAULT(默认)机制的一些语言特性

汪子熙

SAP abap Netweaver SAPGUI

为什么使用中间件下载时总是收到警告消息Object is in status Wait

汪子熙

中间件 CRM SAP ERP

CRM订单状态的Open, In process和Completed这些条目是从哪里来的

汪子熙

CRM SAP ERP abap

利用CRM中间件Middleware从ERP下载Customer Material的常见错误

汪子熙

中间件 CRM SAP ERP

如何从ERP下载Sales BOM到CRM

汪子熙

CRM SAP ERP abap

金融科技如何在产业互联网蓝海中扬帆远航?大数据、区块链与物联网应用被看好

CECBC

观察者模式在One Order回调函数中的应用

汪子熙

CRM SAP abap

高性能 JavaScriptの六 -- 老生常谈Ajax

空城机

JavaScript ajax 大前端 5月日更

在浏览器里使用SAPGUI里的SE80

汪子熙

JavaScript SAP abap Fiori SAP UI5

架构师训练营 作业四

开拓纪

SAP S4CRM (SAP Customer Management for S/4HANA) 1.0 介绍

汪子熙

CRM SAP abap S/4HANA

面试问题 - 只用位操作在ABAP里实现a+b

汪子熙

面试 SAP abap

Mybatis获取自增长id

风翱

mybatis 5月日更

如何从ERP将Material的Batch信息下载到CRM

汪子熙

CRM SAP ERP abap

如何检查某个用户是否具有某个权限对象上定义的某种权限

汪子熙

CRM ERP abap Authorization Authentication

模块4作业

梦寐凯旋

架构实战营

如何快速的学习一门新的编程语言?

架构精进之路

学习 5月日更

One Order行项目里Item Category是怎么计算出来的

汪子熙

CRM SAP abap ONE-ORDER

ABAP git客户端的简单介绍

汪子熙

GitHub SAP abap

架构训练营-模块四作业

冬天的树

如何证明CRM WebClient UI上的应用是有状态(Stateful)的

汪子熙

CRM SAP abap WebClient UI

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