Release 19.3.0 van de virtuele GraalVM-machine en implementaties van Python, JavaScript, Ruby en R die daarop zijn gebaseerd

Oracle-bedrijf опубликовала release van een universele virtuele machine GraalVM 19.3.0, dat actieve applicaties ondersteunt in JavaScript (Node.js), Python, Ruby, R, alle talen voor de JVM (Java, Scala, Clojure, Kotlin) en talen waarvoor LLVM-bitcode kan worden gegenereerd (C, C++ , Roest). De 19.3-tak is geclassificeerd als een Long Term Support (LTS)-release en opmerkelijk steun JDK 11, inclusief de mogelijkheid om Java-code te compileren in uitvoerbare bestanden (GraalVM Native Image). Projectcode gedistribueerd door gelicentieerd onder GPLv2. Tegelijkertijd werden nieuwe versies van Python-, JavaScript-, Ruby- en R-taalimplementaties met behulp van GraalVM uitgebracht - GraalPython, GraalJS, Truffel Ruby и SnelR.

GraalVM biedt Een JIT-compiler die code vanuit elke scripttaal direct in de JVM kan uitvoeren, inclusief JavaScript, Ruby, Python en R, en het ook mogelijk maakt om native code in de JVM uit te voeren, geconverteerd naar LLVM-bitcode. De tools van GraalVM omvatten een taalonafhankelijke debugger, een profileringssysteem en een geheugentoewijzingsanalysator. GraalVM maakt het mogelijk om gecombineerde applicaties te creëren met componenten in verschillende talen, waardoor u toegang krijgt tot objecten en arrays vanuit code in andere talen. Voor op JVM gebaseerde talen is er wel kans het creëren van uitvoerbare bestanden die zijn gecompileerd in machinecode die direct kunnen worden uitgevoerd met minimaal geheugengebruik (geheugen- en threadbeheer wordt geïmplementeerd door het verbinden van het raamwerk Substraat-VM).

Veranderingen in GraalJS:

  • Compatibiliteit met Node.js 12.10.0 is verzekerd;
  • Niet-standaard globale eigenschappen en functies zijn standaard uitgeschakeld:
    global (vervangen door globalThis, waarbij js.global-property wordt ingesteld op retourneren), prestaties (js.performance), print en printErr (js.print);

  • Promise.allSettled en nullish coalescing-voorstel geïmplementeerd, die beschikbaar zijn in de ECMAScript 2020-modus (“-js.ecmascript-version=2020”);
  • Afhankelijkheden ICU4J bijgewerkt naar 64.2, ASM naar 7.1.

Veranderingen in GraalPython:

  • Stubs gc.{enable,disable,isenabled} toegevoegd, charmap_build, sys.hexversion en _lzma geïmplementeerd;
  • Bijgewerkte Python 3.7.8 standaardbibliotheek;
  • Ondersteuning toegevoegd voor NumPy 1.16.4 en Pandas 0.25.0;
  • Timeit-ondersteuning toegevoegd;
  • socket.socket is in een staat gebracht waarin u “graalpython -m http.server” kunt uitvoeren en niet-versleutelde (zonder TLS) http-bronnen kunt laden;
  • Problemen opgelost met het weergeven van pandas.DataFrame-objecten.
    onjuiste verwerking van tupels in bytes.startswith,
    destructurerende toewijzing van iteratoren en gebruik van dict.__contains__ voor woordenboeken;

  • Ondersteuning toegevoegd voor ast.PyCF_ONLY_AST, welke toegestaan ervoor zorgen dat pytest werkt;
  • Toegevoegd ondersteunen PEP 498 (stringinterpolatie in letterlijke getallen);
  • Geïmplementeerd de vlag “--python.EmulateJython” om JVM-klassen te importeren met behulp van de normale Python-importsyntaxis en om JVM-uitzonderingen uit Python-code op te vangen;
  • Verbeterde parserprestaties, caching van uitzonderingen,
    toegang krijgen tot Python-objecten vanuit JVM-code. Verbeterde resultaten in prestatietests voor Python-code en native extensies (het uitvoeren van native extensies bovenop llvm impliceert dat bitcode llvm wordt doorgegeven aan GraalVM voor JIT-compilatie).

Veranderingen in TruffelRuby:

  • Om native extensies te compileren, wordt nu de ingebouwde LLVM-toolkit gebruikt, waarmee zowel native code als bitcode wordt gemaakt. Dit betekent dat meer native extensies kant-en-klaar moeten worden gecompileerd, waardoor de meeste koppelingsproblemen worden geëlimineerd;
  • Afzonderlijke LLVM-installatie voor het installeren van native extensies in TruffleRuby;
  • Voor het installeren van C++-extensies op TruffleRuby is het niet langer nodig om libc++ en libc++abi te installeren;
  • Licentie bijgewerkt naar EPL 2.0/GPL 2.0/LGPL 2.1, hetzelfde als recente JRuby;
  • Ondersteuning toegevoegd voor optionele argumenten aan GC.stat;
  • Implementeerde de Kernel#load-methode met een wrapper en Kernel#spawn met :chdir;
  • Er is rb_str_drop_bytes toegevoegd, wat geweldig is omdat OpenSSL het gebruikt;
  • Inclusief uitbreidingen van vooraf geïnstalleerde edelstenen die nodig zijn voor nieuwe rails in Rails 6;
  • Om native extensies te compileren, worden vlaggen gebruikt, zoals bij MRI;
  • Er zijn prestatie-optimalisaties doorgevoerd en het geheugengebruik is verminderd.

Veranderingen in FastR:

  • Compatibiliteit met R 3.6.1 is verzekerd;
  • Voorlopige ondersteuning toegevoegd voor het uitvoeren van native extensies op basis van LLVM. Bij het bouwen van native R-pakketten wordt FastR geconfigureerd om de ingebouwde LLVM-tooling van GraalVM te gebruiken. De resulterende binaire bestanden bevatten zowel native code als LLVM-bitcode.

    Vooraf geïnstalleerde pakketten worden ook op deze manier gebouwd.
    FastR laadt en voert standaard de eigen extensiecode uit, maar wanneer het wordt gestart met de optie "--R.BackEnd=llvm", wordt bitcode gebruikt. De LLVM-backend kan selectief worden gebruikt voor sommige R-pakketten door "--R.BackEndLLVM=pkg1,pkg2" op te geven. Als u problemen ondervindt bij het installeren van pakketten, kunt u alles terugdraaien door fastr.setToolchain("native") aan te roepen of door het bestand $FASTR_HOME/etc/Makeconf handmatig te bewerken;

  • In deze release wordt FastR geleverd zonder de GCC-runtimebibliotheken;
  • Vaste geheugenlekken;
  • Problemen opgelost bij het werken met grote vectoren (>1GB);
  • GrepRaw geïmplementeerd, maar alleen voor fixed=T.

Bron: opennet.ru

Voeg een reactie