【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论

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

发生死锁了怎么办

zurhan

倒计时 5 天,您有一份 2023 IoTDB 用户大会参会指南请注意查收!

Apache IoTDB

平凯星辰携手教育部教育管理信息中心,助力普惠教育数字化

PingCAP

MySQL 教育 数字化 TiDB

Open AI “宫斗”结束,自主意识AI初现,我们会被取代吗?

代码生成器研究

海外原生IP代理有哪几种获取方式?

Geek_bf375d

爬虫 IP 代理IP 代理IP设置 跨境电商

海外IP能在哪找?

Geek_bf375d

爬虫 IP 代理IP 免费代理ip 跨境电商

Semaphore:实现一个限流器

zurhan

一款多功能露营专用氛围灯

二哈侠

简单上云第一步的华为云服务器,助力中小企业提升业务

平平无奇爱好科技

低代码模式会成为主流吗?

代码生成器研究

多架构镜像如何制作

许大强

海外住宅IP代理如何去判断?

Geek_bf375d

爬虫 IP 代理IP 免费代理ip 跨境电商

并发容器的使用:识别不同场景下最优容器

zurhan

平凯星辰 TiDB 获评 “2023 中国金融科技守正创新扬帆计划” 十佳优秀实践奖

PingCAP

数据库 TiDB 金融业

引领小程序与网站开发新潮流,华为云耀云服务器L实例轻松搭建

平平无奇爱好科技

稳定高效选择,华为云耀云服务器L实例助力云端创新

平平无奇爱好科技

大语言模型与API融合:探索LLMs的概念及实用应用

幂简集成

AI 创新 API 新技术 LLMs

活动报名|KubeBlocks × Milvus「AI 时代背景下的云原生数据库」主题 Meetup

小猿姐

罗拉rola-ip海外IP能在哪找?

Geek_bf375d

爬虫 代理IP 代理IP设置 免费代理ip 跨境电商

工作室用代理ROLA-IP能防止封号吗?

Geek_bf375d

Java 内存的可见性与有序性

zurhan

深入理解 SQL UNION 运算符及其应用场景

小万哥

MySQL 数据库 程序员 sql 后端开发

如何拉取多架构镜像存储到私有库

许大强

TiDB 在咪咕云原生场景下的实践

PingCAP

MySQL 数据库 TiDB 用户实践

万媒易发:以RPA自动化和AIGC为基础实现多平台分发

爱写字的阿城

自动化

情感语音识别:技术前沿与未来趋势

来自四九城儿

集结!Milvus 老友汇 · 线下 Meetup 来袭

Zilliz

Meetup Milvus Zilliz AIGC KubeBlocks

CountDownLatch和CyclicBarrier:如何让多线程步调一致

zurhan

Scrum:敏捷开发流程的核心步骤

顿顿顿

敏捷开发流程 scrum工具 scrum敏捷工具

全球互联网是怎么形成的

Link

华为云耀云服务器L实例,助力初创及成长型企业实现高效数字化转型

平平无奇爱好科技

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