Release 19.3.0 af den virtuelle GraalVM-maskine og implementeringer af Python, JavaScript, Ruby og R baseret på den

Oracle Company опубликовала frigivelse af en universel virtuel maskine GraalVM 19.3.0, som understøtter kørsel af applikationer i JavaScript (Node.js), Python, Ruby, R, alle sprog til JVM (Java, Scala, Clojure, Kotlin) og sprog, som LLVM-bitkode kan genereres til (C, C++) , Rust). 19.3-grenen er klassificeret som en Long Term Support (LTS)-udgivelse og bemærkelsesværdig support JDK 11, herunder evnen til at kompilere Java-kode til eksekverbare filer (GraalVM Native Image). Projektkode distribueret af licenseret under GPLv2. Samtidig blev nye versioner af Python, JavaScript, Ruby og R sprogimplementeringer ved hjælp af GraalVM frigivet - GraalPython, GraalJS, TrøffelRuby и FastR.

GraalVM giver En JIT-compiler, der kan udføre kode fra ethvert scriptsprog i farten i JVM, inklusive JavaScript, Ruby, Python og R, og som også gør det muligt at køre native kode i JVM'et konverteret til LLVM bitcode. Værktøjerne leveret af GraalVM inkluderer en sproguafhængig debugger, et profileringssystem og en hukommelsesallokeringsanalysator. GraalVM gør det muligt at skabe kombinerede applikationer med komponenter på forskellige sprog, så du kan få adgang til objekter og arrays fra kode på andre sprog. For JVM-baserede sprog er der lejlighed oprettelse af eksekverbare filer kompileret i maskinkode, der kan udføres direkte med minimalt hukommelsesforbrug (hukommelse og trådhåndtering implementeres ved at forbinde rammen Substrat VM).

Ændringer i GraalJS:

  • Kompatibilitet med Node.js 12.10.0 er sikret;
  • Ikke-standardiserede globale egenskaber og funktioner er deaktiveret som standard:
    global (erstattet af globalThis, indstiller js.global-property til at returnere), ydeevne (js.performance), print og printErr (js.print);

  • Implementeret Promise.allSettled og nullish koalesceringsforslag, som er tilgængelige i ECMAScript 2020-tilstand ("-js.ecmascript-version=2020");
  • Opdaterede afhængigheder ICU4J til 64.2, ASM til 7.1.

ændringer i GraalPython:

  • Tilføjet stubs gc.{enable,disable,isenabled}, implementeret charmap_build, sys.hexversion og _lzma;
  • Opdateret Python 3.7.8 standardbibliotek;
  • Tilføjet understøttelse af NumPy 1.16.4 og Pandas 0.25.0;
  • Tilføjet timeit support;
  • socket.socket er blevet bragt til en tilstand, der tillader dig at køre "graalpython -m http.server" og indlæse ukrypterede (uden TLS) http-ressourcer;
  • Rettede problemer med at vise pandas.DataFrame-objekter.
    forkert behandling af tupler i bytes.startswith,
    destrukturering tildeling af iteratorer og brug af dict.__contains__ til ordbøger;

  • Tilføjet understøttelse af ast.PyCF_ONLY_AST, som tilladt sikre, at pytest virker;
  • Tilføjet støtte PEP 498 (strenginterpolation i bogstaver);
  • Implementeret flaget "--python.EmulateJython" for at importere JVM-klasser ved hjælp af normal Python-importsyntaks og fange JVM-undtagelser fra Python-kode;
  • Forbedret parser-ydeevne, undtagelsescache,
    adgang til Python-objekter fra JVM-kode. Forbedrede resultater i ydeevnetest for python-kode og native udvidelser (udførelse af native udvidelser oven på llvm indebærer, at bitcode llvm videregives til GraalVM til JIT-kompilering).

ændringer i TruffleRuby:

  • Til at kompilere native udvidelser bruges det indbyggede LLVM-værktøjssæt nu, der skaber både native-kode og bitcode. Dette betyder, at flere indbyggede udvidelser bør kompileres ud af boksen, hvilket eliminerer de fleste sammenkædningsproblemer;
  • Separat LLVM-installation til installation af indbyggede udvidelser i TruffleRuby;
  • Installation af C++-udvidelser på TruffleRuby kræver ikke længere installation af libc++ og libc++abi;
  • Licens opdateret til EPL 2.0/GPL 2.0/LGPL 2.1, samme som nylige JRuby;
  • Tilføjet understøttelse af valgfri argumenter til GC.stat;
  • Implementerede Kernel#load metoden med en wrapper og Kernel#spawn med :chdir;
  • Tilføjet rb_str_drop_bytes, hvilket er fantastisk, fordi OpenSSL bruger det;
  • Inkluderet udvidelser af forudinstallerede ædelstene, der er nødvendige for skinner nye i Rails 6;
  • For at kompilere native udvidelser bruges flag, som i MRI;
  • Der er foretaget ydelsesoptimeringer og hukommelsesforbruget er reduceret.

ændringer i FastR:

  • Kompatibilitet med R 3.6.1 er sikret;
  • Tilføjet foreløbig support til at køre indbyggede udvidelser baseret på LLVM. Når der bygges native R-pakker, er FastR konfigureret til at bruge GraalVMs indbyggede LLVM-værktøj. De resulterende binære filer vil indeholde både native kode og LLVM bitcode.

    Forudinstallerede pakker er også bygget på denne måde.
    FastR indlæser og kører indbygget udvidelseskode som standard, men når den startes med "--R.BackEnd=llvm", vil bitcode blive brugt. LLVM-backend kan bruges selektivt til nogle R-pakker ved at angive "--R.BackEndLLVM=pkg1,pkg2". Hvis du har problemer med at installere pakker, kan du vende alt tilbage ved at kalde fastr.setToolchain("native") eller manuelt redigere filen $FASTR_HOME/etc/Makeconf;

  • I denne udgivelse leveres FastR uden GCC-runtime-bibliotekerne;
  • Rettet hukommelseslækager;
  • Rettede problemer ved arbejde med store vektorer (>1 GB);
  • Implementeret grepRaw, men kun for fixed=T.

Kilde: opennet.ru

Tilføj en kommentar