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 仍处于实验阶段。对于不完美之处和非工作语言的特点请有个心理预期: