LLVM究竟是什么?

问题描述 投票:387回答:6

我一直听说LLVM。它在Perl中,那么它在Haskell中,然后有人在其他语言中使用它吗?它是什么?

llvm
6个回答
306
投票

LLVM是一个用于构造,优化和生成中间和/或二进制机器代码的库。

LLVM可以用作编译器框架,您可以在其中提供“前端”(解析器和词法分析器)和“后端”(将LLVM表示转换为实际机器代码的代码)。

LLVM还可以充当JIT编译器 - 它支持x86 / x86_64和PPC / PPC64程序集生成,具有针对编译速度的快速代码优化。

如果您有兴趣,可以使用LLVM的机器代码,这些机器代码是从demo page中的C或C ++代码生成的。


61
投票

低级虚拟机(LLVM)是一种用C ++编写的编译器基础结构,专为编译时,链接时,运行时和以任意编程语言编写的程序的“空闲时”优化而设计。最初是为C / C ++实现的,LLVM的独立于语言的设计(以及成功)已经产生了各种各样的前端,包括Objective C,Fortran,Ada,Haskell,Java字节码,Python,Ruby,ActionScript,GLSL , 和别的。 Read this for more explanation 还可以看看Unladen Swallow


55
投票

LLVM的一个很好的总结是这样的:

enter image description here

在前端你有Perl和许多其他高级语言。在后端,您拥有直接在计算机上运行的本机代码。

中心是您的中间代码表示。如果每种高级语言都可以用这种LLVM IR格式表示,那么基于此IR的分析工具可以很容易地重用 - 这是基本的理性。


46
投票

根据'Getting Started With LLVM Core Libraries'书(c):

实际上,LLVM这个名称可能引用以下任何一个:

  • LLVM项目/基础架构:这是几个项目的保护伞,它们共同构成了一个完整的编译器:前端,后端,优化器,汇编器,链接器,libc ++,编译器-rt和JIT引擎。单词“LLVM”具有这个含义,例如,在下面的句子中:“LLVM由几个项目组成”。
  • 基于LLVM的编译器:这是使用LLVM基础结构部分或完全构建的编译器。例如,编译器可能使用LLVM作为前端和后端,但使用GCC和GNU系统库来执行最终链接。 LLVM在下面的句子中具有这个含义,例如:“我使用LLVM将C程序编译到MIPS平台”。
  • LLVM库:这是LLVM基础结构的可重用代码部分。例如,LLVM在句子中有这样的含义:“我的项目使用LLVM通过其即时编译框架生成代码”。
  • LLVM核心:在中间语言级别发生的优化和后端算法构成项目启动的LLVM核心。 LLVM在以下句子中具有这种含义:“LLVM和Clang是两个不同的项目”。
  • LLVM IR:这是LLVM编译器中间表示。 LLVM在句子中使用时具有这种含义,例如“我构建了一个将我自己的语言翻译成LLVM的前端”。

31
投票

LLVM基本上是用于构建编译器和/或面向语言的软件的库。基本的要点是虽然你有gcc可能是最常见的编译器套件,但它并不是可重复使用的,即。很难从gcc中获取组件并使用它来构建自己的应用程序。 LLVM通过构建一组“模块化和可重用的编译器和工具链技术”来解决这个问题,任何人都可以使用它来构建编译器和面向语言的软件。


5
投票

LLVM编译器基础结构对于执行代码优化和转换特别有用。它还包含许多服务于不同用途的工具。 llvm-prof是一个分析工具,允许您对执行进行分析以识别程序热点。 Opt是一种优化工具,可提供各种优化过程(例如,消除代码)。

重要的是,LLVM为您提供了库,以编写您自己的Passes。例如,如果您需要对传递给程序的某些函数的某些参数添加范围检查,那么编写一个简单的LLVM Pass就足够了。

有关编写自己的Pass的更多信息,请查看此http://llvm.org/docs/WritingAnLLVMPass.html

© www.soinside.com 2019 - 2024. All rights reserved.