Ngaleupaskeun 19.3.0 tina mesin virtual GraalVM sareng palaksanaan Python, JavaScript, Ruby sareng R dumasar kana éta

Perusahaan Oracle diterbitkeun sékrési mesin virtual universal GraalVM 19.3.0, nu ngarojong ngajalankeun aplikasi dina JavaScript (Node.js), Python, Ruby, R, basa naon baé pikeun JVM (Java, Scala, Clojure, Kotlin) jeung basa nu LLVM bitcode bisa dihasilkeun (C, C++). , Karat). Cabang 19.3 digolongkeun kana Rojongan Jangka Panjang (LTS) release na luar biasa ngadukung JDK11, kaasup kamampuhan pikeun compile kode Java kana file laksana (GraalVM Native Image). Kodeu proyék disebarkeun ku dilisensikeun dina GPLv2. Dina waktos anu sami, vérsi énggal tina Python, JavaScript, Ruby sareng palaksanaan basa Sunda nganggo GraalVM dileupaskeun - GraalPython, GraalJS, TruffleRuby и GancangR.

GraalVM nyayogikeun A kompiler JIT nu bisa ngaéksekusi kode tina sagala basa scripting on laleur di JVM, kaasup JavaScript, Ruby, Python jeung Sunda, sarta ogé ngamungkinkeun pikeun ngajalankeun kode asli dina JVM dirobah jadi LLVM bitcode. Alat anu disayogikeun ku GraalVM kalebet debugger anu mandiri basa, sistem profil, sareng analisa alokasi memori. GraalVM ngamungkinkeun pikeun nyieun aplikasi digabungkeun jeung komponén dina basa béda, ngidinan Anjeun pikeun ngakses objék jeung arrays tina kode dina basa séjén. Pikeun basa basis JVM aya kasempetan nyieun file laksana disusun jadi kode mesin nu bisa dieksekusi langsung kalawan konsumsi memori minimal (memori jeung thread manajemén dilaksanakeun ngaliwatan nyambungkeun kerangka Substrat VM).

Parobahan dina GraalJS:

  • Kasaluyuan sareng Node.js 12.10.0 dipastikeun;
  • Sipat sareng fungsi global non-standar ditumpurkeun sacara standar:
    global (diganti ku globalThis, netepkeun js.global-property mun balik), kinerja (js.performance), print na printErr (js.print);

  • Dilaksanakeun Promise.allSettled sareng proposal coalescing nullish, anu sayogi dina modeu ECMAScript 2020 ("-js.ecmascript-version=2020");
  • kagumantungan diropéa ICU4J ka 64.2, ASM ka 7.1.

Parobihan dina GraalPython:

  • Ditambahkeun stubs gc.{aktipkeun,nonaktipkeun,isenabled}, dilaksanakeun charmap_build, sys.hexversion jeung _lzma;
  • Diropéa Python 3.7.8 perpustakaan baku;
  • Ditambahkeun dukungan pikeun NumPy 1.16.4 sareng Pandas 0.25.0;
  • Ditambahkeun dukungan waktos;
  • socket.socket geus dibawa ka kaayaan nu ngidinan Anjeun pikeun ngajalankeun "graalpython -m http.server" na beban unencrypted (tanpa TLS) sumberdaya http;
  • Ngalereskeun masalah sareng ningalikeun objék pandas.DataFrame.
    ngolah tupel salah dina bytes.startswith,
    ngerjakeun destructuring of iterators sarta pamakéan dict.__contains__ pikeun kamus;

  • Ditambahkeun rojongan pikeun ast.PyCF_ONLY_AST, nu diwenangkeun mastikeun yén pytest jalan;
  • Ditambahkeun sokongan PEP 498 (interpolasi string dina literals);
  • Dilaksanakeun bendera "--python.EmulateJython" pikeun ngimpor kelas JVM ngagunakeun sintaksis impor Python normal sareng nyekel iwal JVM tina kode Python;
  • Ningkatkeun kinerja parser, pangecualian cache,
    aksés obyék Python tina kode JVM. Hasil ningkat dina tés kinerja pikeun kode python sareng ekstensi asli (ngalaksanakeun ekstensi asli di luhur llvm nunjukkeun yén bitcode llvm disalurkeun ka GraalVM pikeun kompilasi JIT).

Parobihan dina TruffleRuby:

  • Pikeun nyusun ekstensi asli, toolkit LLVM anu diwangun ayeuna dianggo, nyiptakeun kode asli sareng kode bit. Ieu ngandung harti yén leuwih ekstensi asli kedah compile out of the box, ngaleungitkeun paling isu linking;
  • Pamasangan LLVM misah pikeun masang ekstensi asli di TruffleRuby;
  • Masang C ++ ekstensi on TruffleRuby euweuh merlukeun masang libc ++ jeung libc ++ abi;
  • Lisensi diropéa pikeun EPL 2.0 / GPL 2.0 / LGPL 2.1, sarua jeung JRuby panganyarna;
  • Ditambahkeun rojongan pikeun argumen pilihan pikeun GC.stat;
  • Dilaksanakeun metodeu Kernel#load sareng bungkus sareng Kernel#spawn sareng:chdir;
  • Ditambahkeun rb_str_drop_bytes, anu saé kusabab OpenSSL nganggo éta;
  • Kaasup ekstensi tina gems tos kapasang diperlukeun pikeun rel anyar dina rel 6;
  • Pikeun nyusun ekstensi asli, bandéra dianggo, sapertos dina MRI;
  • Optimasi kinerja parantos dilakukeun sareng konsumsi mémori parantos dikirangan.

Parobihan dina FastR:

  • Kasaluyuan jeung Sunda 3.6.1 geus ensured;
  • Ditambahkeun dukungan awal pikeun ngajalankeun ekstensi asli dumasar kana LLVM. Nalika ngawangun pakét Sunda asli, FastR dikonpigurasi pikeun ngagunakeun alat LLVM diwangun-di GraalVM. Berkas binér anu dihasilkeun bakal ngandung kode asli sareng kode bit LLVM.

    Bungkusan anu tos dipasang ogé diwangun ku cara ieu.
    FastR ngamuat sareng ngajalankeun kode ekstensi asli sacara standar, tapi nalika diluncurkeun nganggo pilihan "--R.BackEnd=llvm", bitcode bakal dianggo. Backend LLVM bisa dipaké sacara selektif pikeun sababaraha pakét Sunda ku nangtukeun "--R.BackEndLLVM=pkg1,pkg2". Upami Anjeun gaduh masalah masang bungkusan, Anjeun bisa balikkeun sagalana deui ku nelepon fastr.setToolchain ("pribumi") atawa sacara manual ngédit $ FASTR_HOME / jsb / file Makeconf;

  • Dina sékrési ieu, FastR dikirimkeun tanpa perpustakaan runtime GCC;
  • Bocor memori tetep;
  • Ngalereskeun masalah nalika damel sareng vektor ageung (> 1GB);
  • Dilaksanakeun grepRaw, tapi ngan pikeun tetep = T.

sumber: opennet.ru

Tambahkeun komentar