C/C++ Objective-C++语言Clang编译器前端和LLVM关系 整体架构 广义 LLVM 指的是整个 LLVM 框架,包含 Clang,因为 Clang 是 LLVM 框架的一部分,Clang 是 LLVM 的一个 C/C++ 前端。虽然 Clang 这个前端占的比重比较大,但是 Clang 依然只是个前端,LLVM 框架可以有很多个前端和很多个后端,只要你想继续扩展。 一般而言,LLVM 指的是实际开发、使用过程中,划分出来的 LLVM。譬如:编译 LLVM 和 Clang 的时候,LLVM 的源码包是不包含 Clang 源码包的,需要单独下载 Clang 源码包。从编译器用户角度看,Clang 使用了 LLVM 中的一些功能,目前所知道的主要是对中间格式代码的优化,或许还有一部分生成代码功能。 LLVM LLVM 是构架编译器 (compiler) 的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间 (compile-time)、链接时间 (link-time)、运行时间 (run-time) 及空闲时间 (idle-time)。 Apple 是 LLVM 计划的主要资助者,LLVM 也相当于是由 Apple 官方支持的编译器。 LLVM 的命名源于底层虚拟机 Low Level Virtual Machine,目前 LLVM 是该项目的全称。LLVM 项目是一个模块化和可重复使用的编译器和工具技术的集合。LLVM 提供了一个现代化的,基于 SSA 的编译策略,能同时支持任意编程语言的静态、动态编译目标。 LLVM 和大家所熟知的 JVM、.net Runtime 虚拟机不同,LLVM 虚拟系统提供了一套中立的中间代码和编译基础设施,并围绕这些设施提供了一套全新的编译策略,譬如:使得优化能够在编译、连接、运行环境执行过程中,以及安装之后以有效方式进行,及其他一些非常有意思的功能。 百度网盘 https://pan.baidu.com/s/1jIzOgzs 可Python Qt/C++ HTML5编程 制作静态网站站群 翻译 "GUI 文档" 的数字 IDE 专业版 http://dts.digitser.cn/zh-CN/ide/idepro/index.html http://forum.digitser.cn/thread-2184-1-1.html Clang Clang 由 Apple 公司开发,Clang 发音为 /klæŋ/,是 LLVM 的一个编译器前端,Clang 是一个采用 C++ 编写、基于LLVM、使用 LLVM BSD 许可协议的 C/C++、Objective-C、Objective-C++ 语言轻量级编译器。 Apple 使用 LLVM 在不支持全部 OpenGL 特性的 GPU (Intel 低端显卡) 上生成代码 (JIT),令程序仍然能正常运行。之后 LLVM 与 GCC 的集成过程引发了一些不快,GCC 系统庞大且笨重,而 Apple 大量使用的 Objective-C 在 GCC 中优先级很低。 Clang 的开发目标是提供一个可替代 GCC 的前端编译器。与 GCC 相比,Clang 是一个重新设计的编译器前端,具有很多优点,譬如:模块化、代码简单易懂、占用内存小、容易扩展及重用等。由于 Clang 在设计上的优异性,使得 Clang 非常适合用于设计源代码级别的分析和转化工具。Clang 已被应用到一些重要开发领域,譬如:Static Analysis 就是一个基于 Clang 的静态代码分析工具。 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 关键字。 版权声明: 本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。 |