读书笔记《supercharge-your-applications-with-graalvm》第 8 章 GraalVM Polyglot – Truffle Python 和 R 上的 Java
Chapter 8: GraalVM Polyglot – Java on Truffle, Python, and R
在上一章中,我们介绍了 JavaScript 和 Node.js 解释器以及语言之间的互操作性。在本章中,我们将介绍其他语言实现,例如:
- Java on Truffle (also called Espresso): Java implementation on Truffle
- GraalPython: Python language interpreter implementation
- FastR: R language interpreter implementation
所有这些语言实现仍处于实验阶段,因此在本书编写时尚未发布用于生产。但是,我们将探索这些特性并构建一些代码来理解各种概念。
在本章中,我们将介绍以下主题:
- Understanding Python, R, and Java/Truffle interpreters
- Learning about and exploring language interoperability
- Understanding the compatibility and limitations of these various language interpreters
在本章结束时...
Technical requirements
本章需要以下内容以及各种编码/动手部分:
- The latest version of GraalVM.
- Various language Graal runtimes. We will cover in the chapter how to install and run these runtimes.
- Access to GitHub: There are some sample code snippets, which are available in a Git repository. The code can be downloaded from the following link: https://github.com/PacktPublishing/Supercharge-Your-Applications-with-GraalVM/tree/main/Chapter08.
- The Code in Action video for this chapter can be found at https://bit.ly/3fj2iIr.
Understanding Espresso (Java on Truffle)
GraalVM 21.0 是一个主要版本,它引入了一种名为 Java on Truffle 的新客户语言运行时。在此之前,我们可以选择使用 HotSpot 运行 Java(我们在 第 2 章,JIT、Hotspot 和 GraalJIT),关于 Graal JIT(我们在 第 4 章,Graal Just-In-Time 编译器 ), 或作为带有 Graal AOT 的原生图像(我们在 第 5 章中介绍过a>,Graal Ahead-of-Time 编译器和原生图像)。在 GraalVM 21.0 中,Truffle 上的 Java 是新的运行时,可以运行 Java。它的代号为 Espresso。这仍处于实验阶段,在编写本书时还没有准备好生产。在本节中,我们将了解如何使用这个新的运行时运行 Java 应用程序,以及它如何帮助多语言编程。
Espresso 是 JVM 的精简版,但实现了 JVM 的所有核心组件,例如字节码解释器、字节码验证器、Java 本地接口、Java 调试线协议……
Understanding GraalPython – the Python Truffle interpreter
GraalVM 提供 Python 运行时。 Python 运行时兼容 3.8 版本,在编写本书时仍处于实验阶段。在本节中,我们将安装并了解 Python 如何在 Truffle 和 Graal 上运行。我们还将构建一些示例代码,以了解 Graal Python 的互操作性特性。
Installing Graal Python
Graal Python 是一个 可选运行时,默认情况下不与 GraalVM 一起安装。要下载它,您必须使用 Graal Updater 工具。以下命令下载并安装 Graal Python:
为了验证安装,让我们运行简单的 Python 代码。以下是HelloGraalPython.py
的源码:
这是一个非常简单的 Hello World 应用程序,我们在其中打印消息。让我们使用 graalpython
运行这个应用程序:
Understanding FastR – the R Truffle interpreter
GraalVM 为 GNU 兼容的 R 运行时提供 一个 R Truffle 解释器。此运行时支持 R 程序和 REPL (read-eval-print-loop) 模式,我们可以在其中快速测试代码,同时我们以交互方式编写代码。 FastR 是开发此 R 运行时的项目。
Installing and running R
就像 Graal Python 一样,R 运行时默认情况下不会随 GraalVM 提供。我们必须使用 Graal Updater 下载并安装它。使用以下命令下载并安装 R 和 Rscript:
要运行 R,我们需要 OpenMP 运行时库。这可以在 Ubuntu 上使用 apt-get install libcomp1
和在 Oracle Linux 上使用 yum install libcomp
安装。该库默认安装在 macOS 中。除此之外,如果 R 代码有 C/C++/Fortran 代码,您将需要 C/C++/Fortran。在编写本书时,R 还处于实验阶段,因此还没有支持所有内容。请参考 GraalVM 文档...
Summary
在本章中,我们详细介绍了 Python、R 和 Java on Truffle 解释器是如何在 Truffle 中实现的。我们还探索了这些语言提供的多语言互操作性功能以及编码示例。我们了解每种语言的解释方式的差异。本章提供了如何使用这些不同语言运行代码和编写多语言应用程序的实践演练。我们使用了非常简单的代码,以便您可以轻松理解实现多语言应用程序的概念和 API。
您应该能够使用这些知识在 GraalVM 上编写多语言应用程序。尽管在撰写本书时这些语言中的大多数仍处于实验阶段,但它们为构建高性能的多语言应用程序提供了绝佳的机会。
在下一章中,您将获得良好的实践经验和对多语言工作原理的理解,如何在 GraalVM 上构建 Python 和 R 应用程序,以及如何...
Questions
- What is Java on Truffle?
- What are the advantages of Java on Truffle?
- What is the use of the
Polyglot.cast()
method? - What are SST and ST?
- What is a
.pyc
file? - What is the polyglot binding method used to exchange data and function definitions in GraalPython?
- How can you import other language definitions in R?
- How can you load a Java class in R?
Further reading
- GraalVM Enterprise Edition: https://docs.oracle.com/en/graalvm/enterprise/19/index.html
- GraalVM Language Reference: https://www.graalvm.org/reference-manual/languages/.