创造新的语言,变着花样的提升现有语言的能力,这在整个编程界正风行。Mozilla的Rust、Apple的Swift、Jetbrains的Kotlin,以及许多其它的语言都给开发者在速度、安全性、便利性、可移植性还有能力这些方面提供了新的选择。
为什么现在正当时呢?一个大因素就是那些用来构建语言的新工具,特别是编译器。它们中首当其冲就是LLVM(底层虚拟机Low-LevelVirtualMachine),这是一个开源项目,最开始作为伊利诺伊州大学的一个研究项目由Swift语言的创始人ChrisLattner进行开发。
LLVM使创建新语言变得更加容易,同时也可以增强现有语言的开发。它提供了一些工具,用于自动执行语言创建任务中最不讨人喜欢的部分:创建一个编译器,将输出的代码移植到多个平台和架构,编写代码来处理常见的语言隐喻,比如异常。它的自由授权意味着它可以自由地作为软件组件重用或作为服务部署。
使用LLVM的语言名册中有许多熟悉的名字。苹果的Swift语言使用LLVM作为它的编译器框架,而Rust则将LLVM作为其工具链的核心组件。而且,许多编译器都有一个LLVM版本,如Clang、C/C++编译器(这个名称叫做“C-lang”),它本身就是一个与LLVM紧密相连的项目。而Kotlin,名义上是一种JVM语言,正在开发一种名为KotlinNative的语言版本,它使用LLVM来编译成机器原生代码。
LLVM定义在它的核心,LLVM是一个以编程方式创建机器原生代码的库。开发人员使用该API以一种称为中间代理或IR的格式生成指令。然后LLVM可以将IR编译成一个独立的二进制文件,或者在另一个程序(如语言解释器)的上下文中执行JIT(just-in-time)编译。
LLVM的API为开发在编程语言中发现的许多常见结构和模式提供了原始的方式。例如,几乎每种语言都有函数和全局变量的概念。LLVM将函数和全局变量作为其IR中的标准元素,因此,你只需在意LLVM的实现,并