歷數GraalVM的十大用途

weixin_34127717發表於2018-07-24

不久前Oracle釋出了GraalVM,一套通用型虛擬機器,能執行各類高效能與互操作性任務,並在無需額外成本的前提下允許使用者構建多語言應用程式。

\\

GraalVM包含了很多不同的部分,所以即使你之前聽過這個名字,或者聽過我們的一些演講,仍然有一些東西是你不知道的。在本文中,我們將列出GraalVM的一些不同的特性,並展示它的用途。

\\
  1. 高效能Java\\t
  2. 佔用記憶體小、啟動速度快的Java\\t
  3. 組合JavaScript、Java、Ruby和R語言\\t
  4. 在JVM上執行本地語言\\t
  5. 適用於所有程式語言的工具\\t
  6. 擴充套件基於JVM的應用程式\\t
  7. 擴充套件本地應用程式\\t
  8. 將Java程式碼作為本地庫\\t
  9. 資料庫中的polyglot\\t
  10. 建立自己的語言\

我們可以使用GraalVM 1.0.0 RC 1(https://www.graalvm.org/downloads)來重現本文所述的內容。我是在macOS上執行GraalVM企業版,不過在Linux上執行GraalVM社群版也是一樣的。文中執行的程式碼可以從http://github.com/chrisseaton/graalvm-ten-things下載

\\

安裝

\\

我從https://www.graalvm.org/downloads下載了GraalVM 1.0.0 RC 1企業版,並將它放到$PATH路徑中。

\\
\$ git clone https://github.com/chrisseaton/graalvm-ten-things.git\$ cd foo\$ tar -zxf graalvm-ee-1.0.0-rc1-macos-amd64.tar.gz\    # or graalvm-ee-1.0.0-rc1-linux-amd64.tar.gz on Linux\$ export PATH=graalvm-1.0.0-rc1/Contents/Home/bin:$PATH\    # or PATH=graalvm-1.0.0-rc1/bin:$PATH on Linux
\\

GraalVM內建了JavaScript,並帶有一個叫作gu的軟體包管理器,可用它來安裝其他語言。我已經安裝了從GitHub下載的Ruby、Python和R語言。

\\
\$ gu install -c org.graalvm.ruby\$ gu install -c org.graalvm.python\$ gu install -c org.graalvm.R
\\

我們可以通過執行java或js來獲得這些執行時的版本資訊。

\\
\$ java -version\java version \"1.8.0_161\"\Java(TM) SE Runtime Environment (build 1.8.0_161-b12)\GraalVM 1.0.0-rc1 (build 25.71-b01-internal-jvmci-0.42, mixed mode)\$ js --version\Graal JavaScript 1.0 (GraalVM 1.0.0-rc1)
\\

1.高效能Java

\\

GraalVM中的Graal得名於Graal編譯器。Graal是一種“萬能”編譯器,也就是說,雖然它是單一的實現,卻可以用於很多用途。例如,我們可以使用Graal進行預編譯(ahead-of-time)和即時編譯(just-in-time),也可用於編譯多種程式語言。

\\

我們可以將Graal簡單地用作Java JIT編譯器。

\\

以下的示例程式將會輸出一篇文件的前十個單詞,它使用了Stream和Collector等Java語言特性。

\\
\import java.io.IOException;\import java.nio.file.Files;\import java.nio.file.Paths;\import java.util.Arrays;\import java.util.function.Function;\import java.util.stream.Collectors;\import java.util.stream.Stream;\\public class TopTen {\    public static void main(String[] args) {\        Arrays.stream(args)\                .flatMap(TopTen::fileLines)\                .flatMap(line -\u0026gt; Arrays.stream(line.split(\"\\\\b\")))\                .map(word -\u0026gt; word.replaceAll(\"[^a-zA-Z]\

相關文章