写点什么

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

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

关注

评论

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

为WEB3 的GameFi行业爆发提供全新动力

股市老人

亚信安慧携AntDB数据库入选信通院软件供应链厂商和产品名录

亚信AntDB数据库

数据库 AntDB AntDB数据库 企业号 2 月 PK 榜

IoTLink v1.5.0 最新公告

山东云则信息科技

物联网平台 物联网 spring-boot

机器学习之特征工程详解

九章云极DataCanvas

巧用Golang泛型,简化代码编写

百度Geek说

Go golang 企业号 2 月 PK 榜

关于 NGINX Kubernetes Gateway,你需要知道的 5 件事

NGINX开源社区

nginx NGINX Ingress Controller NGINX Kubernetes Gateway 企业号 2 月 PK 榜

如何又快又好实现Catalog系统搜索能力?火山引擎DataLeap这样做

字节跳动数据平台

大数据 数据治理 数据研发 企业号 2 月 PK 榜

2023年1月网约车领域月度观察

易观分析

网约车 出行

小红书2023春节消费报告

易观分析

春节 小红书 消费

优化器-RBO 的规则转化

KaiwuDB

RBO 数据库优化器

“一键”模型迁移,性能翻倍,多语言AltDiffusion推理速度超快

OneFlow

人工智能 深度学习

Kratos微服务工程Bazel构建指南

微服务 CMS Kratos Monorepo bazel

测试开发 | AppCrawler 自动遍历测试实践(二):定制化配置

霍格沃兹测试开发学社

升哲科技荣获2022年度华夏建设科学技术奖二等奖

SENSORO

助力信创自主可控,AntDB与浪潮、超聚变完成产品互认

亚信AntDB数据库

数据库 AntDB AntDB数据库 企业号 2 月 PK 榜

还在用 OpenFeign?来试试 SpringBoot3 中的这个新玩意!

江南一点雨

spring springboot

java实现FTP下载,解决假死问题

Steven

微博评论计算架构

Geek_7d539e

高效学 C++|面向对象程序设计的思维方式

TiAmo

c++ 面向对象 设计模式

系统运维 SysOM profiling 在云上环境的应用观测实践 | 龙蜥技术

OpenAnolis小助手

开源 cpu 系统运维 profiling 龙蜥技术

测试开发 | AppCrawler 自动遍历测试实践(三):动手实操与常见问题汇总

霍格沃兹测试开发学社

下一代编解码技术Ali266在视频超高清领域的应用展望

阿里云CloudImagine

云计算 Ali266 超高清

Getaverse 1月总结 | 节点数突破6200+

Geek_Web3

#区块链# 元宇宙 web3

电商平台的多门店产品设计要点分析

产品海豚湾

产品经理 产品设计 SaaS 产品分析 电商产品

柯里化与部分施用

SkyFire

函数式编程 柯里化 部分施用

Dubbo 中 Zookeeper 注册中心原理分析

vivo互联网技术

zookeeper dubbo

SpringBoot 如何保证接口安全?老鸟们都是这么玩的!

程序知音

Java spring 架构

Dubbo 中 Zookeeper 注册中心原理分析

小小怪下士

Java zookeeper dubbo

开源机器学习软件对AI的发展意味着什么?

OneFlow

人工智能 深度学习 开源

新思科技:数字赋能,安全先行

InfoQ_434670063458

利器 | AppCrawler 自动遍历测试工具实践(一)

霍格沃兹测试开发学社

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