Rilis 19.3.0 dari mesin virtual GraalVM dan implementasi Python, JavaScript, Ruby, dan R berdasarkan itu

Perusahaan Oracle ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° rilis mesin virtual universal GraalVM 19.3.0, yang mendukung aplikasi yang berjalan dalam JavaScript (Node.js), Python, Ruby, R, bahasa apa pun untuk JVM (Java, Scala, Clojure, Kotlin) dan bahasa yang dapat menghasilkan bitcode LLVM (C, C++ , Karat). Cabang 19.3 diklasifikasikan sebagai rilis Dukungan Jangka Panjang (LTS) dan luar biasa mendukung JDK11, termasuk kemampuan untuk mengkompilasi kode Java menjadi file yang dapat dieksekusi (GraalVM Native Image). Kode proyek didistribusikan oleh berlisensi di bawah GPLv2. Pada saat yang sama, versi baru implementasi bahasa Python, JavaScript, Ruby dan R menggunakan GraalVM dirilis - GraalPython, GraalJS, TruffleRuby ΠΈ CepatR.

GraalVM menyediakan Kompiler JIT yang dapat mengeksekusi kode dari bahasa skrip apa pun dengan cepat di JVM, termasuk JavaScript, Ruby, Python, dan R, dan juga memungkinkan untuk menjalankan kode asli di JVM yang dikonversi ke bitcode LLVM. Alat yang disediakan oleh GraalVM mencakup debugger yang tidak bergantung pada bahasa, sistem pembuatan profil, dan penganalisis alokasi memori. GraalVM memungkinkan pembuatan aplikasi gabungan dengan komponen dalam bahasa berbeda, memungkinkan Anda mengakses objek dan array dari kode dalam bahasa lain. Untuk bahasa berbasis JVM ada kesempatan membuat file yang dapat dieksekusi yang dikompilasi ke dalam kode mesin yang dapat dieksekusi secara langsung dengan konsumsi memori minimal (manajemen memori dan thread diimplementasikan melalui koneksi kerangka kerja VM substrat).

Perubahan pada GraalJS:

  • Kompatibilitas dengan Node.js 12.10.0 terjamin;
  • Properti dan fungsi global non-standar dinonaktifkan secara default:
    global (diganti dengan globalThis, mengatur properti js.global untuk kembali), kinerja (js.kinerja), cetak dan printErr (js.print);

  • Proposal penggabungan Promise.allSettled dan nullish yang diterapkan, yang tersedia dalam mode ECMAScript 2020 (β€œ-js.ecmascript-version=2020”);
  • Ketergantungan yang diperbarui ICU4J ke 64.2, ASM ke 7.1.

Perubahan di GraalPython:

  • Menambahkan stub gc.{enable,disable,isenabled}, mengimplementasikan charmap_build, sys.hexversion dan _lzma;
  • Perpustakaan standar Python 3.7.8 yang diperbarui;
  • Menambahkan dukungan untuk NumPy 1.16.4 dan Pandas 0.25.0;
  • Menambahkan dukungan waktu;
  • socket.socket telah dibawa ke keadaan yang memungkinkan Anda menjalankan β€œgraalpython -m http.server” dan memuat sumber daya http yang tidak terenkripsi (tanpa TLS);
  • Memperbaiki masalah dalam menampilkan objek pandas.DataFrame.
    pemrosesan tupel yang salah dalam bytes.startswith,
    menghancurkan penugasan iterator dan penggunaan dict.__contains__ untuk kamus;

  • Menambahkan dukungan untuk ast.PyCF_ONLY_AST, yang diizinkan memastikan bahwa pytest berfungsi;
  • Ditambahkan mendukung PEP 498 (interpolasi string dalam literal);
  • Diimplementasikan tanda β€œ--python.EmulateJython” untuk mengimpor kelas JVM menggunakan sintaks impor Python normal dan menangkap pengecualian JVM dari kode Python;
  • Peningkatan kinerja parser, cache pengecualian,
    mengakses objek Python dari kode JVM. Peningkatan hasil dalam pengujian kinerja untuk kode python dan ekstensi asli (mengeksekusi ekstensi asli di atas llvm menyiratkan bahwa bitcode llvm diteruskan ke GraalVM untuk kompilasi JIT).

Perubahan di TruffleRuby:

  • Untuk mengkompilasi ekstensi asli, toolkit LLVM bawaan sekarang digunakan, membuat kode asli dan bitcode. Ini berarti lebih banyak ekstensi asli yang harus dikompilasi secara langsung, sehingga menghilangkan sebagian besar masalah penautan;
  • Instalasi LLVM terpisah untuk menginstal ekstensi asli di TruffleRuby;
  • Menginstal ekstensi C++ di TruffleRuby tidak lagi memerlukan instalasi libc++ dan libc++abi;
  • Lisensi diperbarui ke EPL 2.0/GPL 2.0/LGPL 2.1, sama seperti JRuby terbaru;
  • Menambahkan dukungan untuk argumen opsional ke GC.stat;
  • Mengimplementasikan metode Kernel#load dengan wrapper dan Kernel#spawn dengan :chdir;
  • Menambahkan rb_str_drop_bytes, yang sangat bagus karena OpenSSL menggunakannya;
  • Termasuk ekstensi permata pra-instal yang diperlukan untuk Rails baru di Rails 6;
  • Untuk mengkompilasi ekstensi asli, bendera digunakan, seperti pada MRI;
  • Optimalisasi kinerja telah dilakukan dan konsumsi memori telah dikurangi.

Perubahan di FastR:

  • Kompatibilitas dengan R 3.6.1 dipastikan;
  • Menambahkan dukungan awal untuk menjalankan ekstensi asli berdasarkan LLVM. Saat membuat paket R asli, FastR dikonfigurasi untuk menggunakan perkakas LLVM bawaan GraalVM. File biner yang dihasilkan akan berisi kode asli dan bitcode LLVM.

    Paket pra-instal juga dibuat dengan cara ini.
    FastR memuat dan menjalankan kode ekstensi asli secara default, tetapi ketika diluncurkan dengan opsi "--R.BackEnd=llvm", bitcode akan digunakan. Backend LLVM dapat digunakan secara selektif untuk beberapa paket R dengan menentukan "--R.BackEndLLVM=pkg1,pkg2". Jika Anda mengalami masalah saat menginstal paket, Anda dapat mengembalikan semuanya dengan memanggil fastr.setToolchain("native") atau mengedit file $FASTR_HOME/etc/Makeconf secara manual;

  • Dalam rilis ini, FastR dikirimkan tanpa perpustakaan runtime GCC;
  • Memperbaiki kebocoran memori;
  • Memperbaiki masalah saat bekerja dengan vektor besar (>1GB);
  • GrepRaw diimplementasikan, tetapi hanya untuk fixed=T.

Sumber: opennet.ru

Tambah komentar