Utgivelse 19.3.0 av den virtuelle GraalVM-maskinen og implementeringer av Python, JavaScript, Ruby og R basert på den

Oracle Company опубликовала utgivelse av en universell virtuell maskin GraalVM 19.3.0, som støtter kjøring av applikasjoner i JavaScript (Node.js), Python, Ruby, R, alle språk for JVM (Java, Scala, Clojure, Kotlin) og språk som LLVM-bitkode kan genereres for (C, C++ , Rust). 19.3-grenen er klassifisert som en Long Term Support (LTS)-utgivelse og bemerkelsesverdig Brukerstøtte JDK11, inkludert muligheten til å kompilere Java-kode til kjørbare filer (GraalVM Native Image). Prosjektkode distribuert av lisensiert under GPLv2. Samtidig ble nye versjoner av Python, JavaScript, Ruby og R språkimplementeringer ved bruk av GraalVM utgitt - GraalPython, GraalJS, TrøffelRuby и FastR.

GraalVM gir En JIT-kompilator som kan kjøre kode fra et hvilket som helst skriptspråk på farten i JVM, inkludert JavaScript, Ruby, Python og R, og som også gjør det mulig å kjøre innfødt kode i JVM konvertert til LLVM-bitkode. Verktøyene som leveres av GraalVM inkluderer en språkuavhengig debugger, et profileringssystem og en minneallokeringsanalysator. GraalVM gjør det mulig å lage kombinerte applikasjoner med komponenter på forskjellige språk, slik at du får tilgang til objekter og arrays fra kode på andre språk. For JVM-baserte språk er det mulighet lage kjørbare filer kompilert til maskinkode som kan kjøres direkte med minimalt minneforbruk (minne- og trådhåndtering implementeres gjennom å koble til rammeverket Substrat VM).

Endringer i GraalJS:

  • Kompatibilitet med Node.js 12.10.0 er sikret;
  • Ikke-standard globale egenskaper og funksjoner er deaktivert som standard:
    global (erstattet av globalThis, setter js.global-property til å returnere), ytelse (js.performance), print og printErr (js.print);

  • Implementert Promise.allSettled og ugyldig koalesceringsforslag, som er tilgjengelig i ECMAScript 2020-modus ("-js.ecmascript-version=2020");
  • Oppdaterte avhengigheter ICU4J til 64.2, ASM til 7.1.

endringer i GraalPython:

  • Lagt til stubber gc.{enable,disable,isenabled}, implementerte charmap_build, sys.hexversion og _lzma;
  • Oppdatert Python 3.7.8 standardbibliotek;
  • Lagt til støtte for NumPy 1.16.4 og Pandas 0.25.0;
  • Lagt til timeit-støtte;
  • socket.socket har blitt brakt til en tilstand som lar deg kjøre "graalpython -m http.server" og laste ukrypterte (uten TLS) http-ressurser;
  • Rettet problemer med visning av pandas.DataFrame-objekter.
    feil behandling av tupler i bytes.startswith,
    destructuring assignment of iterators and use of dict.__contains__ for ordbøker;

  • Lagt til støtte for ast.PyCF_ONLY_AST, som tillatt sikre at pytest fungerer;
  • La til støtte PEP 498 (strenginterpolasjon i bokstaver);
  • Implementert «--python.EmulateJython»-flagget for å importere JVM-klasser ved å bruke normal Python-importsyntaks og fange opp JVM-unntak fra Python-kode;
  • Forbedret parser-ytelse, unntaksbufring,
    tilgang til Python-objekter fra JVM-kode. Forbedrede resultater i ytelsestester for python-kode og native utvidelser (utførelse av native utvidelser på toppen av llvm innebærer at bitkode llvm sendes til GraalVM for JIT-kompilering).

endringer i TruffleRuby:

  • For å kompilere innfødte utvidelser, brukes nå det innebygde LLVM-verktøysettet, som lager både innebygd kode og bitkode. Dette betyr at flere native utvidelser bør kompileres ut av esken, og eliminerer de fleste koblingsproblemer;
  • Separat LLVM-installasjon for installasjon av native utvidelser i TruffleRuby;
  • Installering av C++-utvidelser på TruffleRuby krever ikke lenger installasjon av libc++ og libc++abi;
  • Lisens oppdatert til EPL 2.0/GPL 2.0/LGPL 2.1, samme som nylige JRuby;
  • Lagt til støtte for valgfrie argumenter til GC.stat;
  • Implementerte Kernel#load-metoden med en wrapper og Kernel#spawn med :chdir;
  • Lagt til rb_str_drop_bytes, noe som er flott fordi OpenSSL bruker det;
  • Inkludert utvidelser av forhåndsinstallerte edelstener som trengs for skinner nye i Rails 6;
  • For å kompilere native utvidelser brukes flagg, som i MR;
  • Ytelsesoptimaliseringer er gjort og minneforbruket er redusert.

endringer i FastR:

  • Kompatibilitet med R 3.6.1 er sikret;
  • Lagt til foreløpig støtte for å kjøre native utvidelser basert på LLVM. Når du bygger native R-pakker, er FastR konfigurert til å bruke GraalVMs innebygde LLVM-verktøy. De resulterende binære filene vil inneholde både opprinnelig kode og LLVM-bitkode.

    Forhåndsinstallerte pakker er også bygget på denne måten.
    FastR laster inn og kjører innebygd utvidelseskode som standard, men når den startes med alternativet "--R.BackEnd=llvm", vil bitkode bli brukt. LLVM-backend kan brukes selektivt for noen R-pakker ved å spesifisere "--R.BackEndLLVM=pkg1,pkg2". Hvis du har problemer med å installere pakker, kan du tilbakestille alt ved å ringe fastr.setToolchain("native") eller manuelt redigere $FASTR_HOME/etc/Makeconf-filen;

  • I denne utgivelsen leveres FastR uten GCC-kjøretidsbibliotekene;
  • Rettet minnelekkasjer;
  • Rettet problemer ved arbeid med store vektorer (>1 GB);
  • Implementert grepRaw, men bare for fixed=T.

Kilde: opennet.ru

Legg til en kommentar