Udgivelsen af version 19.3.0 af GraalVM virtuel maskine og implementeringer af Python, JavaScript, Ruby og R baseret på den.

Oracle Corporation offentliggjorde udgivelse af den universelle virtuelle maskine GraalVM 19.3.0, 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 er bemærkelsesværdig for sin understøttelse af JDK 11, herunder muligheden for at kompilere Java-kode til eksekverbare filer (GraalVM Native Image). Koden til projektet distribueres er under GPLv2 licens. Samtidig er der frigivet nye versioner af de sprogimplementeringer, der bruger GraalVM: Python, JavaScript, Ruby og R — GraalPython, GraalJS, TruffleRuby og FastR.

GraalVM tilbyder 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 mulighed 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 Substrate VM).

Ændringer i GraalJS:

  • 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.

Ændringer 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 muliggjorde at sikre, at pytest fungerer;
  • Tilføjet understøttelse af PEP 498 (streng interpolation i litteraler);
  • Implementeret 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).

Ændringer 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.

Ændringer 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

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster