以何种方式(S)是LLVM(低级虚拟机)的低等级?(在撰写本文时,我在其网站上未找到缩写“ LLVM”的这种扩展,但在Wikipedia上却发现了这种扩展。)
它是为(编译器基础结构)设计的目的而被称为“低级”,还是因为它比其他工具在“低级”上工作?
以何种方式(S)是LLVM(低级虚拟机)的低等级?(在撰写本文时,我在其网站上未找到缩写“ LLVM”的这种扩展,但在Wikipedia上却发现了这种扩展。)
它是为(编译器基础结构)设计的目的而被称为“低级”,还是因为它比其他工具在“低级”上工作?
Answers:
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中指定了处理其他内容的用户类加载器。默认情况下包括一些类加载器,如果您想做的不够好,可以通过定义自己的类来进行补充。
它是低级的,因为它被设计为使现有或将来的虚拟机(JVM)可以将其用作其实现的核心。
这样看:Java和Python的虚拟机非常易于移植,因为它们是用标准C编写的,并且在很大程度上依赖于它们自己的库。LLVM的目的是提供基础架构,以便轻松将任何虚拟机移植到已经支持LLVM的平台。
LLVM为静态和JIT编译提供支持,并且LLVM的设计使其可以在受信任的操作系统空间中运行。从理论上讲,这意味着在LLVM之上运行虚拟机应该意味着更少的工作,并且可以带来更快,更高效的东西。理论上。
然后,较低级别的LLVM应该更易于移植到不同的OS和硬件体系结构。
如果语言实现者可以写到一个易于移植的低级平台,则可以节省很多钱。最著名的VM位于它们提供的语言和操作系统之间,它们必须实现自己的中间表示形式和JITC。