Polyglot


GraalVM 的 Polyglot 引擎允许适用于其他编程语言的语言解释器的执行和互操作性。这个版本的 GraalVM 包含适用于三种语言(JavaScript、Ruby 和 R)和一种教学语言 (SimpleLanguage) 的语言解释器。

JavaScript:Graal.js


Graal.js 是符合 ECMAScript 262 2015 版的 JavaScript 引擎。它基于 Polyglot 引擎,使用 Graal 作为编译器,确保了与其他基于 Truffle 的语言引擎的高性能和语言互操作性。


Graal.js 有哪些主要优势?

  • 峰值性能:使用 Graal.js 执行、使用 Graal 编译的 JavaScript 应用,其峰值性能优于领先的 JavaScript 引擎。
  • 服务器端 JavaScript:Graal.js 能够运行服务器端 Node.js 应用(利用 Avatar.js 项目)。针对各种 Node.js 应用提供了初步支持,为所有目前正在开发的 Node.js 应用提供完整性。
  • 语言互操作性:Graal.js 的另一个目标是提供与其他 Polyglot 语言和 Java 的互操作性的同时不牺牲性能。

如何使用 Graal.js 执行 JavaScript 应用?

该版本为 JavaScript 应用提供了一个执行系统。您可以使用该版本中包括的 js 命令在命令行 shell 上执行符合 ECMAScript 6 的 JavaScript 程序。
 

 # js mySourceFile.js 
实际使用此版本的 js 命令时请注意,例如,将 bin 目录添加到路径︰
 
 # export PATH=/path/to/GraalVM/bin:$PATH 
 

如何使用 Graal.js 执行 Node.js 应用?

您还可以使用节点可执行程序执行 Node.js 应用。该版本的 example/node 目录中提供了一些示例应用:
 
 # node myNodeApplication.js 

有关更多详细信息,请参见该版本的自述文件。

 

Ruby:RubyTruffle


RubyTruffle 是 Ruby 2.2 的一个实现。它基于 JRuby 项目,但使用 Polyglot 引擎和 Graal 作为编译器,所实现的峰值性能远超当前 Ruby 实现。
 
RubyTruffle 使用 RubySpec 进行测试,实现了与 Ruby 语言和核心库超过 90% 的兼容性。Sinatra 和 Roda 等简单的 gem 和框架可以工作,但 RubyTruffle 尚未准备好运行大型复杂应用或 Rails 框架。
 

RubyTruffle 有哪些主要优势?

峰值性能:使用 Graal 编译器,RubyTruffle 在基准测试和实际应用代码中达到性能远超任何当前的 Ruby 实现。
快速元编程:RubyTruffle 旨在 Ruby 实际使用过程中对其进行优化 — 包括元编程。动态发送、动态定义的方法、绑定和求值等操作速度都很快。
 

如何使用 RubyTruffle 运行 Ruby 应用?


 # ruby my_source_file.rb
 

我如何使用 RubyGems 或 Bundler?

RubyTruffle 还不能运行 RubyGems 或 Bundler。在此之前,我们提供了一个工具,可用于安装一个 Ruby 应用,以便其运行。

setup 命令将 gem 安装到本地目录中。
 
 # ruby-tool setup

然后,run 命令对这组 gem 运行可执行文件。
 
 # ruby-tool run bin/my_application

例如
 
 # git clone https://github.com/lucasocon/openweather.git 
 # cd openweather 
 # ruby-tool setup

 

FastR


FastR 是基于 Graal 的 R 语言实现。它使用最新的 Graal 技术实现高性能,而且尽量不影响与 GNUR 的兼容性。


FastR 有哪些主要优势?

峰值性能:使用 FastR 执行、使用 Graal 编译的 R 应用性能优于现有 R 执行引擎。
兼容性:R 的目标是与 GNUR 完全兼容。使用 R 参考实现开发的现有应用程序无需更改即可运行。
语言互操作性:提供与其他基于 Graal 的语言(如 Java、Ruby 或 JavaScript)的互操作性,不会牺牲性能。
 

如何使用 FastR 运行 R 应用?

可以通过以下方式启动 R 语言 shell:
 
 # ./bin/R 

可以使用以下命令运行 R 脚本:
 
 # ./bin/RScript mySourceFile.js


FastR 完整性如何?

FastR 仍处于实验阶段。对于不完美之处和非工作语言的特点请有个心理预期: