写点什么

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

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

关注

评论

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

2022 IoTDB Summit:阿里白渐《迈向物联网时代大数据计算平台——MaxCompute 基于IoTDB构建解决方案》

Apache IoTDB

大数据 时序数据库 IoTDB

纵存科技加入龙蜥社区,共建高性能存储软件栈

OpenAnolis小助手

开源 合作伙伴 龙蜥社区 CLA 纵存科技

设计消息队列存储消息数据的 MySQL 表格

Geek_e5f2e5

WindowsGUI自动化测试框架搭建之需求整理、详细设计和框架设计

Python 自动化测试 测试框架 WindowsGUI UIaotumation

下一站,冠军|走进2022 OceanBase数据库大赛12强

OceanBase 数据库

数据库 oceanbase

更高效、更实用的跨端开发选择

FinFish

flutter finclip 小程序容器 跨端框架

BI工具数据看板对比:瓴羊Quick BI与Smart BI

流量猫猫头

2022年证券行业年度专题分析

易观分析

金融 证券 经济

RISC-V SIG 创建专属邮件列表和论坛板块

openEuler

Linux 操作系统 openEuler risc-v

微服务引擎 MSE 企业版全新升级

阿里巴巴中间件

阿里云 微服务 云原生

ChatGPT 是真的银弹吗? | 社区征文

宇宙之一粟

Go 思考 后端 征文投稿 ChatGPT

王者荣耀商城异地多活架构设计

Geek_e5f2e5

我,30岁程序员被裁员了,千万别干全栈

程序员晚枫

程序员 裁员 大龄求职

软件测试/测试开发 | 测试平台开发-前端开发之Vue router路由设计

测试人

软件测试 测试开发 测试平台

软件测试/测试开发 | 测试平台开发-前端开发之Vue.js 框架的使用

测试人

架构训练营-模块六作业

Sam

架构实战营

SkyWalking实现 Dubbo 微服务实现链路跟踪案例以及对接钉钉告警

忙着长大#

极客时间

隐私计算技术路线介绍及对比

隐语SecretFlow

隐私计算

拆分电商系统为微服务

Geek_e5f2e5

「Go框架」平滑关闭:要关闭服务,未处理完的请求怎么办?

Go学堂

golang 个人提升 平滑重启 程序员、 gin框架

Matlab实现图像压缩

timerring

图像处理 图像压缩

「Go工具箱」Pie :一个高性能、类型安全的slice操作库

Go学堂

golang 开源 程序员 个人成长

使用 Pulumi 打造自己的多云管理平台

亚马逊云科技 (Amazon Web Services)

Amazon S3

BaseAdapter优化

芯动大师

ConversionService baseadapter viewholder

浅谈基于Web的跨平台桌面应用开发

京东科技开发者

Web 跨平台 nodejs 桌面端 企业号 3 月 PK 榜

三天吃透mybatis面试八股文

程序员大彬

Java mybatis

OpenKruise 开发者不容错过的带薪实习机会!马上加入 LFX Mentorship 计划

阿里巴巴中间件

阿里云 开源 云原生 OpenKruise

低代码生成器 | 放开双手,专注业务,一键生成项目基础结构 + 重复代码

IT学习日记

开源项目 脚手架 代码自动生成 自动搭建项目

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