Khipha okungu-19.3.0 komshini obonakalayo we-GraalVM nokusetshenziswa kwePython, JavaScript, Ruby kanye no-R okusekelwe kuyo

Inkampani ye-Oracle eshicilelwe ukukhishwa komshini we-virtual jikelele I-GraalVM 19.3.0, esekela izinhlelo zokusebenza ezisebenza ku-JavaScript (Node.js), i-Python, i-Ruby, i-R, noma yiziphi izilimi ze-JVM (i-Java, i-Scala, i-Clojure, i-Kotlin) nezilimi okungenziwa ngazo i-bitcode ye-LLVM (C, C++ , Ukugqwala). Igatsha le-19.3 lihlukaniswa njengokukhululwa kwe-Long Term Support (LTS) kanye ephawulekayo ukusekela I-JDK 11, okuhlanganisa ikhono lokuhlanganisa ikhodi ye-Java kumafayela asebenzisekayo (Isithombe Somdabu se-GraalVM). Ikhodi yephrojekthi isatshalaliswa ngu ilayisensi ngaphansi kwe-GPLv2. Ngasikhathi sinye, kwakhululwa izinguqulo ezintsha zePython, JavaScript, Ruby kanye noR usebenzisa iGraalVM - I-GraalPython, GraalJS, I-TruffleRuby ΠΈ FastR.

I-GraalVM ihlinzeka I-JIT compiler engakwazi ukusebenzisa ikhodi yanoma yiluphi ulimi lokubhala endizeni ku-JVM, okuhlanganisa i-JavaScript, i-Ruby, i-Python ne-R, futhi yenza kube nokwenzeka ukusebenzisa ikhodi yomdabu ku-JVM eguqulelwe ku-bitcode ye-LLVM. Amathuluzi ahlinzekwe yi-GraalVM ahlanganisa isilungisi-maphutha esingazimele, isistimu yokwenza iphrofayela, nesihlaziyi sokwabiwa kwenkumbulo. I-GraalVM yenza kube nokwenzeka ukudala izinhlelo zokusebenza ezihlanganisiwe ezinezingxenye ezilimini ezihlukene, okukuvumela ukuthi ufinyelele izinto kanye nezinhla ezivela kukhodi kwezinye izilimi. Ngezilimi ezisekelwe ku-JVM zikhona ithuba ukudala amafayela asebenzisekayo ahlanganiswe kukhodi yomshini angenziwa ngokuqondile ngokusetshenziswa okuncane kwenkumbulo (inkumbulo nokuphathwa kwentambo kwenziwa ngokuxhuma uhlaka. I-substrate VM).

Izinguquko ku-GraalJS:

  • Ukuhambisana ne-Node.js 12.10.0 kuqinisekiswa;
  • Izakhiwo zomhlaba ezingajwayelekile nemisebenzi ikhutshazwa ngokuzenzakalela:
    global (ithathelwe indawo ngokuthi globalThis, setting js.global-property to return), ukusebenza (js.performance), phrinta futhi printErr (js.print);

  • I-Implemented Promise.allSettled futhi ingasebenzi isiphakamiso sokuhlanganisa, esitholakala ngemodi ye-ECMAScript 2020 (β€œ-js.ecmascript-version=2020”);
  • Kubuyekezwe okuncike ku-ICU4J kuya kokungu-64.2, ASM kuya kokungu-7.1.

Izinguquko ku-GraalPython:

  • I-stubs gc engeziwe.{enable,disable,isenabled}, i-charmap_build efakiwe, i-sys.hexversion ne-_lzma;
  • Ilabhulali ejwayelekile yePython 3.7.8 ebuyekeziwe;
  • Ukwesekwa okwengeziwe kwe-NumPy 1.16.4 kanye ne-Pandas 0.25.0;
  • Ukwesekwa kwesikhathi esingeziwe;
  • i-socket.socket ilethwe esimweni esikuvumela ukuthi usebenzise i-"graalpython -m http.server" futhi ulayishe okungabhaliwe (ngaphandle kwe-TLS) izinsiza ze-http;
  • Kulungiswe izinkinga ngokubonisa izinto ze-pandas.DataFrame.
    ukucubungula okungalungile kwama-tuples ngama-bytes.startswith,
    umsebenzi wokucekela phansi kwabaphindaphindayo kanye nokusetshenziswa kwe-dict.__iqukethe__ izichazamazwi;

  • Kwengezwe usekelo lwe-ast.PyCF_ONLY_AST, okuyinto kuvunyelwe qinisekisa ukuthi i-pytest iyasebenza;
  • Kwengeziwe ukwesekwa I-PEP 498 (ukufakwa kwentambo ngamazwi angokoqobo);
  • Kwenziwa ifulegi elithi β€œ--python.EmulateJython” ukuze ungenise amakilasi e-JVM usebenzisa i-syntax evamile yokungenisa yePython futhi ubambe okuhlukile kwe-JVM kukhodi yePython;
  • Ukusebenza komhlaziyi okuthuthukisiwe, ukugcinwa kwesikhashana okuhlukile,
    ukufinyelela izinto zePython kusuka kukhodi ye-JVM. Imiphumela ethuthukisiwe ekuhlolweni kokusebenza kwekhodi ye-python nezandiso zomdabu (ukusebenzisa izandiso zomdabu phezu kwe-llvm kusho ukuthi i-bitcode llvm idluliselwa ku-GraalVM ukuze kuhlanganiswe i-JIT).

Izinguquko ku-TruffleRuby:

  • Ukuhlanganisa izandiso zomdabu, ikhithi yamathuluzi eyakhelwe ngaphakathi ye-LLVM manje isisetshenziswa, kudala kokubili ikhodi yomdabu kanye ne-bitcode. Lokhu kusho ukuthi izandiso zomdabu eziningi kufanele zihlanganiselwe ngaphandle kwebhokisi, zisuse izinkinga eziningi zokuxhumanisa;
  • Ukufakwa okuhlukile kwe-LLVM kokufaka izandiso zomdabu ku-TruffleRuby;
  • Ukufaka izandiso ze-C++ ku-TruffleRuby akusadingi ukufaka i-libc++ kanye ne-libc++abi;
  • Ilayisensi ibuyekezwe ku-EPL 2.0/GPL 2.0/LGPL 2.1, efana ne-JRuby yakamuva;
  • Kwengezwe usekelo lwama-agumenti ongawakhetha ku-GC.stat;
  • Kusetshenziswe indlela ye-Kernel#load ngesisonga kanye ne-Kernel#izalele nge-:chdir;
  • Kwengezwe okuthi rb_str_drop_bytes, okuhle ngoba i-OpenSSL iyayisebenzisa;
  • Kufakwe izandiso zamatshe ayigugu afakwe kuqala adingekayo kumareyili amasha ku-Rails 6;
  • Ukuhlanganisa izandiso zomdabu, amafulege asetshenziswa, njengaku-MRI;
  • Ukulungiselelwa kokusebenza kwenziwe futhi ukusetshenziswa kwenkumbulo kwehlisiwe.

Izinguquko ku-FastR:

  • Ukuhambisana no-R 3.6.1 kuyaqinisekiswa;
  • Kwengezwe usekelo lokuqala lokuqalisa izandiso zomdabu ezisuselwe ku-LLVM. Lapho kwakhiwa amaphakheji e-R omdabu, i-FastR ilungiselelwe ukusebenzisa ithuluzi le-LLVM elakhelwe ngaphakathi le-GraalVM. Amafayela kanambambili azoba umphumela azoqukatha kokubili ikhodi yomdabu kanye ne-bitcode ye-LLVM.

    Amaphakheji afakwe ngaphambilini nawo akhiwa ngale ndlela.
    I-FastR ilayisha futhi isebenzisa ikhodi yesandiso yomdabu ngokuzenzakalelayo, kodwa lapho yethulwa ngenketho ethi "--R.BackEnd=llvm", kuzosetshenziswa i-bitcode. Ingemuva le-LLVM lingasetshenziswa ngokukhetha kwamanye amaphakheji e-R ngokucacisa "--R.BackEndLLVM=pkg1,pkg2". Uma unezinkinga zokufaka amaphakheji, ungakwazi ukubuyisela yonke into ngokushayela fastr.setToolchain("native") noma ukuhlela mathupha ifayela le-$FASTR_HOME/etc/Makeconf;

  • Kulokhu kukhululwa, i-FastR ithumela ngaphandle kwemitapo yolwazi yesikhathi sokusebenza ye-GCC;
  • Ukuvuza kwenkumbulo okungaguquki;
  • Izinkinga ezilungisiwe lapho usebenza nama-vectors amakhulu (> 1GB);
  • I-grepRaw esetshenzisiwe, kodwa kuphela i-fixed=T.

Source: opennet.ru

Engeza amazwana