Ilabas ang 19.3.0 ng GraalVM virtual machine at mga pagpapatupad ng Python, JavaScript, Ruby at R batay dito

Oracle Company ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° paglabas ng isang unibersal na virtual machine GraalVM 19.3.0, na sumusuporta sa pagpapatakbo ng mga application sa JavaScript (Node.js), Python, Ruby, R, anumang mga wika para sa JVM (Java, Scala, Clojure, Kotlin) at mga wika kung saan maaaring mabuo ang LLVM bitcode (C, C++ , Kalawang). Ang 19.3 branch ay inuri bilang isang Long Term Support (LTS) release at kapansin-pansin suporta JDK11, kabilang ang kakayahang mag-compile ng Java code sa mga executable na file (GraalVM Native Image). Code ng proyekto ipinamahagi ni lisensyado sa ilalim ng GPLv2. Kasabay nito, inilabas ang mga bagong bersyon ng Python, JavaScript, Ruby at R language na pagpapatupad gamit ang GraalVM - GraalPython, GraalJS, TruffleRuby ΠΈ MabilisR.

GraalVM nagbibigay Isang JIT compiler na maaaring mag-execute ng code mula sa anumang scripting language nang mabilis sa JVM, kabilang ang JavaScript, Ruby, Python at R, at ginagawang posible ring magpatakbo ng native code sa JVM na na-convert sa LLVM bitcode. Kasama sa mga tool na ibinigay ng GraalVM ang isang language-independent debugger, isang profiling system, at isang memory allocation analyzer. Ginagawang posible ng GraalVM na lumikha ng pinagsamang mga application na may mga bahagi sa iba't ibang wika, na nagbibigay-daan sa iyong ma-access ang mga bagay at array mula sa code sa ibang mga wika. Para sa mga wikang nakabatay sa JVM mayroong pagkakataon paglikha ng mga maipapatupad na file na pinagsama-sama sa machine code na maaaring direktang isagawa nang may kaunting pagkonsumo ng memorya (ang memorya at pamamahala ng thread ay ipinapatupad sa pamamagitan ng pagkonekta sa balangkas Substrate VM).

Mga pagbabago sa GraalJS:

  • Ang pagiging tugma sa Node.js 12.10.0 ay sinisiguro;
  • Ang hindi karaniwang mga pandaigdigang pag-aari at pag-andar ay hindi pinagana bilang default:
    global (pinalitan ng globalThis, pagtatakda ng js.global-property na ibalik), performance (js.performance), print at printErr (js.print);

  • Ipinatupad ang Promise.allSettled at nullish coalescing proposal, na available sa ECMAScript 2020 mode (β€œ-js.ecmascript-version=2020”);
  • Na-update ang mga dependency na ICU4J sa 64.2, ASM sa 7.1.

Pagbabago sa GraalPython:

  • Nagdagdag ng mga stub gc.{enable,disable,isenabled}, ipinatupad ang charmap_build, sys.hexversion at _lzma;
  • Na-update na Python 3.7.8 standard library;
  • Nagdagdag ng suporta para sa NumPy 1.16.4 at Pandas 0.25.0;
  • Nagdagdag ng suporta sa oras;
  • Ang socket.socket ay dinala sa isang estado na nagbibigay-daan sa iyong patakbuhin ang β€œgraalpython -m http.server” at mag-load ng hindi naka-encrypt (nang walang TLS) na mga mapagkukunan ng http;
  • Inayos ang mga isyu sa pagpapakita ng mga pandas.DataFrame object.
    maling pagproseso ng mga tuple sa bytes.startswith,
    pagsira ng pagtatalaga ng mga iterator at paggamit ng dict.__contains__ para sa mga diksyunaryo;

  • Nagdagdag ng suporta para sa ast.PyCF_ONLY_AST, na pinapayagan tiyakin na gumagana ang pytest;
  • Idinagdag sinusuportahan PEP 498 (interpolation ng string sa mga literal);
  • Ipinatupad ang flag na β€œ--python.EmulateJython” para mag-import ng mga klase ng JVM gamit ang normal na Python import syntax at mahuli ang mga exception ng JVM mula sa Python code;
  • Pinahusay na pagganap ng parser, exception caching,
    pag-access ng mga bagay sa Python mula sa JVM code. Ang mga pinahusay na resulta sa mga pagsubok sa pagganap para sa python code at mga native na extension (pagpapatupad ng mga native na extension sa itaas ng llvm ay nagpapahiwatig na ang bitcode llvm ay ipinapasa sa GraalVM para sa JIT compilation).

Pagbabago sa TruffleRuby:

  • Upang mag-compile ng mga native na extension, ginagamit na ngayon ang built-in na LLVM toolkit, na lumilikha ng parehong native code at bitcode. Nangangahulugan ito na mas maraming katutubong extension ang dapat mag-compile sa labas ng kahon, na inaalis ang karamihan sa mga isyu sa pagli-link;
  • Paghiwalayin ang pag-install ng LLVM para sa pag-install ng mga katutubong extension sa TruffleRuby;
  • Ang pag-install ng mga extension ng C++ sa TruffleRuby ay hindi na nangangailangan ng pag-install ng libc++ at libc++abi;
  • Na-update ang lisensya sa EPL 2.0/GPL 2.0/LGPL 2.1, katulad ng kamakailang JRuby;
  • Nagdagdag ng suporta para sa mga opsyonal na argumento sa GC.stat;
  • Ipinatupad ang Kernel#load method na may wrapper at Kernel#spawn na may :chdir;
  • Nagdagdag ng rb_str_drop_bytes, na maganda dahil ginagamit ito ng OpenSSL;
  • May kasamang mga extension ng pre-installed na hiyas na kailangan para sa mga riles na bago sa Rails 6;
  • Upang mag-compile ng mga katutubong extension, ang mga flag ay ginagamit, tulad ng sa MRI;
  • Ang mga pag-optimize ng pagganap ay ginawa at ang pagkonsumo ng memorya ay nabawasan.

Pagbabago sa FastR:

  • Ang pagiging tugma sa R ​​3.6.1 ay sinisiguro;
  • Nagdagdag ng paunang suporta para sa pagpapatakbo ng mga native na extension batay sa LLVM. Kapag gumagawa ng mga native na R package, naka-configure ang FastR na gamitin ang built-in na LLVM tooling ng GraalVM. Ang mga resultang binary file ay maglalaman ng parehong native code at LLVM bitcode.

    Ang mga paunang naka-install na pakete ay binuo din sa ganitong paraan.
    Ang FastR ay naglo-load at nagpapatakbo ng native extension code bilang default, ngunit kapag inilunsad gamit ang "--R.BackEnd=llvm" na opsyon, bitcode ang gagamitin. Ang LLVM backend ay maaaring gamitin nang pili para sa ilang R package sa pamamagitan ng pagtukoy sa "--R.BackEndLLVM=pkg1,pkg2". Kung mayroon kang mga problema sa pag-install ng mga package, maaari mong ibalik ang lahat sa pamamagitan ng pagtawag sa fastr.setToolchain("native") o manu-manong pag-edit sa $FASTR_HOME/etc/Makeconf file;

  • Sa release na ito, nagpapadala ang FastR nang walang mga library ng runtime ng GCC;
  • Nakapirming pagtagas ng memorya;
  • Inayos ang mga problema kapag nagtatrabaho sa malalaking vectors (>1GB);
  • Ipinatupad ang grepRaw, ngunit para lamang sa fixed=T.

Pinagmulan: opennet.ru

Magdagdag ng komento