LLVM:Swift、Rust等语言发展的背后力量
极客时间编辑部
讲述:杜力大小:1.38M时长:03:02
近几年来,一些新的开发语言如雨后春笋般涌现,如 Rust、Swift、Kotlin 等,很多好的语言如 Java 也在不断迭代。这些语言为开发者在开发速度、安全性、便利性、可移植性和功能上提供了多种选择。
编程语言的发展如此之快,其中一个重要原因,就是具备了构建语言尤其是编译器的新工具,其中首屈一指的就是 LLVM(Low-Level Virtual Machine)。
LLVM 是一个开源项目,不仅简化了新语言的创建工作,而且提升了现有语言的发展。它提供了一种工具,自动化了创建语言任务中许多最吃力的部分,包括创建编译器、将输出代码移植到多个平台和架构上,以及编写代码实现异常处理等。
LLVM 是自由许可的,这意味着它可作为软件组件自由重用,也可以作为服务自由部署。
LLVM 本质上是一个使用编程方式创建机器原生代码的软件库。开发者调用其 API,生成一种使用 IR(Intermediate Representation,中间表示)格式的指令。进而,LLVM 将 IR 编译为独立软件库,或者使用另一种语言的上下文对代码执行 JIT 编译。
LLVM 的 IR 设计从一开始,就是要成为一种可移植的汇编语言,而 IR 实现可移植性的方式之一,就是提供了独立于任何特定机器架构的原语。
LLVM 不仅将 IR 编译为原生机器代码,开发者也可以通过编程方式,指导 LLVM 使用链接过程对代码做高度精细的优化。
同样,LLVM 的强大之处在于无需开发者自己去实现所有这些功能,它包揽了所有的一切,而且这些功能可以被随时关闭。
通常情况下,LLVM 用于生成通用语言编译器,但它也可以用于生成一些高度垂直或排他性 DSL,甚至可以说这正是它大显身手之处。因为开发者在使用 LLVM 创建一种 DSL 时,不需要亲历亲为创建语言中的大量苦差事,就可以给出良好的表现。
另一种使用 LLVM 的方式,是将领域特定的扩展添加到现有的语言中。例如,英伟达使用 LLVM 创建了 CUDA 编译器,实现在语言中添加对 CUDA 的原生支持,并作为所生成的原生代码的一部分做编译,而不是通过随之一起交付的软件库做调用。
LLVM 的通常使用方式,是在开发人员顺手的语言中编码。当然,该语言要支持 LLVM 软件库。其中,广为采用的 C 和 C++,不少 LLVM 开发人员二者必取其一,理由主要有:
LLVM 本身就是使用 C++ 编写的。
LLVM 的 API 以 C/C++ 化身(incarnation)提供。
很多语言开发倾向于以 C/C++ 为基础。
当然,选择并不局限于这两种语言。不少语言支持原生地调用 C 软件库,因此在理论上,可以使用任何一种此类语言做 LLVM 开发。当然,如果语言本身就提供包装了 LLVM API 的软件库就最好了。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论