为什么要写这两个东西呢?因为看到一个面试题说这两个,觉得还挺有意思的。
xcode 的编译以前是用GCC,后来因为GCC是第三方的,支持不了OC的发展需要,苹果就自己搞了一个Clang+LLVM编译器。其中Clang负责前端的代码分析,生成代码树(抽象语法树),交给中间件(优化器),中间件再做进一步的处理交给LLVM,生成了机器语言。
所以Clang只是LLVM的前端解释器
image.png
至于为什么是三段式的结构,下面的图完美的解释了这个原因:为了拓展的方便,中间的优化器不用动,增加一个语言,那只需要添加一个前端编译器,添加一个后端架构,只需要添加一个后端的编译器。
image.png