Oracle Company de uitgave van een universele virtuele machine , die de uitvoering van applicaties op JavaScript (Node.js), Python, Ruby, R, en elke taal voor JVM (Java, Scala, Clojure, Kotlin) en talen waarvoor LLVM-bitscode kan worden gegenereerd (C, C++, Rust) ondersteunt. Tak 19.3 behoort tot de releases met een lange termijn ondersteuning (LTS) en ondersteuning voor , inclusief de mogelijkheid om Java-code te compileren naar uitvoerbare bestanden (GraalVM Native Image). De code van het project is uitgebracht onder GPLv2. Tegelijkertijd zijn nieuwe versies van talen die GraalVM gebruiken voor Python, JavaScript, Ruby en R uitgebracht — , , en .
GraalVM een JIT-compiler die on-the-fly elke scripttaal code in de JVM kan uitvoeren, waaronder JavaScript, Ruby, Python en R, en die de mogelijkheid biedt om native code in de JVM uit te voeren, omgezet naar LLVM-bitscode. De door GraalVM geleverde toolkit omvat een taal-onafhankelijke debugger, profiler en geheugenanalyse-tool. GraalVM maakt het mogelijk om gecombineerde applicaties te creëren met componenten in verschillende talen, waarmee toegang tot objecten en arrays vanuit de code in andere talen kan worden verkregen. Voor JVM-gebaseerde talen is er de mogelijkheid om uitvoerbare bestanden die in machinetaal zijn gecompileerd te maken, die rechtstreeks kunnen worden uitgevoerd met een minimaal geheugenverbruik (geheugen- en threadbeheer is geïmplementeerd via de aangesloten framework ).
:
- Compatibiliteit met Node.js 12.10.0 is gewaarborgd;
- Niet-standaard globale eigenschappen en functies zijn standaard uitgeschakeld:
global (vervangen door globalThis; een instelling js.global-property is beschikbaar voor terugkeer), performance (js.performance), print en printErr (js.print); - Promise.allSettled en de nullish coalescing proposal zijn geïmplementeerd, beschikbaar in de ECMAScript 2020 modus ("—js.ecmascript-version=2020");
- Afhankelijkheden ICU4J zijn bijgewerkt naar 64.2, ASM naar 7.1.
in GraalPython:
- gc.{enable,disable,isenabled} zijn toegevoegd, charmap_build, sys.hexversion en _lzma zijn geïmplementeerd;
- de standaardbibliotheek van Python 3.7.8 is bijgewerkt;
- ondersteuning voor NumPy 1.16.4 en Pandas 0.25.0 is toegevoegd;
- ondersteuning voor timeit is toegevoegd;
- socket.socket is verbeterd voor het uitvoeren van "graalpython -m http.server" en het laden van ongecodeerde (zonder TLS) http-resources;
- problemen met de uitvoer van pandas.DataFrame-objecten zijn opgelost,
onjuiste verwerking van tuples in bytes.startswith,
destructurering van iteratoren en het gebruik van dict.__contains__ voor dictionaries; - ondersteuning voor ast.PyCF_ONLY_AST is toegevoegd, die de werking van pytest te verzekeren;
- Toegevoegd PEP 498 (stringinterpolatie in literalen);
- de vlag «—python.EmulateJython» voor het importeren van JVM-klassen met de gebruikelijke Python-syntaxis import en het vangen van JVM-excepties vanuit Python-code;
- Verbeterde parserprestaties, caching van excepties,
toegang tot Python-objecten vanuit JVM-code. Verbeterde prestaties in prestatietests voor Python-code en native extensies (de uitvoering van native extensies bovenop llvm houdt in dat LLVM-bitscode naar GraalVM wordt gestuurd voor JIT-compilatie).
in TruffleRuby:
- Voor de compilatie van native extensies wordt nu de ingebouwde LLVM-toolchain gebruikt, die zowel native code als bitscode genereert. Dit betekent dat meer native extensies out-of-the-box gecompileerd moeten kunnen worden, waardoor de meeste samenstellingsproblemen opgelost kunnen worden;
- Een aparte installatie van LLVM voor het installeren van native extensies in TruffleRuby;
- Voor de installatie van C++-extensies op TruffleRuby is geen installatie van libc++ en libc++abi meer nodig;
- De licentie is bijgewerkt naar EPL 2.0/GPL 2.0/LGPL 2.1, net als in de recente JRuby;
- Ondersteuning voor optionele argumenten in GC.stat toegevoegd;
- De methode Kernel#load met omhulsel en Kernel#spawn met :chdir is geïmplementeerd;
- rb_str_drop_bytes toegevoegd, opmerkelijk omdat OpenSSL het gebruikt;
- De extensies van vooraf geïnstalleerde gem's, nodig voor rails new in Rails 6, zijn opgenomen;
- Voor de compilatie van native extensies zijn de vlaggen ingesteld zoals in MRI;
- Prestaties geoptimaliseerd en geheugenverbruik verminderd.
in FastR:
- Compatibiliteit met R 3.6.1 gegarandeerd;
- Vroegtijdige ondersteuning voor de uitvoering van native extensies op basis van LLVM toegevoegd. Bij het bouwen van native R-pakketten is FastR geconfigureerd om de ingebouwde LLVM-toolchain van GraalVM te gebruiken. De resulterende binaire bestanden bevatten zowel native code als LLVM-bitscode.
De vooraf geïnstalleerde pakketten zijn ook op deze manier samengesteld.
FastR laadt en voert native code van extensies standaard uit, maar wanneer deze wordt uitgevoerd met de optie «—R.BackEnd=llvm», zal bitscode worden gebruikt. De LLVM-backend kan selectief worden gebruikt voor bepaalde R-pakketten door «—R.BackEndLLVM=pkg1,pkg2» op te geven. In het geval van problemen bij de installatie van pakketten kan alles worden teruggedraaid door fastr.setToolchain(«native») aan te roepen of handmatig het bestand $FASTR_HOME/etc/Makeconf te bewerken; - In deze release wordt FastR geleverd zonder GCC-runtimebibliotheken;
- Geheugenlekken verholpen;
- Problemen bij het werken met grote vectors (>1GB) zijn opgelost;
- grepRaw is geïmplementeerd, maar alleen voor fixed=T.
Bron: opennet.ru
