LLVM低级别是哪种方式?


12

以何种方式(S)是LLVM(低级虚拟机)的低等级?(在撰写本文时,我在其网站上未找到缩写“ LLVM”的这种扩展,但在Wikipedia上却发现了这种扩展。)

它是为(编译器基础结构)设计的目的而被称为“低级”,还是因为它比其他工具在“低级”上工作?

作为(某种)“说明”,LLVM是否比JVMCLR低,或者仅设计用于“低级”用途?

Answers:


16

LLVM比JVM和CLR等典型VM的级别低。例如,尽管它具有用于垃圾收集器的钩子,但它本身并不提供垃圾收集器。

同样,JVM具有内置的JIT编译器(真正的较早版本除外)。LLVM有一些用于LLVM IR的JIT编译器,但开发人员仍然需要将事情挂钩并实际JIT代码。

当JVM遇到未解决的外部问题时,它会走出去并找到合适的类来满足它,并且知道如何直接在文件系统和.jar文件1中查找.class文件。LLVM的JIT编译器具有挂钩,您可以在其中确定如何处理类似的事情。正如您所期望的,有些人已经编写了一些默认版本,因此它可以按与JVM大致相同的顺序执行操作-但您也可以随意忽略这些操作,并且可以选择不同的操作。

简而言之,如果您正在开发编译器(或按此顺序排序的东西),那么它有很多工具可以使您的生活变得轻松。不必担心优化问题,您可以进行从源代码到LLVM IR的最简单的翻译,然后使用LLVM库管理优化,JITing,链接等。尽管如此,它们是库-它提供了一些真正有用的函数,因此您不必处理所有细节,但是它们仍然是函数,并且您仍在编写代码来调用它们。它不是最终产品,而是用于相对快速轻松地构建产品的有用工具。


1从技术上讲,并不是所有这些都内置在JVM中。它指定了通常作为JVM一部分的原始类加载器,然后在java.util.ClassLoader中指定了处理其他内容的用户类加载器。默认情况下包括一些类加载器,如果您想做的不够好,可以通过定义自己的类来进行补充。


12

它是低级的,因为它被设计为使现有或将来的虚拟机(JVM)可以将其用作其实现的核心。

这样看:Java和Python的虚拟机非常易于移植,因为它们是用标准C编写的,并且在很大程度上依赖于它们自己的库。LLVM的目的是提供基础架构,以便轻松将任何虚拟机移植到已经支持LLVM的平台。

LLVM为静态和JIT编译提供支持,并且LLVM的设计使其可以在受信任的操作系统空间中运行。从理论上讲,这意味着在LLVM之上运行虚拟机应该意味着更少的工作,并且可以带来更快,更高效的东西。理论上。

然后,较低级别的LLVM应该更易于移植到不同的OS和硬件体系结构。

如果语言实现者可以写到一个易于移植的低级平台,则可以节省很多钱。最著名的VM位于它们提供的语言和操作系统之间,它们必须实现自己的中间表示形式和JITC。


5

LLVM名称的“低级”部分是指所使用的虚拟指令集的级别。LLVM使用的中间语言(IR)尽管与体系结构无关且通用,但已接近机器代码级别。

另一方面,JVM和CLR的字节码相当高级,因为它的指令位于更高的抽象层上。它们都是面向对象的基于堆栈的汇编语言。例如,JVM具有指令invokevirtual,这是一条必须了解Java语言的特定对象模型的指令。


3

它肯定比任何特定于语言的VM以及JVM和CLR等统一VM的级别低。它的设计接近于GCC(GIMPLE)和类似编译器中的低级中间表示。没有默认的GC,没有强制执行任何特定的高级类型系统,没有假定任何对齐方式(必须明确指定对齐方式),整数和浮点数据类型是明确的(并且依赖于平台),并且所有级别中的最低级别-可以使用体面的指针算法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.