写点什么

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

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

关注

评论

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

使用 HTML、CSS、JavaScript 创建一个简单的井字游戏

海拥(haiyong.site)

大前端 js 28天写作 签约计划第二季 12月日更

【LeetCode】 连续字符Java题解

Albert

算法 LeetCode 12月日更

业务请求量膨胀的扩容技术实践

博文视点Broadview

在 Flutter 中如何使用TabBar和TabBarView创建选项卡布局【Flutter 专题 13】

坚果

flutter 28天写作 签约计划第二季 12月日更

你知道什么时候用Vue计算属性吗?

华为云开发者联盟

Vue 字符串 逻辑 模板 计算属性

老铁久等了,尚硅谷Vue大型电商项目:尚品汇教程发布!

编程江湖

Vue 大前端

【Pandas学习笔记02】-数据处理高阶用法

恒生LIGHT云社区

Python 数据分析 pandas 数据可视化

大厂算法面试之leetcode精讲14.排序算法

全栈潇晨

LeetCode 算法面试

尚硅谷Vue大型电商项目:尚品汇教程发布!

@零度

Vue 大前端

你该不会拿 CSAPP 垫显示器吧

Zilliz

如何在 Vue 中使用 防抖 和 节流

编程江湖

使用nodejs和Java访问远程服务器的服务

汪子熙

Java nodejs 28天写作 abap 11月日更

AI 收藏夹 Vol.003:AI 能听懂阴阳怪气吗?

Zilliz

神经网络 AI 计算机视觉

技术管理哲学随笔:面对大量事业部需求与产研团队资源之间的矛盾

dclar

团队管理 管理 CTO

大数据开发开源平台之Spark SQL的基础

@零度

大数据 spark SQL

Rust 元宇宙 10 —— 接入和协议

Miracle

rust 元宇宙

大厂算法面试之leetcode精讲13.单调栈

全栈潇晨

LeetCode 算法面试

react源码解析7.Fiber架构

buchila11

React React Hooks React Diff

Java难吗?Java基础知识最强总结(2021版)

XiaoLin_Java

Java

面试官:Java 线程如何启动的?

华为云开发者联盟

Java 线程 JVM 时序图 Java 线程

一文带你读懂数字管家

HarmonyOS开发者

HarmonyOS OpenHarmony

react源码解析8.render阶段

buchila11

React React Hooks

使用HTML,CSS 和 JS 创建 Chrome 扩展程序

海拥(haiyong.site)

json chrome扩展 28天写作 签约计划第二季 12月日更

2021年马上要结束了,这5款Java框架你都了解吗

@零度

Java spring

【Flutter 专题】01 图解 Windows 环境下安装配置环境

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 12月日更

华为云企业级Redis评测第一期:稳定性与扩容表现

华为云开发者联盟

redis 测评 GaussDB(for Redis) NoSQL数据库 企业级Redis

大湾区|Serverless 线下活动两连发

阿里巴巴云原生

阿里云 Serverless 云原生 线下活动 大湾区

Git进阶(一):git 管理文件之后文件颜色的含义

No Silver Bullet

git 学习 git revert 12月日更

模块5-课后作业

21°Char

Groovy热更新Java实践

FunTester

Java 测试开发 热更新 Groovy FunTester

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