我一直听说LLVM。它是Perl的,然后是Haskell的,然后有人在其他语言中使用它?是什么?
它与GCC(透视图=安全等)的确切区别是什么?
我一直听说LLVM。它是Perl的,然后是Haskell的,然后有人在其他语言中使用它?是什么?
它与GCC(透视图=安全等)的确切区别是什么?
当前回答
LLVM基本上是一个用于构建编译器和/或面向语言的软件的库。最基本的要点是,尽管你有gcc,这可能是最常见的编译器套件,但它并不是为可重用而构建的。很难从GCC中获取组件并使用它来构建自己的应用程序。LLVM通过构建一套“模块化和可重用的编译器和工具链技术”很好地解决了这个问题,任何人都可以使用这些技术来构建编译器和面向语言的软件。
其他回答
LLVM基本上是一个用于构建编译器和/或面向语言的软件的库。最基本的要点是,尽管你有gcc,这可能是最常见的编译器套件,但它并不是为可重用而构建的。很难从GCC中获取组件并使用它来构建自己的应用程序。LLVM通过构建一套“模块化和可重用的编译器和工具链技术”很好地解决了这个问题,任何人都可以使用这些技术来构建编译器和面向语言的软件。
LLVM是一个用于构造、优化和生成中间和/或二进制机器代码的库。
LLVM可以用作编译器框架,其中提供“前端”(解析器和词法分析器)和“后端”(将LLVM的表示转换为实际机器代码的代码)。
LLVM还可以充当JIT编译器——它支持x86/x86_64和PPC/PPC64程序集生成,具有旨在提高编译速度的快速代码优化。
不幸的是,从2013年起禁用了,在演示页面上可以使用从C或c++代码生成的LLVM机器代码。
LLVM(以前的意思是“低级虚拟机”,但不再是)是一个编译器基础设施,用c++编写,它是为编译时、链接时、运行时和“空闲时”优化用任意编程语言编写的程序而设计的。LLVM最初是为C/ c++实现的,它独立于语言的设计(以及它的成功)已经衍生出了各种各样的前端,包括Objective C、Fortran、Ada、Haskell、Java字节码、Python、Ruby、ActionScript、GLSL等等。
阅读这篇文章了解更多的解释 也可以看看Unladen Swallow
低级虚拟机(LLVM)
[Xcode构建过程]
替代方案:GCC(GNU编译器集合)。GDB -调试工具。支持更多语言和架构。
LLVM -是伞形项目(库集),它是不同项目的品牌名称(IR -中间表示,调试工具…)现在它已经不是虚拟机的缩写了。LLDB(LLVM Debugger) -调试工具。大公司支持
编译器:
Language FrontEnd(Many: Clang, Haskel, Swiftc...) -> Optimizer(Single) -> Backend(Many: arm64, x86_64, armv7...)
FrontEnd生成中间表示(IR, LLVM IR)。这种通用语言允许简单的缩放过程。如果你正在创建新的语言,你只需要对FrontEnd负责,如果你正在开发新的架构,你应该关注BackEnd。它是JVM中的一种.class文件,由ClassLoader使用[关于]
有三种等效的IR形式:
人类可读的汇编语言表示 内存编译器IR, [磁盘上位码表示方式]
Llvm-dis可用于将位码转换为人类可读的
LLVM编译器基础设施对于对代码执行优化和转换特别有用。它还包括许多用于不同用途的工具。Llvm-prof是一个分析工具,允许您对执行进行分析,以确定程序热点。Opt是一个优化工具,提供各种优化通道(例如,死代码消除)。
重要的是,LLVM为您提供了库,可以编写自己的pass。例如,如果您需要对传递到程序的某些函数的某些参数添加范围检查,那么编写一个简单的LLVM Pass就足够了。
有关自己写通行证的更多信息,请访问http://llvm.org/docs/WritingAnLLVMPass.html