Toa 19.3.0 ya mashine pepe ya GraalVM na utekelezaji wa Python, JavaScript, Ruby na R kulingana nayo.

Kampuni ya Oracle ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° kutolewa kwa mashine ya mtandaoni ya ulimwengu wote GraalVM 19.3.0, ambayo inasaidia utumiaji wa programu katika JavaScript (Node.js), Python, Ruby, R, lugha zozote za JVM (Java, Scala, Clojure, Kotlin) na lugha ambazo bitcode ya LLVM inaweza kutolewa (C, C++ , Kutu). Tawi la 19.3 limeainishwa kama toleo la Usaidizi wa Muda Mrefu (LTS) na ya ajabu msaada JDK11, ikiwa ni pamoja na uwezo wa kukusanya msimbo wa Java katika faili zinazoweza kutekelezwa (GraalVM Native Image). Msimbo wa mradi kusambazwa na iliyopewa leseni chini ya GPLv2. Wakati huo huo, matoleo mapya ya Python, JavaScript, Ruby na utekelezaji wa lugha ya R kwa kutumia GraalVM yalitolewa - GraalPython, GraalJS, TruffleRuby ΠΈ FastR.

GraalVM hutoa Kikusanyaji cha JIT ambacho kinaweza kutekeleza msimbo kutoka kwa lugha yoyote ya uandishi kwa kuruka kwenye JVM, ikijumuisha JavaScript, Ruby, Python na R, na pia hurahisisha kuendesha msimbo asilia katika JVM iliyogeuzwa kuwa bitcode ya LLVM. Zana zinazotolewa na GraalVM ni pamoja na kitatuzi kisichotegemea lugha, mfumo wa wasifu, na kichanganuzi cha mgao wa kumbukumbu. GraalVM hukuruhusu kuunda programu zilizojumuishwa na vijenzi katika lugha tofauti, hukuruhusu kufikia vitu na safu kutoka kwa msimbo katika lugha zingine. Kwa lugha za msingi wa JVM kuna nafasi kuunda faili zinazoweza kutekelezwa zilizojumuishwa katika nambari ya mashine ambayo inaweza kutekelezwa moja kwa moja na utumiaji mdogo wa kumbukumbu (usimamizi wa kumbukumbu na uzi unatekelezwa kupitia kuunganisha mfumo. Sehemu ndogo ya VM).

Mabadiliko katika GraalJS:

  • Utangamano na Node.js 12.10.0 umehakikishwa;
  • Sifa na utendaji zisizo za kawaida za kimataifa zimezimwa kwa chaguo-msingi:
    global (ikibadilishwa na globalThis, setting js.global-property to return), utendaji (js.performance), chapa na printErr (js.print);

  • Pendekezo Lililotekelezwa la Promise.allSettled na kubatilisha, ambalo linapatikana katika hali ya ECMAScript 2020 (β€œ-js.ecmascript-version=2020”);
  • Ilisasisha vitegemezi ICU4J hadi 64.2, ASM hadi 7.1.

Mabadiliko katika GraalPython:

  • Umeongeza stubs gc.{enable,disable,isenabled}, charmap_build iliyotekelezwa, sys.hexversion na _lzma;
  • maktaba ya kawaida ya Python 3.7.8 iliyosasishwa;
  • Msaada ulioongezwa kwa NumPy 1.16.4 na Pandas 0.25.0;
  • Msaada wa muda ulioongezwa;
  • socket.socket imeletwa kwenye hali ambayo inakuruhusu kuendesha "graalpython -m http.server" na kupakia rasilimali ambazo hazijasimbwa (bila TLS) http;
  • Masuala yasiyohamishika kwa kuonyesha vipengee vya pandas.DataFrame.
    usindikaji usio sahihi wa nakala katika bytes.startswith,
    mgawo wa uharibifu wa warudiaji na matumizi ya dict.__contains__ kwa kamusi;

  • Imeongeza usaidizi kwa ast.PyCF_ONLY_AST, ambayo ruhusiwa hakikisha kuwa pytest inafanya kazi;
  • Imeongezwa kusaidia PEP 498 (ufafanuzi wa kamba kwa maandishi);
  • Imetekelezwa bendera ya "--python.EmulateJython" ili kuingiza madarasa ya JVM kwa kutumia syntax ya kawaida ya kuingiza chatu na kupata vighairi vya JVM kutoka kwa msimbo wa Python;
  • Utendaji ulioboreshwa wa vichanganuzi, uakibishaji wa kipekee,
    kupata vitu vya Python kutoka kwa nambari ya JVM. Matokeo yaliyoboreshwa katika majaribio ya utendakazi wa msimbo wa chatu na viendelezi asilia (kutekeleza viendelezi asilia juu ya llvm kunamaanisha kuwa bitcode llvm inapitishwa kwa GraalVM kwa mkusanyiko wa JIT).

Mabadiliko katika TruffleRuby:

  • Ili kukusanya viendelezi asilia, zana ya zana iliyojengewa ndani ya LLVM sasa inatumika, na kuunda msimbo asilia na biticode. Hii ina maana kwamba viendelezi zaidi vya asili vinapaswa kukusanywa nje ya kisanduku, kuondoa masuala mengi ya kuunganisha;
  • Tenganisha usakinishaji wa LLVM kwa kusakinisha viendelezi vya asili katika TruffleRuby;
  • Kusakinisha viendelezi vya C++ kwenye TruffleRuby hahitaji tena kusakinisha libc++ na libc++abi;
  • Leseni iliyosasishwa hadi EPL 2.0/GPL 2.0/LGPL 2.1, sawa na JRuby ya hivi majuzi;
  • Imeongeza usaidizi wa hoja za hiari kwa GC.stat;
  • Ilitekeleza mbinu ya Kernel#load kwa kanga na Kernel#spawn na :chdir;
  • Imeongeza rb_str_drop_bytes, ambayo ni nzuri kwa sababu OpenSSL inaitumia;
  • Inajumuisha viendelezi vya vito vilivyosakinishwa awali vinavyohitajika kwa reli mpya katika Reli 6;
  • Kukusanya upanuzi wa asili, bendera hutumiwa, kama katika MRI;
  • Uboreshaji wa utendakazi umefanywa na matumizi ya kumbukumbu yamepunguzwa.

Mabadiliko katika FastR:

  • Utangamano na R 3.6.1 unahakikishwa;
  • Umeongeza usaidizi wa awali wa kuendesha viendelezi asili kulingana na LLVM. Wakati wa kuunda vifurushi vya asili vya R, FastR imesanidiwa kutumia zana iliyojengwa ndani ya LLVM ya GraalVM. Faili za binary zinazotokana zitakuwa na msimbo asilia na msimbo mdogo wa LLVM.

    Vifurushi vilivyowekwa mapema pia hujengwa kwa njia hii.
    FastR hupakia na kuendesha msimbo asilia wa kiendelezi kwa chaguo-msingi, lakini inapozinduliwa na chaguo la "--R.BackEnd=llvm", bitcode itatumika. Mazingira ya nyuma ya LLVM yanaweza kutumika kwa kuchagua baadhi ya vifurushi vya R kwa kubainisha "--R.BackEndLLVM=pkg1,pkg2". Ikiwa una matatizo ya kusakinisha vifurushi, unaweza kurejesha kila kitu kwa kupiga simu fastr.setToolchain("asili") au kuhariri mwenyewe $FASTR_HOME/etc/Makeconf faili;

  • Katika toleo hili, FastR husafirisha bila maktaba za wakati wa utekelezaji za GCC;
  • Uvujaji wa kumbukumbu zisizohamishika;
  • Shida zisizohamishika wakati wa kufanya kazi na vekta kubwa (> 1GB);
  • Imetekelezwa grepRaw, lakini kwa fixed=T pekee.

Chanzo: opennet.ru

Kuongeza maoni