Kompanija Oracle izdanje univerzalne virtuelne mašine , koji podržava pokretanje aplikacija u JavaScriptu (Node.js), Python, Ruby, R, bilo kojim jezicima za JVM (Java, Scala, Clojure, Kotlin) i jezicima za koje se može generirati LLVM bitcode (C, C++ , Rust). Grana 19.3 je klasifikovana kao izdanje za dugoročnu podršku (LTS). podrška , uključujući mogućnost kompajliranja Java koda u izvršne datoteke (GraalVM Native Image). Šifra projekta licenciran pod GPLv2. Istovremeno, objavljene su nove verzije implementacija jezika Python, JavaScript, Ruby i R koristeći GraalVM - , , и .
GraalVM JIT kompajler koji može u hodu izvršiti kod iz bilo kojeg skriptnog jezika u JVM-u, uključujući JavaScript, Ruby, Python i R, a također omogućava pokretanje izvornog koda u JVM-u konvertovanog u LLVM bitcode. Alati koje pruža GraalVM uključuju program za otklanjanje grešaka koji je nezavisan od jezika, sistem profilisanja i analizator alokacije memorije. GraalVM omogućava kreiranje kombinovanih aplikacija sa komponentama na različitim jezicima, omogućavajući vam da pristupite objektima i nizovima iz koda na drugim jezicima. Za jezike zasnovane na JVM postoji kreiranje izvršnih datoteka kompajliranih u mašinski kod koji se može izvršiti direktno uz minimalnu potrošnju memorije (upravljanje memorijom i nitima se implementira kroz povezivanje okvira ).
:
- Kompatibilnost sa Node.js 12.10.0 je osigurana;
- Nestandardna globalna svojstva i funkcije su onemogućene prema zadanim postavkama:
global (zamijenjen globalThis, postavljanje js.global-property za povratak), performanse (js.performance), print i printErr (js.print); - Implementirani Promise.allSettled i nullish prijedlog spajanja, koji su dostupni u ECMAScript 2020 modu (“-js.ecmascript-version=2020”);
- Ažurirane zavisnosti ICU4J na 64.2, ASM na 7.1.
u GraalPython-u:
- Dodani stubovi gc.{enable,disable,isenabled}, implementirani charmap_build, sys.hexversion i _lzma;
- Ažurirana standardna biblioteka Python 3.7.8;
- Dodata podrška za NumPy 1.16.4 i Pandas 0.25.0;
- Dodata podrška za timeit;
- socket.socket je doveden u stanje koje vam omogućava da pokrenete “graalpython -m http.server” i učitate nešifrovane (bez TLS) http resurse;
- Riješeni problemi s prikazivanjem objekata pandas.DataFrame.
pogrešna obrada tuple u bytes.startswith,
destrukturiranje dodjele iteratora i korištenje dict.__contains__ za rječnike; - Dodata podrška za ast.PyCF_ONLY_AST, što osigurati da pytest radi;
- Dodano PEP 498 (interpolacija niza u literalima);
- oznaku “--python.EmulateJython” za uvoz JVM klasa koristeći normalnu Python sintaksu za uvoz i hvatanje JVM izuzetaka iz Python koda;
- Poboljšane performanse parsera, keširanje izuzetaka,
pristupanje Python objektima iz JVM koda. Poboljšani rezultati u testovima performansi za Python kod i izvorne ekstenzije (izvršavanje izvornih ekstenzija na vrhu llvm-a implicira da se bitcode llvm prosljeđuje GraalVM-u za JIT kompilaciju).
u TruffleRuby:
- Za kompajliranje izvornih ekstenzija sada se koristi ugrađeni LLVM alat koji kreira i izvorni i bitni kod. To znači da bi više izvornih ekstenzija trebalo kompajlirati iz kutije, eliminirajući većinu problema s povezivanjem;
- Odvojena LLVM instalacija za instaliranje izvornih ekstenzija u TruffleRuby;
- Instaliranje C++ ekstenzija na TruffleRuby više ne zahtijeva instaliranje libc++ i libc++abi;
- Licenca ažurirana na EPL 2.0/GPL 2.0/LGPL 2.1, isto kao i nedavni JRuby;
- Dodata podrška za opcione argumente u GC.stat;
- Implementirao metodu Kernel#load sa omotačem i Kernel#spawn sa :chdir;
- Dodano rb_str_drop_bytes, što je odlično jer ga OpenSSL koristi;
- Uključena proširenja unaprijed instaliranih dragulja potrebnih za nove šine u Rails 6;
- Za kompajliranje izvornih ekstenzija, koriste se zastavice, kao u MRI;
- Napravljene su optimizacije performansi i smanjena je potrošnja memorije.
u FastR-u:
- Osigurana je kompatibilnost sa R 3.6.1;
- Dodata preliminarna podrška za pokretanje izvornih ekstenzija zasnovanih na LLVM-u. Prilikom izrade izvornih R paketa, FastR je konfigurisan da koristi ugrađeni LLVM alat u GraalVM-u. Rezultirajuće binarne datoteke će sadržavati i izvorni kod i LLVM bitni kod.
Unaprijed instalirani paketi su također napravljeni na ovaj način.
FastR učitava i pokreće izvorni kod ekstenzije prema zadanim postavkama, ali kada se pokrene s opcijom "--R.BackEnd=llvm", bit će korišten kod. LLVM pozadina se može koristiti selektivno za neke R pakete navođenjem "--R.BackEndLLVM=pkg1,pkg2". Ako imate problema sa instalacijom paketa, možete vratiti sve nazad tako što ćete pozvati fastr.setToolchain("native") ili ručno urediti datoteku $FASTR_HOME/etc/Makeconf; - U ovom izdanju, FastR se isporučuje bez GCC runtime biblioteka;
- Popravljeno curenje memorije;
- Rešeni problemi pri radu sa velikim vektorima (>1GB);
- Implementiran grepRaw, ali samo za fixed=T.
izvor: opennet.ru
