LLVM究竟是什么?

我一直听到LLVM的消息。 它在Perl中,然后在Haskell中,然后有人在其他语言中使用它? 它是什么?

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

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

LLVM也可以充当JIT编译器 – 它支持x86 / x86_64和PPC / PPC64程序集生成,并具有快速代码优化function,旨在提高编译速度。

如果您有兴趣,可以使用LLVM的机器代码,这些代码是由演示页面中的 C或C ++代码生成的。

低级虚拟机(LLVM)是一个编译器基础结构,用C ++编写,专门为以任意编程语言编写的程序的编译时间,链接时间,运行时间和“空闲时间”优化而devise。 最初是为C / C ++实现的,LLVM的语言无关devise(以及成功)已经衍生出各种各样的前端,包括Objective C,Fortran,Ada,Haskell,Java字节码,Python,Ruby,ActionScript,GLSL , 和别的。

阅读这个更多的解释
也检查出Unladen燕子

根据“LLVM核心库入门”一书(c):

实际上,LLVM的名字可能是指以下任何一个:

  • LLVM项目/基础设施:这是几个项目的总括,它们组成一个完整的编译器:前端,后端,优化器,汇编器,连接器,libc ++,编译器rt和JIT引擎。 “LLVM”这个词有这个意思,例如,在下面的句子中:“LLVM由几个项目组成”。

  • 基于LLVM的编译器:这是部分或全部使用LLVM基础结构构build的编译器。 例如,编译器可能使用LLVM作为前端和后端,但使用GCC和GNU系统库来执行最终的链接。 LLVM的含义如下,例如:“我用LLVM编译C程序到MIPS平台”。

  • LLVM库:这是LLVM基础结构的可重用代码部分。 例如,LLVM的含义如下:“我的项目使用LLVM通过即时编译框架生成代码”。

  • LLVM核心:在中间语言级别发生的优化和后端algorithm形成项目启动的LLVM核心。 LLVM的含义如下:“LLVM和Clang是两个不同的项目”。

  • LLVM IR:这是LLVM编译器的中间表示。 当在诸如“我build立了一个将我自己的语言翻译成LLVM的前端”这样的句子中使用LLVM时,LLVM就有这个意思。

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

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

重要的是,LLVM为您提供图书馆,编写自己的通行证。 例如,如果您需要为传递给程序某些函数的特定参数添加范围检查,那么编写简单的LLVM Pass就足够了。

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