Keluarkan 19.3.0 mesin maya GraalVM dan pelaksanaan Python, JavaScript, Ruby dan R berdasarkannya

Syarikat Oracle ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° pelepasan mesin maya universal GraalVM 19.3.0, yang menyokong aplikasi berjalan dalam JavaScript (Node.js), Python, Ruby, R, sebarang bahasa untuk JVM (Java, Scala, Clojure, Kotlin) dan bahasa yang mana kod bit LLVM boleh dijana (C, C++ , Karat). Cawangan 19.3 diklasifikasikan sebagai keluaran Sokongan Jangka Panjang (LTS) dan luar biasa sokongan JDK11, termasuk keupayaan untuk menyusun kod Java ke dalam fail boleh laku (GraalVM Native Image). Kod projek diedarkan oleh dilesenkan di bawah GPLv2. Pada masa yang sama, versi baharu pelaksanaan bahasa Python, JavaScript, Ruby dan R menggunakan GraalVM telah dikeluarkan - GraalPython, GraalJS, TruffleRuby ΠΈ CepatR.

GraalVM menyediakan Pengkompil JIT yang boleh melaksanakan kod daripada mana-mana bahasa skrip dengan cepat dalam JVM, termasuk JavaScript, Ruby, Python dan R, dan juga memungkinkan untuk menjalankan kod asli dalam JVM yang ditukar kepada kod bit LLVM. Alat yang disediakan oleh GraalVM termasuk penyahpepijat bebas bahasa, sistem pemprofilan dan penganalisis peruntukan memori. GraalVM memungkinkan untuk mencipta aplikasi gabungan dengan komponen dalam bahasa yang berbeza, membolehkan anda mengakses objek dan tatasusunan daripada kod dalam bahasa lain. Untuk bahasa berasaskan JVM ada peluang mencipta fail boleh laku yang disusun ke dalam kod mesin yang boleh dilaksanakan secara langsung dengan penggunaan memori yang minimum (pengurusan memori dan benang dilaksanakan melalui penyambungan rangka kerja Substrat VM).

Perubahan dalam GraalJS:

  • Keserasian dengan Node.js 12.10.0 dipastikan;
  • Sifat dan fungsi global bukan standard dilumpuhkan secara lalai:
    global (digantikan oleh globalThis, menetapkan js.global-property untuk dikembalikan), prestasi (js.performance), print dan printErr (js.print);

  • Cadangan penggabungan Promise.allSettled dan batal yang dilaksanakan, yang tersedia dalam mod ECMAScript 2020 (β€œ-js.ecmascript-version=2020”);
  • Kebergantungan dikemas kini ICU4J kepada 64.2, ASM kepada 7.1.

Perubahan dalam GraalPython:

  • Menambah stubs gc.{enable,disable,isenabled}, melaksanakan charmap_build, sys.hexversion dan _lzma;
  • Perpustakaan standard Python 3.7.8 dikemas kini;
  • Menambah sokongan untuk NumPy 1.16.4 dan Pandas 0.25.0;
  • Menambah sokongan timeit;
  • socket.socket telah dibawa ke keadaan yang membolehkan anda menjalankan "graalpython -m http.server" dan memuatkan sumber http yang tidak disulitkan (tanpa TLS);
  • Memperbaiki isu dengan memaparkan objek panda.DataFrame.
    pemprosesan tupel yang salah dalam bytes.startswith,
    memusnahkan tugasan iterator dan penggunaan dict.__contains__ untuk kamus;

  • Menambah sokongan untuk ast.PyCF_ONLY_AST, yang dibenarkan memastikan pytest berfungsi;
  • Ditambah menyokong PEP 498 (interpolasi rentetan dalam literal);
  • Dilaksanakan bendera β€œ--python.EmulateJython” untuk mengimport kelas JVM menggunakan sintaks import Python biasa dan menangkap pengecualian JVM daripada kod Python;
  • Prestasi penghurai yang lebih baik, caching pengecualian,
    mengakses objek Python daripada kod JVM. Keputusan yang lebih baik dalam ujian prestasi untuk kod python dan sambungan asli (melaksanakan sambungan asli di atas llvm membayangkan bahawa kod bit llvm dihantar kepada GraalVM untuk kompilasi JIT).

Perubahan dalam TruffleRuby:

  • Untuk menyusun sambungan asli, kit alat LLVM terbina dalam kini digunakan, mencipta kedua-dua kod asli dan kod bit. Ini bermakna bahawa lebih banyak sambungan asli harus disusun di luar kotak, menghapuskan kebanyakan isu pemautan;
  • Pemasangan LLVM berasingan untuk memasang sambungan asli dalam TruffleRuby;
  • Memasang sambungan C++ pada TruffleRuby tidak lagi memerlukan pemasangan libc++ dan libc++abi;
  • Lesen dikemas kini kepada EPL 2.0/GPL 2.0/LGPL 2.1, sama seperti JRuby baru-baru ini;
  • Menambahkan sokongan untuk argumen pilihan pada GC.stat;
  • Melaksanakan kaedah Kernel#load dengan pembalut dan Kernel#spawn dengan :chdir;
  • Menambahkan rb_str_drop_bytes, yang bagus kerana OpenSSL menggunakannya;
  • Termasuk sambungan permata prapasang yang diperlukan untuk rel baharu dalam Rails 6;
  • Untuk menyusun sambungan asli, bendera digunakan, seperti dalam MRI;
  • Pengoptimuman prestasi telah dibuat dan penggunaan memori telah dikurangkan.

Perubahan dalam FastR:

  • Keserasian dengan R 3.6.1 dipastikan;
  • Menambahkan sokongan awal untuk menjalankan sambungan asli berdasarkan LLVM. Apabila membina pakej R asli, FastR dikonfigurasikan untuk menggunakan alatan LLVM terbina dalam GraalVM. Fail binari yang terhasil akan mengandungi kedua-dua kod asli dan kod bit LLVM.

    Pakej prapasang juga dibina dengan cara ini.
    FastR memuatkan dan menjalankan kod sambungan asli secara lalai, tetapi apabila dilancarkan dengan pilihan "--R.BackEnd=llvm", bitcode akan digunakan. Bahagian belakang LLVM boleh digunakan secara terpilih untuk sesetengah pakej R dengan menyatakan "--R.BackEndLLVM=pkg1,pkg2". Jika anda menghadapi masalah memasang pakej, anda boleh mengembalikan semuanya kembali dengan memanggil fastr.setToolchain("native") atau mengedit fail $FASTR_HOME/etc/Makeconf secara manual;

  • Dalam keluaran ini, FastR dihantar tanpa perpustakaan masa jalan GCC;
  • Kebocoran memori tetap;
  • Memperbaiki masalah apabila bekerja dengan vektor besar (>1GB);
  • Dilaksanakan grepRaw, tetapi hanya untuk fixed=T.

Sumber: opennet.ru

Tambah komen