GraalVM 虛擬機器 19.3.0 版本以及基於該虛擬機器的 Python、JavaScript、Ruby 和 R 的實現

甲骨文公司 опубликовала 發布通用虛擬機 GraalVM 19.3.0,支援在 JavaScript (Node.js)、Python、Ruby、R、任何適用於 JVM 的語言(Java、Scala、Clojure、Kotlin)以及可以生成 LLVM 位元碼的語言(C、C++)中運行應用程序,鐵鏽)。 19.3 分支被歸類為長期支援 (LTS) 版本,並且 卓越 支持 JDK11,包括將 Java 程式碼編譯為可執行檔(GraalVM Native Image)的能力。 專案程式碼 分發者 根據 GPLv2 許可。 同時,使用 GraalVM 的 Python、JavaScript、Ruby 和 R 語言實作的新版本發布了—— GraalPython, GraalJS, 松露紅寶石 и 快讀.

GraalVM 提供 JIT 編譯器可以在 JVM 中動態執行任何腳本語言的程式碼,包括 JavaScript、Ruby、Python 和 R,並且還可以在 JVM 中執行轉換為 LLVM 位元碼的本機程式碼。 GraalVM 提供的工具包括獨立於語言的偵錯器、分析系統和記憶體分配分析器。 GraalVM 可以使用不同語言的元件建立組合應用程序,從而允許您從其他語言的程式碼存取物件和陣列。 對於基於 JVM 的語言有 機會 創建編譯成機器碼的可執行文件,可以直接執行,內存消耗最小(透過連接框架實現內存和線程管理 底層虛擬機).

GraalJS 的變化:

  • 確保與 Node.js 12.10.0 的兼容性;
  • 預設情況下停用非標準全域屬性和函數:
    global(替換為globalThis,設定js.global-property返回),效能(js.performance),print和printErr(js.print);

  • 實作了 Promise.allSettled 和 nullish 合併提案,可在 ECMAScript 2020 模式下使用(“-js.ecmascript-version=2020”);
  • 將依賴 ICU4J 更新至 64.2,將 ASM 更新至 7.1。

變化 在 GraalPython 中:

  • 增加了存根 gc.{enable,disable,isenabled},實作了 charmap_build、sys.hexversion 和 _lzma;
  • 更新了Python 3.7.8標準庫;
  • 增加了對 NumPy 1.16.4 和 Pandas 0.25.0 的支援;
  • 添加了 timeit 支援;
  • socket.socket 已進入允許您執行「graalpython -m http.server」並載入未加密(無 TLS)http 資源的狀態;
  • 修正了顯示 pandas.DataFrame 物件的問題。
    bytes.startswith 中元組的錯誤處理,
    迭代器的解構賦值以及對字典使用 dict.__contains__ ;

  • 添加了對 ast.PyCF_ONLY_AST 的支持,其中 允許 確保 pytest 有效;
  • 添加 支持 PEP 498(文字中的字串內插);
  • 實施的 “--python.EmulateJython”標誌用於使用普通 Python 導入語法導入 JVM 類別並從 Python 程式碼捕獲 JVM 異常;
  • 改良的解析器效能、異常快取、
    從 JVM 程式碼存取 Python 物件。 改進了 python 程式碼和本機擴充功能的效能測試結果(在 llvm 之上執行本機擴充功能意味著將位元碼 llvm 傳遞到 GraalVM 進行 JIT 編譯)。

變化 在 TruffleRuby:

  • 為了編譯本機擴展,現在使用內建的 LLVM 工具包來建立本機程式碼和位元碼。 這意味著更多的本機擴充應該開箱即用地編譯,從而消除大多數連結問題;
  • 單獨的 LLVM 安裝,用於在 TruffleRuby 中安裝本機擴充;
  • 在 TruffleRuby 上安裝 C++ 擴充功能不再需要安裝 libc++ 和 libc++abi;
  • 授權更新為 EPL 2.0/GPL 2.0/LGPL 2.1,與最新的 JRuby 相同;
  • 新增了對 GC.stat 可選參數的支援;
  • 使用包裝器實作 Kernel#load 方法,並使用 :chdir; 實作 Kernel#spawn;
  • 新增了 rb_str_drop_bytes,這很棒,因為 OpenSSL 使用它;
  • 包括 Rails 6 中新的 Rails 所需的預安裝 gem 的擴充;
  • 為了編譯本機擴展,需要使用標誌,如 MRI 中;
  • 已進行效能優化並減少記憶體消耗。

變化 在 FastR 中:

  • 確保與R 3.6.1的兼容性;
  • 新增了對運行基於 LLVM 的本機擴充的初步支援。 建置本機 R 套件時,FastR 配置為使用 GraalVM 的內建 LLVM 工具。 產生的二進位檔案將包含本機程式碼和 LLVM 位元程式碼。

    預先安裝的軟體包也是透過這種方式建構的。
    FastR 預設載入並執行本機擴充程式碼,但當使用「--R.BackEnd=llvm」選項啟動時,將使用位碼。 透過指定“--R.BackEndLLVM=pkg1,pkg2”,可以選擇性地將 LLVM 後端用於某些 R 套件。 如果安裝軟體包時遇到問題,可以透過呼叫 fastr.setToolchain("native") 或手動編輯 $FASTR_HOME/etc/Makeconf 檔案來恢復所有內容;

  • 在此版本中,FastR 不附帶 GCC 運行時庫;
  • 修復記憶體洩漏;
  • 修正了處理大型向量 (>1GB) 時的問題;
  • 實作了grepRaw,但僅適用於fixed=T。

來源: opennet.ru

添加評論