Tvrtka Oracle izdanje univerzalnog virtualnog stroja , 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 podrška , uključujući mogućnost kompajliranja Java koda u izvršne datoteke (GraalVM Native Image). Kod projekta pod GPLv2 licencom. Nove verzije implementacija jezika Python, JavaScript, Ruby i R koje koriste GraalVM objavljene su istovremeno. , , и .
GraalVM 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 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) ).
:
- 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.
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 osigurati da pytest radi;
- Dodano PEP 498 (Interpolacija stringova u literalima);
- 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).
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.
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
