什麽是LLVM?编程语言中如何使用 LLVM

创造新的语言,变着花样的提升现有语言的能力,这在整个编程界正风行,其中首当其冲就是 LLVM (底层虚拟机 Low-Level Virtual Machine)。LLVM 使创建新语言变得更加容易,同时也可以增强现有语言的开发。

※ 什麽是LLVM?

LLVM 是一个以编程方式创建机器原生代码的库。开发人员使用该 API 以一种称为中间代理或 IR 的格式生成指令。然後 LLVM 可以将 IR 编译成一个独立的二进制文件,或者在另一个程序(如语言解释器)的上下文中执行 JIT (just-in-time) 编译。

※ LLVM的特点:专为可移植性而生

很多人觉得LLVM与 C 编程语言很相似,但C 语言只是作为一种可移植的汇编语言,是其工作方式的一种效果,而非它的设计目标之一。

相比之下,LLVM 的 IR 是从一开始就设计为可移植的组件,能实现这种可移植性的一种方法是提供独立於任何特定机器架构的原语。

※ 编程语言中如何使用 LLVM

1)用 LLVM 进行即时编译

有些情况下,程序是需要在运行时动态生成代码,而不是预先编译,而.Net 和 Mono 等可以选择通过 LLVM 後端方式编译为原生代码或即时编译数字代码并加速其执行。

2)使用 LLVM 进行自动代码优化

LLVM 不仅将 IR 编译为原生机器码,还能直接以编程的方式在整个链接过程中高度精细地优化代码。优化方式是相当积极主动的,能够实现包括内联函数在内,消除死代码(包括未使用的类型声明和函数参数)和展开循环这些事情。

3)使用 LLVM 的领域特定语言

LLVM 已被用於生成多种通用语言的编译器,但它也可用於生成高度垂直或排他性问题域的语言。另外,LLVM 可以被使用的另一种方法是将特定领域的扩展添加到现有语言。

※ 在不同语言中使用 LLVM

使用 LLVM 的典型方式是通过你所熟悉的语言来编写代码,例如: C 和 C++,但这两种语言并不是唯一的选择。很多语言都都可以原生调用 C 语言库,所以理论上可以用任何这样的语言进行 LLVM 开发,但需要有一个实际的语言库可以很好地封装 LLVM API。

幸运的是,许多语言和语言运行时都有这样的库,包括 C#/.Net/Mono, Rust, Haskell, OCAML, Node.js, Go, 和 Python。需要注意的是,一些与 LLVM 的语言绑定可能不完整。

那麽, LLVM 还被移植到哪些语言之上呢?

Haskell:参考原始教程的直接移植。

Python:在此网站的教程和原始版本非常相近,而另一个版本则是用交互式命令行进行更为雄心勃勃的重写。这两种版本都使用 llvmlite 作为到 LLVM 的绑定。

Rust 和 Swift:不可避免地,我们不得不将该教程移植到这两种语言之上,它们都是由 LLVM 自身帮助使其诞生的。

※ LLVM 尚未实现的功能

1)LLVM 不解析语言的语法

因为目前已经有许多工具实现这个功能,比如 lex/yacc, flex/bison,以及ANTLR。解析语法就意味着必须从编译中解耦出来,因此 LLVM 并没有涉及这个领域。

2)LLVM不会直接干涉到开发语言的软件文化

比如安装编译器的二进制文件、如何在安装中管理软件包、升级工具链 —— 这些都需要开发者自己去实现。

3)LLVM还没有对部分通用语言成分给出原语。

许多语言都具有某种垃圾回收的内存管理方式,或者是作为管理内存的主要方式,或者作为对 RAII ( C++ 底层实现的自动垃圾回收,表面使用 Rust 语法)等策略的附属方式。LLVM 并不会给你一个垃圾回收机制,但是它提供了实现垃圾回收的工具,它允许在代码中使用元数据标记,让编写垃圾回收器变得更加容易。

尽管如此,但是 LLVM 未来还有有可能添加原生的机制来实现垃圾回收机制。

现在,LLVM 正在快速发展中,大概6个月就会有一次大版本的更新,加上许多语言都使用 LLVM 作为开发的核心,因此 LLVM 的迭代速度只会更快而不会放慢。

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/40448.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
Inspirr的头像Inspirr订阅用户
上一篇 2022年6月12日 23:47
下一篇 2022年6月12日 23:48

相关推荐

  • 移动端卡片化设计微妙的三个地方  

      简约风格 移动端比较适合采用卡片化的设计形式,而简约风格是卡片化的特点之一。因为一般都是一张卡片专注於页面的一个内容与图片。这样能够帮助用户更好地阅读与理解、记忆,同时更精准地进行选择,也易於…

    2022年6月7日
    0224
  • APP设计规则:关於APP界面设计的思路

    智能手机不仅已成为我们生活中的一部分,也在生活中的不同地方帮了我们很多。随着用户对APP的需求不断变化,设计师在界面设计上也提供很多新功能,以满足用户的需求,以及在使用过程中让用户更加愉悦满意。 但APP行…

    2022年6月25日 建站资讯
    0446
  • 网页设计规律:盘点UI背景设计趋势

    无论是网页设计还是平面设计,背景设计都是最常用且最能体现目前设计趋势的一种设计元素。随着图片、插画、色块等元素在背景中发挥更大的作用,背景设计的功能性逐渐强化,而且还具备补充主体的功能。 如今越来越多…

    2022年6月25日 建站资讯
    0160
  • 新iOS模拟器中有哪些新的功能

    iOS模拟器是在开发任意iOS应用程序过程中不可或缺,无法被忽视的一个部分。最值得一提的是,Xcode 9的新模拟器带来了很多有用的功能,能够提升开发者的开发效率。那麽,新iOS模拟器中有哪些新的功能呢? 功能一:在…

    2022年6月12日
    0166
  • 为企业缔造无限商机 移动端网页设计有哪些技巧

    随着智能手机的普及,用户的上网方式也逐渐从PC端转移到移动端。受到移动端屏幕的限制,PC端网站设计明显不适合移动端设备的使用,所以做好网页适配是非常重要的。那麽,重点来了,到底移动端网页设计怎样才符合目…

    2022年6月13日 建站资讯
    0134
  • 刚上架的APP要怎样才能做好ASO优化

    现在,越来越多企业都做APP开发,希望能在市场上占有一席之地。本以为开发後上传到APP Store,经过严厉的审核就能万事大吉,谁知道,一场没有硝烟的战争才正式开始。刚上架的APP要怎样才能做好ASO优化?就等Inspirr …

    2022年6月13日
    0153
  • 微软iOS输入法亮点:扇形键盘模式!

    近日,微软准备将他们的Word Flow输入法带给iOS用户,该输入法最大亮点在於其特有的扇形键盘模式。 开启扇形键盘模式之後,用户可以选择以屏幕左下角或右下角为圆心,将键盘转换为扇形 ,以便拇指可以直接控制整个…

    2022年6月7日
    0242
  • UI设计教程:关於APP顶部栏的UI设计规则和使用方式

    上期香港网页集团分享了「有关下拉菜单的使用方法」,近期我们就来说说「关於APP顶部栏的UI设计样式和交互方式」,有兴趣的朋友就接着看吧! 很多设计师认为APP顶部栏的组成很简单,不需要花费太多精力在设计上。事…

    2022年6月15日 建站资讯
    0332

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息