LLVM 是什么?
有什么说的不对的地方,还请多多支出, 谢谢~
概述
LLVM : 全称是这个Low Level Virtual Machine,底层虚拟机,名字是带有虚拟机,但是现在早已和虚拟机没有任何关系了. 是整个LLVM项目,我目前了解的有5部分.
LLVM 是一个用于构造、优化和生成中间和/或二进制机器码的库
。能够同时支持任意编程语言的静态和动态编译。
我之前在互联网工作,知道的前端vue、react和后端Java、python等. 现在编译器也有前端和后端.
LLVM 可以用作编译器框架,其中提供“前端”(解析器和词法分析器)和“后端”(将 LLVM 的表示转换为实际机器代码的代码)。
LLVM 还可以充当 JIT 编译器——它支持 x86/x86_64和 PPC/ppc64的汇编生成,具有针对编译速度的快速代码优化。
LLVM project/infrastructure
这是几个项目的总称,前端、后端、优化器、汇编器、连接器、 libc++ 、编译器-rt 和 及时引擎,它们共同组成了一个完整的编译器.
LLVM-based compiler
这是一个部分或完全使用 LLVM 基础结构构建的编译器。例如,编译器可能在前端和后端使用 LLVM,但是使用 GCC 和 GNU 系统库执行最终链接。
LLVM libs
这是 LLVM 基础结构的可重用代码部分.
LLVM 是一个用于构建编译器、链接器、运行时执行器、虚拟机和其他程序执行相关工具的工具包。除了 LLVM 工具集之外,LLVM 的功能还可以通过一组库来实现。要使用 LLVM 作为构建工具的工具包,开发人员需要了解各个库中包含什么、它们依赖什么以及如何使用它们。幸运的是,有一个工具 llvm-config 可以帮助解决这个问题。可以参考上面贴的这个链接.
LLVM core
在中间语言和后端算法层进行的优化。
LLVM IR
LLVM 编译器的中间表示. LLVM 是一种基于静态单分配(SSA)的表示,它提供了类型安全、低级操作、灵活性以及干净利落地表示“所有”高级语言的能力。它是 LLVM 编译策略的阶段使用的通用代码表示形式。
引用
https://chiphub.top/topics/6
https://www.jianshu.com/p/237ed53ddaeb
https://llvm.org/
https://gnuu.org/2009/09/18/writing-your-own-toy-compiler/
https://stackoverflow.com/questions/2354725/what-exactly-is-llvm
作者:叉叉敌
博客:https://chasays.github.io/
微信公众号:Chasays, 欢迎关注一起吹牛逼,也可以加个人微信号「xxd_0225」互吹。
本博客大多为学习笔记或读书笔记,本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。