Tvrtka Oracle izdanje univerzalne virtualne mašine , koja podržava pokretanje aplikacija na JavaScriptu (Node.js), Pythonu, Rubyju, R-u, svim jezicima za JVM (Java, Scala, Clojure, Kotlin) i jezicima za koje se može generirati LLVM bit kod. Grana 19.3 klasificirana je kao izdanje s dugoročnom podrškom (LTS) i podršku , uključujući mogućnost kompilacije Java koda u izvršne datoteke (GraalVM Native Image). Kod projekta pod licencom GPLv2. Istovremeno su objavljene nove verzije implementacija jezika Python, JavaScript, Ruby i R koje koriste GraalVM — , , i .
GraalVM JIT kompajler koji može u JVM-u izvršavati kod bilo kojih skriptnih jezika u stvarnom vremenu, uključujući JavaScript, Ruby, Python i R, a također omogućuje pokretanje nativnog koda u JVM-u, pretvorenog u LLVM bit kod. GraalVM alati uključuju neovisne od jezika debager, sustav profiliranja i analizator raspodjele memorije. GraalVM omogućuje stvaranje kombiniranih aplikacija s komponentama na različitim jezicima, omogućujući pristup objektima i nizovima iz koda na drugim jezicima. Za jezike temeljen na JVM-u postoji stvaranje izvršnih datoteka kompiliranih u strojni kod koje se mogu izvoditi izravno s minimalnom potrošnjom memorije (upravljanje memorijom i niti je realizirano povezivanjem s okvirom ).
:
- Osigurana je kompatibilnost s Node.js 12.10.0;
- Nepravilna globalna svojstva i funkcije su prema zadanim postavkama onemogućene:
global (zamijenjeno s globalThis, za povratak postoji postavka js.global-property), performance (js.performance), print i printErr (js.print); - Implementirani su Promise.allSettled i nullish coalescing proposal, koji su dostupni u režimu ECMAScript 2020 („—js.ecmascript-version=2020“);
- Ažurirane su ovisnosti ICU4J na 64.2, ASM na 7.1.
u GraalPythonu:
- Dodani su stubovi gc.{enable,disable,isenabled}, implementirani charmap_build, sys.hexversion i _lzma;
- Ažurirana je standardna biblioteka Python 3.7.8;
- Dodana je podrška za NumPy 1.16.4 i Pandas 0.25.0;
- Dodana je podrška za timeit;
- socket.socket je doveden do stanja koje omogućuje pokretanje „graalpython -m http.server” i preuzimanje nešifriranih (bez TLS) http-ressursa;
- Ispravljeni su problemi vezani uz ispis objekata pandas.DataFrame,
neispravnim obradama tuplea u bytes.startswith,
dekonstruiranim dodjelama iteratora i korištenjem dict.__contains__ za rječnike; - Dodana je podrška ast.PyCF_ONLY_AST, koja osigurati rad pytest;
- Dodana PEP 498 (interpolacija stringova u literalu);
- zastavica "--python.EmulateJython" za uvoz JVM-klasa koristeći standardnu Python sintaksu import i hvatanje JVM-izuzetaka iz Python koda;
- Poboljšana izvedba parsera, keširanja izuzetaka,
pristupa Python objektima iz JVM-koda. Poboljšani rezultati u testovima performansi za Python kod i nativne ekstenzije (izvršenje nativnih ekstenzija preko llvm podrazumijeva da se bitcode llvm prosljeđuje GraalVM za JIT-kompilaciju).
u TruffleRuby:
- Za kompilaciju nativnih ekstenzija sada se koristi ugrađeni LLVM alat koji stvara i nativni kod i bitcode. To znači da bi se više nativnih ekstenzija trebalo moći kompilirati iz kutije, rješavajući većinu problema povezanih s povezivanjem;
- Odvojena instalacija LLVM za instalaciju nativnih ekstenzija u TruffleRuby;
- Za instalaciju C++ ekstenzija na TruffleRuby više nije potrebna instalacija libc++ i libc++abi;
- Licenca je ažurirana na EPL 2.0/GPL 2.0/LGPL 2.1, kao i u nedavnom JRuby;
- Dodana podrška za opcijske argumente u GC.stat;
- Implementirana metoda Kernel#load s omotačem i Kernel#spawn s :chdir;
- Dodana rb_str_drop_bytes, zanimljiva jer je koristi OpenSSL;
- Uključene su ekstenzije unaprijed instaliranih gemova potrebne za rails new u Rails 6;
- Za kompilaciju nativnih ekstenzija korištene su zastavice, kao u MRI;
- Unesene su optimizacije performansi i smanjena potrošnja memorije.
u FastR:
- Osigurana kompatibilnost s R 3.6.1;
- Dodana preliminarna podrška za izvršavanje nativnih ekstenzija temeljenih na LLVM. Pri gradnji nativnih paketa R, FastR je konfiguriran za korištenje ugrađenog GraalVM LLVM alata. Rezultantni binarni fajlovi će sadržavati i nativni kod i LLVM-bitcode.
Unaprijed instalirani paketi također su prikupljeni na ovaj način.
FastR učitava i pokreće nativni kod ekstenzija prema zadanim postavkama, ali, kada se pokrene s opcijom "--R.BackEnd=llvm", koristiće se bitcode. LLVM back-end može se koristiti selektivno za neke R pakete, navodeći "--R.BackEndLLVM=pkg1,pkg2". U slučaju problema prilikom instalacije paketa, možete se vratiti unazad pozivajući fastr.setToolchain("native") ili ručno uređujući datoteku $FASTR_HOME/etc/Makeconf; - U ovoj verziji FastR dolazi bez GCC runtime biblioteka;
- Ispravljene su memorijske curenja;
- Ispravljeni su problemi prilikom rada s velikim vektorima (>>1GB);
- Implemented grepRaw, but only for fixed=T.
Izvor: opennet.ru
