python html5 bootstrap 视频教程

德云社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6166|回复: 0

C/C++ Objective-C++语言Clang编译器前端和LLVM关系 整体架构

[复制链接]

185

主题

204

帖子

1175

积分

工程师

Rank: 5Rank: 5

金钱
759
金币
15
威望
0
贡献
0
发表于 2017-5-1 11:31:04 | 显示全部楼层 |阅读模式
AI人工智能 语音助理 人工翻译 教程
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 中优先级很低。
同时 GCC 作为一个纯粹编译系统,与 IDE 配合并不优秀。加之许可证方面的要求,Apple 无法使用修改版的 GCC 而闭源。于是 Apple 决定从零开始写 C family 的前端,也就是基于 LLVM 的 Clang。


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 关键字。



长按二维码关注 "德云社区" ,点击最下方 "阅读原文" 了解更多资讯

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 19:26 , Processed in 0.031131 second(s), 27 queries .

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

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

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