Izdanje 19.3.0 GraalVM virtualnog stroja i implementacija Pythona, JavaScripta, Rubyja i R-a temeljenih na njemu

Tvrtka Oracle опубликовала izdanje univerzalnog virtualnog stroja GraalVM 19.3.0, koja podržava pokretanje aplikacija u JavaScriptu (Node.js), Pythonu, Rubyju, R-u, bilo kojem JVM jezicima (Java, Scala, Clojure, Kotlin) i jezicima za koje se može generirati LLVM bitkod (C, C++, Rust). Grana 19.3 klasificirana je kao izdanje s dugotrajnom podrškom (LTS) i izvanredan podrška JDK11, uključujući mogućnost kompajliranja Java koda u izvršne datoteke (GraalVM Native Image). Kod projekta distribuira pod GPLv2 licencom. Nove verzije implementacija jezika Python, JavaScript, Ruby i R koje koriste GraalVM objavljene su istovremeno. GraalPython, GraalJS, TartufRubin и FastR.

GraalVM pruža JIT kompajler koji može izvršavati kod iz bilo kojeg skriptnog jezika u hodu u JVM-u, uključujući JavaScript, Ruby, Python i R, a također omogućuje pokretanje izvornog koda u JVM-u, pretvorenog u LLVM bitkod. GraalVM-ov alat uključuje program za ispravljanje pogrešaka neovisan o jeziku, sustav profiliranja i analizator alokacije memorije. GraalVM omogućuje stvaranje kombiniranih aplikacija s komponentama u različitim jezicima, omogućujući pristup objektima i nizovima iz koda u drugim jezicima. Za jezike temeljene na JVM-u uključuje prilika stvaranje izvršnih datoteka kompajliranih u strojni kod koji se može izravno izvršiti uz minimalnu potrošnju memorije (upravljanje memorijom i nitima implementira se uključivanjem okvira) Supstrat VM).

Promjene u GraalJS-u:

  • Kompatibilnost s Node.js 12.10.0 je osigurana;
  • Nestandardna globalna svojstva i funkcije su onemogućene prema zadanim postavkama:
    globalno (zamijenjeno s globalOvo, postavka js.global-property je predviđena za vraćanje), performanse (js.performance), ispis i printErr (js.print);
  • Promise.allSettled i prijedlog za spajanje nullish su implementirani i dostupni su u ECMAScript 2020 načinu rada ("--js.ecmascript-version=2020");
  • Ažurirane ovisnosti ICU4J na 64.2, ASM na 7.1.

promjene u GraalPythonu:

  • Dodani gc.{enable,disable,isenabled} stubovi, implementirani charmap_build, sys.hexversion i _lzma;
  • Standardna Python biblioteka je ažurirana na verziju 3.7.8;
  • Dodana je podrška za NumPy 1.16.4 i Pandas 0.25.0;
  • Dodana podrška za timeit;
  • socket.socket je doveden u stanje koje omogućuje pokretanje "graalpython -m http.server" i učitavanje nešifriranih (bez TLS-a) http resursa;
  • Ispravljeni problemi s izlazom objekata pandas.DataFrame,
    neispravno rukovanje n-torkama u bajtovima.startsith,
    destrukturiranje dodjeljivanja iteratora i korištenje dict.__contains__ za rječnike;
  • Dodana je podrška za ast.PyCF_ONLY_AST, koja dozvoljeno osigurati da pytest radi;
  • Dodano podržati PEP 498 (Interpolacija stringova u literalima);
  • Provedeno zastavica "--python.EmulateJython" za uvoz JVM klasa korištenjem normalne Python sintakse uvoza i hvatanje JVM iznimki iz Python koda;
  • Poboljšane performanse parsera, keširanje iznimki,
    Pristup Python objektima iz JVM koda. Poboljšani su rezultati mjerenja performansi za Python kod i izvorna proširenja (pokretanje izvornih proširenja preko LLVM-a podrazumijeva da se LLVM bitkod prosljeđuje GraalVM-u za JIT kompilaciju).

promjene u TruffleRubyju:

  • Izvorna proširenja sada se kompiliraju pomoću integriranog LLVM alata, koji generira i izvorni i bitni kod. To znači da bi se više izvornih proširenja trebalo kompilirati odmah, rješavajući većinu problema s povezivanjem.
  • Odvojena instalacija LLVM-a za instaliranje izvornih ekstenzija u TruffleRuby;
  • Instaliranje C++ ekstenzija na TruffleRuby više ne zahtijeva instaliranje libc++ i libc++abi;
  • Licenca je ažurirana na EPL 2.0/GPL 2.0/LGPL 2.1, kao u nedavnom JRubyju;
  • Dodana je podrška za opcionalne argumente u GC.stat;
  • Implementirana metoda Kernel#load s wrapperom i Kernel#spawn s :chdir;
  • Dodan je rb_str_drop_bytes, što je odlično jer ga OpenSSL koristi;
  • Uključuje proširenja za unaprijed instalirane dragulje potrebne za nove tračnice u Railsu 6;
  • Za kompajliranje izvornih ekstenzija koriste se zastavice, kao u MRI;
  • Izvršene su optimizacije performansi i smanjena je potrošnja memorije.

promjene u FastR-u:

  • Zajamčena kompatibilnost s R 3.6.1;
  • Dodana je preliminarna podrška za izvršavanje izvornih proširenja temeljenih na LLVM-u. Prilikom izrade izvornih R paketa, FastR je konfiguriran za korištenje LLVM alata ugrađenog u GraalVM. Rezultirajuće binarne datoteke sadržavat će i izvorni kod i LLVM bitkod.

    Unaprijed instalirani paketi se također kompajliraju na ovaj način.
    FastR prema zadanim postavkama učitava i pokreće izvorni kod proširenja, ali kada se pokrene s opcijom "--R.BackEnd=llvm", koristit će se bitcode. LLVM backend može se selektivno koristiti za određene R pakete određivanjem "--R.BackEndLLVM=pkg1,pkg2". Ako se pojave problemi tijekom instaliranja paketa, možete se vratiti na zadane postavke pozivanjem fastr.setToolchain("native") ili ručnim uređivanjem datoteke $FASTR_HOME/etc/Makeconf.

  • U ovom izdanju, FastR se isporučuje bez GCC runtime biblioteka;
  • Ispravljeni problemi s curenjem memorije;
  • Ispravljeni problemi pri radu s velikim vektorima (>1GB);
  • Implementiran grepRaw, ali samo za fixed=T.

Izvor: opennet.ru

Kupite pouzdan hosting za stranice s DDoS zaštitom, VPS VDS poslužiteljima 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster