百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

C语言编译器之二,Clang("c语言编译器")

sinye56 2024-10-22 16:17 6 浏览 0 评论

二、Clang编译器

Clang编译器是由APPLE公司的编译器大牛Chris Lattner主导下编写的,其目标是替换大名鼎鼎的GCC编译器;

2.1、Clang和GCC编译器架构

从源代码到可执行程序一般经过预处理、编译、链接过程,而编译是编译器的工作,编译分为三个阶段,分别为前端、优化器、后端。

i.编译前端:将源代码转化成中间代码。其详细过程包括:词法分析、语法分析、生成中间代码;

ii.优化器:对编译器生成的中间代码进行一些优化,最终提供给编译后端;

iii.编译后端:根据不同的 cpu 架构,将中间代码汇编,产生汇编代码,最后解析汇编指令,生成目标代码,也就是机器码;

编译器的这种前端、优化器、后端的架构的优点是:

a.当为新的语言开发编译器时,只需要针对新的语言开发前端,产生标准通用的中间代码,这样优化器与后端可以不用修改;

b.当为新的架构开发编译器时,只需要针对新的架构开发后端,而无需修改前端和优化器。所以,这种架构对编译器的开发维护工作就简单许多,同时提升执行效率。

2.2、Clang起源

GCC编译器从20世纪90年代就已经开发出来了,特别作为 Linux的当家编译器,GCC开源使得其广为流传,包括Apple在内,最开始也是使用GCC编译器,因为当时的Apple并没有自己的编译器,因此早期的XCODE使用GCC编译器编译Object-C,由于Object-C不断地引入新的特性,Apple公司不停与GCC组织协商改进GCC,可能当时的Apple还未有什么名气,GCC不太配合修改,这让Apple公司很是恼火。

转机来了,2005年刚研究生毕业的Chris Lattner被Apple招致麾下,Chris Lattner可是精通编译器理论,其博士阶段的LLVM-GCC架构的编译器在其进入Apple公司后就被完善使用,Apple公司甚至将其当作替代GCC编译器的不二之选。但是,GNU组织出台了《GCC 运行环境豁免条款》从根本上限制了 LLVM-GCC 的开发,这让Apple公司下定决心,从新开始编写C编译器,由Chris Lattner牵头,这就是Clang编译器的诞生,基于LLVM架构,为LLVM Compiler 1.0,这个版本不支持C++。

这就是早期XCODE同时支持GCC、LLVM-GCC、LLVM Compiler的原因。

从XCODE4开始,也就是 Mac OS X 10.6版本系统上,Apple 宣布停止更新GCC编译器,这样GCC停留在GCC4.2版本,并建议大家使用LLVM Compiler 2.0(LLVM-Clang),该版本完全支持C++/ Objective-C++,并提供libc++库来支持新的C++ standard(C++0x标准),而GCC/LLVM-GCC支持的是GCC标准库libstdc++;

从XCODE4.2开始,就默认使用LLVM-Clang,彻底抛弃了GCC;而LLVM-GCC毕竟也是亲儿子,改为一个GCC的插件DragonEgg。

由于Clang设计之初就考虑到模块化设计,因此,清晰简单,出错提示更好,易于扩展,容易与IDE集成;而GCC由于早期设计只支持C语言,后面不断扩展C++/ Java/Ada/Fortran/Go等,虽然支持更多平台;更流行,广泛使用,支持完备,但是其代码接口耦合性强,更新维护和性能等较差。

由于LLVM-Clang的优秀设计,Android NDK从r11开始建议大家切换到clang。并且把GCC标记为deprecated(弃用),将GCC版本锁定在GCC 4.9不再更新;Android NDK从r13起,默认使用Clang进行编译。但是暂时也没有把GCC删掉,Google考虑 libc++(LLVM-Clang的c++标准库)还不够稳定; Android NDK 在 r17 中宣称不再支持 GCC 并在后续的 r18 中删掉 GCC。现在GCC主战场只剩Linux跟部分Windows应用软件开发。

现在最新LLVM版本号已经到了12.0.1版本,官方地址如下:

LLVM编译器基础架构:http://llvm.org/

Clang:http://clang.llvm.org/

DragonEgg – LLVM-GCC:http://dragonegg.llvm.org/

二进制安装文件在github仓库中,地址为:

https://github.com/llvm/llvm-project/releases/tag/llvmorg-12.0.1

可见Clang也在x86/arm/powerpc架构下,及Linux系统下已经广泛支持,Clang与GCC进入激烈竞争的局面,对于吃瓜群众来说,应该是好事!

Clang起源具体细节可以参考“Mac OS X 背后的故事(作者王越)”,该文详细介绍了Apple公司从创立之初到现今富可敌国的公司,中间的起起伏伏,堪比一部电视连续剧。

以上,个人理解,仅供参考!

相关推荐

程序员:JDK的安装与配置(完整版)_jdk的安装方法

对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...

Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置

一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...

麒麟系统安装JAVA JDK教程_麒麟系统配置jdk

检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...

学习笔记-Linux JDK - 安装&配置

前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

测试员必备:Linux下安装JDK 1.8你必须知道的那些事

1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...

Linux 下安装JDK17_linux 安装jdk1.8 yum

一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...

在Ubuntu系统中安装JDK 17并配置环境变量教程

在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...

如何在 Linux 上安装 Java_linux安装java的步骤

在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...

Windows和Linux环境下的JDK安装教程

JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...

linux安装jdk_linux安装jdk软连接

JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...

linux安装jdk,全局配置,不同用户不同jdk

jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...

运维大神教你在linux下安装jdk8_linux安装jdk1.7

1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...

window和linux安装JDK1.8_linux 安装jdk1.8.tar

Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...

最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?

默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...

取消回复欢迎 发表评论: