
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
对于程序员来,一般都会掌握许多编程工具来提高自己的工作效率的,但是如果有一款编程工具能够适用所有编程语言的话,我觉得应该就是GraalVM了,今天我们就一起来了解一下GraalVM的特点。
1.高性能Java
GraalVM中的Graal得名于Graal编译器。Graal是一种“万能”编译器,也就是,虽然它是单一的实现,却可以用于很多用途。例如,我们可以使用Graal进行预编译(ahead-of-time)和即时编译(just-in-time),也可用于编译多种编程语言。
2.占用内存小、启动速度快的Java
Java对于长时间运行的进程来是相当强大的,但短时间运行的进程可能会因较长的启动时间和较高的内存占用而饱受其苦。
3.组合JavaScript、Java、Ruby和R语言
除了Java,GraalVM还包含了JavaScript、Ruby、R语言和Python的实现。它们都是使用一个叫作Truffle的语言实现框架开发的,Truffle让实现简单且高性能的语言解释器成为可能。在使用Truffle开发语言解释器时,会自动使用Graal作为JIT编译器。因此,Graal不仅是Java的JIT编译器和预编译器,也可以是JavaScript、Ruby、R语言和Python的JIT编译器。
4.在JVM上运行本地语言
GraalVM也支持C语言,GraalVM可以像运行JavaScript和Ruby之类的语言一样运行C代码。
实际上,GraalVM通过运行LLVM位码的方式来支持C语言,而不是直接运行C代码。也就是,我们可以将现有工具与C语言一起使用,还可以使用其他可输出LLVM的语言,例如C++、Fortran和未来可能出现的其他语言。为了简化演示,我使用了由Stephen McCamant维护的gzip的单文件版本。为简单起见,它只是将gzip源代码和autoconf配置连成一个单独的文件。我还需要修改一些东西才能让它在macOS上运行起来,但不能在GraalVM上运行。
5.适用于所有编程语言的工具
如果你使用Java编程,可能已经习惯了使用那些高质量的工具,比如IDE、调试器和分析器,但并非所有的编程语言都有这么好用的工具。不过如果你是在GraalVM中使用某种语言,就可以获得这样的工具。
6.扩展基于JVM的应用程序
除了可用作独立语言实现和用于多语言编程,这些语言和工具也可以嵌入到Java应用程序中。新的org.graalvm.polyglot API可用于加载和运行其他语言的代码。
7.扩展本地应用程序
GraalVM已经包含了一个本地库——可用它在本地应用程序中运行使用GraalVM语言编写的代码。像V8这样的JavaScript运行时和像CPython这样的Python解释器通常是可嵌入的,也就是,它们可以作为一个库链接到另一个应用程序中。GraalVM允许我们在嵌入上下文中使用任何语言,只要将它们链接到polyglot库即可。
8.将Java代码作为本地库
Java生态系统拥有许多非常高质量的库,它们在其他生态系统中通常不可用,比如本地应用程序及其他托管语言。要想在本地应用程序中使用Java库,需要嵌入JVM,但这样会让事情变得非常复杂。
9.数据库中的polyglot
到polyglot库在嵌入语言方面的应用,Oracle数据库就是应用场景之一。我们用它创建了Oracle数据库多语言引擎(MLE),用于支持在SQL中使用GraalVM语言和模块。
10.创建自己的语言
Oracle实验室和我们的学术合作伙伴已经能够用相对较小的团队开发出JavaScript、R语言Ruby、Python和C语言的高性能实现,因为我们开发的Truffle框架简化了这一过程。
Truffle是一个Java库,用于为语言编写抽象语法树(AST)解释器。 AST解释器可能是实现新语言简单的方法,因为它直接使用解析器的输出,并且不涉及任何字节码或常规编译器技术,但它的速度通常都很慢。因此,我们将它与部分求值(partial evaluation)技术结合在一起,这项技术允许Truffle使用Graal自动为新语言提供即时编译器。
作者:Chris Seaton
译者:无明
节选:infoq
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!