Gcc LLVM到底是什么?

Gcc LLVM到底是什么?,gcc,llvm,Gcc,Llvm,我一直听说LLVM。它是在Perl中,然后是在Haskell中,然后有人在其他语言中使用它?这是什么 它与GCC(透视=安全等)的具体区别是什么 LLVM是一个用于构造、优化和生成中间和/或二进制机器代码的库 LLVM可以用作编译器框架,其中提供“前端”(解析器和词法分析器)和“后端”(将LLVM表示转换为实际机器代码的代码) LLVM还可以充当JIT编译器—它支持x86/x86_64和PPC/PPC64程序集生成,并进行了旨在提高编译速度的快速代码优化 不幸的是,自从2013以来,在C/C+

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

  • 它与GCC(透视=安全等)的具体区别是什么

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

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

      LLVM还可以充当JIT编译器—它支持x86/x86_64和PPC/PPC64程序集生成,并进行了旨在提高编译速度的快速代码优化

      不幸的是,自从2013以来,在C/C++代码中,在./P>< P> LVM(用于表示“低级别虚拟机”,但不再是)的LLVM机器代码中,有能力编译一个编译基础结构,它是用C++编写的,它是用于编译时间、链接时间、运行时间和“空闲时间”的。优化用任意编程语言编写的程序。LLVM最初是为C/C++实现的,与语言无关的设计(以及它的成功)后来催生了各种各样的前端,包括Objective C、Fortran、Ada、Haskell、Java字节码、Python、Ruby、ActionScript、GLSL等



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

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


      有关编写自己的Pass的更多信息,请检查此

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

      根据书(c):

      事实上,LLVM这个名称可能指的是以下任何一种:

      • LLVM项目/基础设施:这是几个项目的保护伞 共同构成完整编译器的项目:前端, 后端、优化器、汇编器、链接器、libc++、编译器rt和 JIT引擎。例如,在 下面一句话:“LLVM由几个项目组成”

      • 基于LLVM的编译器:这是部分或部分构建的编译器 完全使用LLVM基础架构。例如,编译器可能 前端和后端使用LLVM,但使用GCC和GNU系统 库来执行最终链接。LLVM在 下面的句子,例如:“我用LLVM编译C程序 MIPS平台”

      • LLVM库:这是可重用代码部分 LLVM基础架构的一部分。例如,LLVM在 句子:“我的项目使用LLVM通过它的 即时编译框架”

      • LLVM核心:优化 这发生在中间语言级别和后端 算法构成了项目开始的LLVM核心。LLVM有这个 意思如下:“LLVM和Clang是两个不同的 项目”

      • LLVM IR:这是LLVM编译器的中间版本 代表性。LLVM在下列句子中使用时具有此含义: “我建立了一个前端,将我自己的语言翻译成LLVM”


      LLVM的一个很好的总结是:

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


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

      低级虚拟机(LLVM)

      备选方案:GCC(GNU编译器集合)。GDB(GNU调试器)-调试工具。支持更多的语言和体系结构

      LLVM是一个伞形项目(一组库),它是一个有不同项目(IR、调试工具…)的品牌,现在它不是虚拟机或缩写。LLDB(LLVM调试器)-调试工具。由大公司支持

      编译器:

      Language FrontEnd(Many: Clang, Haskel...) -> Optimizer(Single) -> Backend(Many: ARM, x86...)
      
      前端生成
      中间表示(IR)
      。此通用语言允许简单的缩放过程。如果您正在创建新的语言,您只负责前端,如果您正在开发新的体系结构,您应该注意后端。它是JVM中的一种
      .class
      文件,由
      ClassLoader

      有三种等价的IR表格:

      • 人类可读的汇编语言表示法
      • 内存编译器IR

      llvm dis
      可用于将
      bitcode
      转换为
      人类可读的

      如果您想使用它,请看这篇精彩的文章:答案中提供的链接说“llvm演示页当前已禁用”。这是通过llvm将C/C++编译到各种目标的另一种方式,包括中间编解码器,您可以给出一个实际的示例来说明它的含义吗?现在您可以使用生成的LLVM进行播放