python html5 bootstrap 视频教程

德云社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4850|回复: 0

Clang - BSD 许可 C/C++ Objective-C++ 语言 LLVM 轻量级编译器前端

[复制链接]

185

主题

204

帖子

1175

积分

工程师

Rank: 5Rank: 5

金钱
759
金币
15
威望
0
贡献
0
发表于 2017-5-1 10:36:38 | 显示全部楼层 |阅读模式
AI人工智能 语音助理 人工翻译 教程
Clang - BSD 许可 C/C++ Objective-C++ 语言 LLVM 轻量级编译器前端

Clang 由 Apple 公司开发,Clang 发音为 /klæŋ/,是 LLVM 的一个编译器前端,Clang 是一个采用 C++ 编写、基于LLVM、使用 LLVM BSD 许可协议的 C/C++、Objective-C、Objective-C++ 语言轻量级编译器。


Clang 完全实现了所有已发布的 ISO C ++ 标准 (C ++ 98 / C ++ 03,C ++ 11 及 C ++ 14) 和大多数即将推出的 C ++ 1z 标准。


Low Level Virtual Machine (LLVM) 是一个开源编译器架构,已被成功应用到很多应用领域。Apple 是 LLVM 计划的主要资助者,LLVM 也相当于是由 Apple 官方支持的编译器。Clang 对源程序进行词法分析和语义分析,并将分析结果转换为 Abstract Syntax Tree (抽象语法树) ,最后使用 LLVM 作为后端代码生成器。


Clang 的开发目标是提供一个可替代 GCC 的前端编译器。与 GCC 相比,Clang 是一个重新设计的编译器前端,具有很多优点,譬如:模块化、代码简单易懂、占用内存小、容易扩展及重用等。由于 Clang 在设计上的优异性,使得 Clang 非常适合用于设计源代码级别的分析和转化工具。Clang 已被应用到一些重要开发领域,譬如:Static Analysis 就是一个基于 Clang 的静态代码分析工具。


10 倍以上效率提升 智能GUI文档翻译 Python Qt/C++ HTML5 网站站群 "数字 IDE 专业版" 开发工具

http://idepro.digitser.cn/

http://forum.digitser.cn/thread-2342-1-1.html


百度网盘

https://pan.baidu.com/s/1jIzOgzs


软件仓库

https://github.com/digitser

https://digitser.sourceforge.io/

https://pan.baidu.com/s/1TV70__Be1ta0ney1-tudFQ


Clang 的目标是超越 GCC 编译器。Clang 编译速度快、占用内存少、具有诊断功能,兼容 GCC。Clang 可满足代码重构、静态分析、代码生成等需求,还允许集成到各种 IDE 中。Clang 编译产出小、出错提示友好,尤其是在比较极端的情况下。


Clang 与 GNU C 语言规范几乎完全兼容;当然,也有部分内容不兼容,譬如:编译命令选项就有差异。Clang 增加了一些额外语法特性,如:C 函数重载,通过 __attribute__((overloadable)) 修饰函数。


2013 年 04 月 Clang 开始全面支持 C++11 标准,实现了 C++1y 特性 (即 C++14,这是 C++ 下的一个小更新版本)。Clang 支持普通 lambda 表达式、返回类型的简化处理、更好的处理 constexpr 关键字。




开发背景

Apple 使用 LLVM 在不支持全部 OpenGL 特性的 GPU (Intel 低端显卡) 上生成代码 (JIT),令程序仍然能正常运行。之后 LLVM 与 GCC 的集成过程引发了一些不快,GCC 系统庞大且笨重,而 Apple 大量使用的 Objective-C 在 GCC 中优先级很低。


同时 GCC 作为一个纯粹编译系统,与 IDE 配合并不优秀。加之许可证方面的要求,Apple 无法使用修改版的 GCC 而闭源。于是 Apple 决定从零开始写 C family 的前端,也就是基于 LLVM 的 Clang。


主要特性

01、BSD 许可协议

由于 Clang 采用的是 BSD 许可协议,这也是苹果资助 LLVM、FreeBSD 淘汰 GCC 换用 Clang 的一个重要原因。


02、编译速度快

通过编译 OS X 上几乎包含所有 C 头文件的 carbon.h 文件测试,包括预处理 (Preprocess),语法 (lex),解析 (parse),语义分析 (Semantic Analysis),抽象语法树生成 (Abstract Syntax Tree) 的时间,Clang 比 Apple GCC 4.0 快 2.5x。


03、占用内存少

Clang 内存占用量是源码的 130%,Apple GCC 则超过 10x。


Clang 生成的 AST 所占用的内存,是 GCC 的五分之一左右。


04、诊断信息可读性强

在编译过程中,Clang 创建并保留了大量详细元数据 (metadata),有利于调试和错误报告。


Clang 语法错误不但有源码提示,还在错误调用和相关上下文的下方有 ~~~~~ 和 ^ 提示,相比之下,GCC 的提示就差很多。


05、简单、易于扩展

Clang 设计简单清晰,容易理解,易于扩展增强。与代码古老的 GCC 相比,学习曲线平缓。


06、模块化、易于集成 IDE

由于历史原因,GCC 是一个单一可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。


Clang 采用基于库的模块化设计,易于 IDE 集成及其他用途的重用。


Clang 将编译过程分成彼此分离的几个阶段,AST 信息可序列化。通过库的支持,程序能够获取到 AST 级别的信息,将大大增强对于代码的操控能力。对于 IDE 而言,代码补全、重构是重要功能;如没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的。


版本历史
时间
版本
说明
备注
2009.10.23LVM 2.6Clang 实现了所有 ISO C ++ 98 标准 (包括 ISO C ++ 03 标准中的缺陷),导出 (在 C ++ 11 中被删除) 除外。支持 ISO C ++ 98,首次包含 Clang
2011.12.02LLVM 3.0全新寄存器分配器,大幅性能提升;完全支持 C++ 内存模型中的全新原子操作;改进 MIPS 后端;支持 gprof/gcov 风格的 profile 信息。
2012.05.22LLVM 3.1用于检测内存错误的新 Address Sanitizer 工具新增 ARM 集成汇编工具
2013.06.17LLVM 3.3实现所有 ISO C ++ 11 标准支持 ISO C ++ 11
2014.01.02LLVM 3.4实现所有 ISO C ++ 14 标准支持 ISO C ++ 14
2015.05.26LLVM 3.6大量 bug 修复,优化改进,Clang 支持更多被提议的 C++1z 功能,更好的原生 Windows 兼容性,本地对象文件中嵌入 LLVM IR 等绑定 Go 语言
2015.09.02LLVM 3.7
完全支持 OpenMP 3.1(behind a flag),the On Request Compilation (ORC) JIT API,一个全新后端用于 Berkeley Packet Filter (BPF)、Control Flow Integrity 检查,新 Clang 警告
2017.03.13LLVM 4.0


"长按二维码" 或 "扫一扫" 关注 "德云社区" 微信公众号

版权声明:
本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。

AI人工智能 语音助理 人工翻译 教程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|Sitemap|小黑屋|德云社区 |网站地图  

GMT+8, 2024-4-30 02:08 , Processed in 0.055122 second(s), 27 queries .

工业和信息化部: 粤ICP备14079481号-2

技术支持 乐数软件     版权所有 © 2014-2021 德云社区    

快速回复 返回顶部 返回列表