Oracle Corporation udgivelse af den universelle virtuelle maskine , som understøtter kørsel af applikationer i JavaScript (Node.js), Python, Ruby, R, på alle sprog til JVM (Java, Scala, Clojure, Kotlin) og sprog, som kan generere LLVM bitcode (C, C++, Rust). Version 19.3 er klassificeret som en langsigtet supportudgivelse (LTS) og for sin understøttelse af , herunder muligheden for at kompilere Java-kode til eksekverbare filer (GraalVM Native Image). Koden til projektet er under GPLv2 licens. Samtidig er der frigivet nye versioner af de sprogimplementeringer, der bruger GraalVM: Python, JavaScript, Ruby og R — , , og .
GraalVM JIT-kompilatoren, der kan udføre kode af ethvert scriptsprog i JVM on-the-fly, inklusive JavaScript, Ruby, Python og R, og tillader også kørsel af native kode i JVM, som er blevet konverteret til LLVM bitcode. Det værktøj, som GraalVM leverer, inkluderer sprog-uafhængige debugger-, profilerings- og hukommelsesanalysetools. GraalVM gør det muligt at skabe kombinerede applikationer med komponenter skrevet på forskellige sprog, hvilket muliggør adgang til objekter og arrays fra kode på andre sprog. For JVM-baserede sprog er der muligheder for at skabe executables kompileringer i maskinkode, som kan køres direkte med minimal hukommelsesforbrug (hukommelse og trådadministration er implementeret gennem integration af frameworket ).
:
- Understøttelse af Node.js 12.10.0 er sikret;
- Ikke-standard globale egenskaber og funktioner er som standard deaktiveret:
global (udskiftet med globalThis, der er en indstilling tilgængelig for at tilføje), performance (js.performance), print og printErr (js.print); - Implementeret Promise.allSettled og nullish coalescing proposal, der er tilgængelige i ECMAScript 2020 tilstand ("—js.ecmascript-version=2020");
- Afhængighederne ICU4J er opdateret til 64.2, ASM til 7.1.
i GraalPython:
- Tilføjet stubbe til gc.{enable,disable,isenabled}, implementeret charmap_build, sys.hexversion og _lzma;
- Standardbiblioteket for Python 3.7.8 er opdateret;
- Tilføjet støtte til NumPy 1.16.4 og Pandas 0.25.0;
- Tilføjet støtte til timeit;
- socket.socket er blevet opdateret til at tillade kørsel af "graalpython -m http.server" og hente ukrypterede (uden TLS) http-ressourcer;
- Problemer relateret til output af pandas.DataFrame-objekter er rettet,
og der er løst en forkert behandling af tuples i bytes.startswith.
destrukturerende tildeling af iterators og brug af dict.__contains__ for ordbøger; - Tilføjet støtte til ast.PyCF_ONLY_AST, som at sikre, at pytest fungerer;
- Tilføjet PEP 498 (streng interpolation i litteraler);
- flaget «—python.EmulateJython» til import af JVM-klasser ved hjælp af normal Python-syntax og fangst af JVM-undtagelser fra Python-kode;
- Forbedret parserens ydeevne, caching af undtagelser,
adgang til Python-objekter fra JVM-kode. Forbedret ydeevne i tests for Python-kode og native udvidelser (afvikling af native udvidelser oven på llvm indebærer, at llvm-bitkode sendes til GraalVM for JIT-kompilering).
i TruffleRuby:
- Til kompilering af native udvidelser anvendes nu det indbyggede LLVM-værktøj, som skaber både native kode og bitkode. Det betyder, at flere native udvidelser nu skal kunne kompilere out-of-the-box, hvilket løser de fleste issues relateret til linking;
- Separat installation af LLVM til installation af native udvidelser i TruffleRuby;
- For installation af C++ udvidelser i TruffleRuby er installation af libc++ og libc++abi nu ikke nødvendig;
- Licensen er opdateret til EPL 2.0/GPL 2.0/LGPL 2.1, ligesom i den seneste JRuby;
- Tilføjet støtte til valgfri argumenter i GC.stat;
- Implementeret metoden Kernel#load med wrapper og Kernel#spawn med :chdir;
- Tilføjet rb_str_drop_bytes, bemærkelsesværdigt fordi det bruges af OpenSSL;
- Inkluderet udvidelser af forudinstallerede gemme, der er nødvendige for rails new i Rails 6;
- Flags til kompilering af native udvidelser er aktiveret, som i MRI;
- Foretaget ydeevneoptimeringer og reduceret hukommelsesforbruget.
i FastR:
- Sikret kompatibilitet med R 3.6.1;
- Tilføjet foreløbig støtte til afvikling af native udvidelser baseret på LLVM. Ved opbygning af native R-pakker er FastR konfigureret til at bruge det integrerede GraalVM LLVM-værktøj. De resulterende binære filer vil indeholde både native kode og LLVM-bitkode.
Forudinstallerede pakker er også bygget på denne måde.
FastR indlæser og kører native kode fra udvidelser som standard, men når det køres med optionen «—R.BackEnd=llvm», anvendes bitkode. LLVM backend kan bruges selektivt for bestemte R-pakker ved at angive «—R.BackEndLLVM=pkg1,pkg2». I tilfælde af installationsproblemer kan alt gøres om ved at kalde fastr.setToolchain(«native») eller manuelt redigere filen $FASTR_HOME/etc/Makeconf; - I denne version leveres FastR uden GCC runtime-biblioteker;
- Lækager af hukommelse er blevet rettet;
- Problemer med arbejde med store vektorer (>1GB) er blevet rettet;
- grepRaw er implementeret, men kun for fixed=T.
Kilde: opennet.ru
