gpt4 book ai didi

compiler-construction - 创建 LLVM 的原因是什么?

转载 作者:行者123 更新时间:2023-12-03 13:24:56 24 4
gpt4 key购买 nike

LLVM 和常规编译器有什么区别?
它是否更具动态性,因此可用于将通常非常动态的语言(即 Javascript)编译成静态二进制代码?
创建一个背后的原则是什么?
我知道编译器的 Dragon Book,但是 LLVM 有这样的东西吗?

编辑:
我找到了this有趣的项目。

最佳答案

LLVM 和“常规编译器”之间有一些区别,我假设它的意思是“gcc”:

  • LLVM 专为整个程序分析(也称为链接时间分析)而设计,因此它可以选择将代码编译为“位码”,这是一种以后可以重新分析的格式。
  • LLVM 提供了一个即时编译器 (JIT),以便它可以在程序运行时重新分析程序,就像 JVM 一样。
  • LLVM 设计得非常好:
  • 它的组件是模块化的,并且分离良好,
  • 它的中间表示有 3 种格式(文本、二进制和内存中表示),它们是等效的,
  • 它的中间表示使用SSA形式,
  • 它的中间表示具有类型系统。

  • 至于 Javascript 和其他动态语言,我们从动态语言社区中看到了很多对 LLVM 的兴趣,Python 和 Ruby 实现正在尝试。但是,这些并不是试图成为静态编译器。他们专注于使用 JIT。特别是,他们正在使用“混合模式解释器”优化长时间运行的可执行文件,它们最初解释程序,然后在运行时使用 LLVM 编译它们。我还没有看到使用 LLVM 的 javascript 引擎,但可能有一个。它只是不会创建静态可执行文件,除非在不寻常的情况下,或用于 Javascript 的缩减版本。

    至于创建 LLVM 的原因,它是作为 Vikram Adve 的一部分开始的。的研究小组在终身编译方面的工作(这意味着 JIT 和链接时间优化)。在获得博士学位后,Chris Lattner 搬到了 Apple,这极大地插入了该项目(可能是因为它是 BSD 许可的,这导致他们过去使用 gcc,即 GPL 时出现问题)。

    关于compiler-construction - 创建 LLVM 的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1420908/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com