什么事LLVM和Clang?Clang与GCC有什么区别?Clang如何使用?

这个问题主要讲Xcode编译器的认知,在学习iOS之前有必要学习一下Objective-C的编译环境。

在了解LLVM和Clang之前,先得了解一下什么是编译器。

编译器是一种计算机程序,它将某种编程语言(高级编程语言)写成的源代码转换成另一种编程语言(低级编程语言)。一个现代编译器的主要工作流程为:源代码->预处理器->编译器->目标代码->链接器->可执行程序,最后打包文件,让计算机运行。编译器的目的是将便于人写的高级编程语言作为源代码,翻译成计算机能够执行的低级机器语言,也就是可执行文件。其中高级语言有C、C++、Java、Python等,低级语言有汇编语言和机器代码。一个编译器可以按照三段式分为:前段(Fontend)、优化器(Optimizer)、后端(Backend)

GCC(GNU Compiler Collection)是一套有GNU开发的编程语言编译器,以GPL及LGPL许可证所发行的自由软件。GCC原名为GNU C 语言编译器,它原本只能处理C语言,随着技术的发展,GCC很快地得到扩展,变得可以处理C++,之后可以处理的语言扩展到Fortran、Pascal、Objective-C、Java等。

LLVM(Low Level Virtual Machine),即底层虚拟机。它是一个由C++编写而成的编译器基础框架,利用虚拟技术创造出编译时期、链接时期、运行时期以及“闲置时期”的最优化框架。从宏观上来讲,LLVM不仅仅是一个编译器或者虚拟机,它是一个众多编译器工具及低级工具技术的统称,它包含了一个前端、优化器、后端以及众多的函数库和模板。从微观上来讲,可以把它看做后端编译器,用来生成目标代码,前端编译器为Clang。Xcode5版本之前,编译器默认使用的是GCC,从Xcode5之后编译器默认使用LLVM。原因后面马上讲到。

CLang是一个由C++编写的编译器前端,能够编译C/C++/Objective等高级语言,属于LLVM的一部分,发布于BSD(自由软件中使用最广发的许可证之一)许可证下,其目的就是为了超越GCC。经过测试证明,Clang编译Objective-C代码的速度为GCC的3倍左右,同时它还能针对用户发生的编译错误准确地给出建议

Clang和GCC的主要区别如下所示。

  1. Clang比GCC编译用的时间更短,包括预处理、语法分析、解析、语义分析、抽象语法树生成的时间。
  2. Clang比GCC的内存占用更小。
  3. Clang生成的中间产物比GCC更小。
  4. Clang的错误提示比GCC更加友好。
  5. Clang有静态分析,GCC没有。
  6. Clang使用BSD许可证,GCC使用GPL许可证。
  7. Clang从一开始就被设计为一个API,允许它被源代码分析工具和IDE集成。GCC被构建成一个单一的静态编译器,这使得它非常难以被作为API并集成到其他工具中。
  8. GCC比Clang支持更多的语言,例如Java。
  9. GCC比Clang支持更多的平台。
  10. GCC比Clang更流行。

在iOS开发中,经常使用Clang将Objective-C代码转化成C++代码,从而分析代码的底层实现。以main.m文件为例。

clang -rewrite-objc main.m //将Objective-C转为C++

 

 

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值