LLVM(低级虚拟机):编译器架构

(1)前端:  源代码==静态编译==>中间码

(2)后端:  中间码==运行时动态编译(非解释)==>机器码


能够使C/C++跨平台



LLVM从本质上来说,它不是一个编译器.它是一个编译器的架构.通俗的来说,它实现了一个库,在这个库上,可以很容易的实现不同的编译相关的程序,当然,编译器自然是其中最重要的一个. 当然其他像编译时间的代码分析也是很容易实现的。

LLVM定义了一个虚拟机的语言。然后再这个语言的基础上,实现了很多的功能,例如大多数的优化都是基于这个虚拟机的语言来进行的。(这是和GCC很大的 不同,我想也是delphij提到的更好的优化的原因.) 你可以这么理解,LLVM就是建立了很多个积木块,写编译器就是搭积木。

LLVM-GCC就是一个积木块,它把C代码编译成LLVM的语言。

LLVM-GCC 模块 => LLVM CODE 
-> optimize 
-> xxxx 不同的积木块 
x86代码生成模块binary <=

这样,我们写两个积木就实现了一个编译器。如果要不同的平台,我们换最后那个。不同的语言,我们换第一个。

另外,我认为这是一个趋势。微软的phoeni项目和LLVM是非常的类似的。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐