免费开源的iOS开发学习平台

iOS编译过程:1-编译原理

程序编译基础

一般可以将编程语言分为两种,编译语言和直译式语言。

  • 像C++,Objective C都是编译语言。编译语言在执行的时候,必须先通过编译器生成机器码,机器码可以直接在CPU上执行,所以执行效率较高。

  • 像JavaScript,Python都是直译式语言。直译式语言不需要经过编译的过程,而是在执行的时候通过一个中间的解释器将代码解释为CPU可以执行的代码。所以,较编译语言来说,直译式语言效率低一些,但是编写的更灵活,也就是为啥JS大法好。

iOS开发目前的常用语言是:Objective和Swift。二者都是编译语言,换句话说都是需要编译才能执行的。二者的编译都是依赖于Clang + LLVM. 篇幅限制,本文只关注Objective C,因为原理上大同小异。

iOS编译过程

不管是OC还是Swift,都是采用Clang作为编译器前端,LLVM(Low level vritual machine)作为编译器后端。所以简单的编译过程如图:

  • 编译器前端:编译器前端的任务是进行:语法分析,语义分析,生成中间代码(intermediate representation )。在这个过程中,会进行类型检查,如果发现错误或者警告会标注出来在哪一行。

  • 编译器后端--LVVM优化器(LLVM Optimizer)会进行BitCode的生成,链接期优化等等。

  • 编译器后端--LLVM机器码生成器(LLVM Code Generator)会针对不同的架构,比如arm64等生成不同的机器码。


原文地址:iOS编译过程的原理和应用