GraalVM-virtuaalikoneen versio 19.3.0 ja siihen perustuvat Python-, JavaScript-, Ruby- ja R-toteutukset

Oracle Company julkaistu yleismaailmallisen virtuaalikoneen julkaisu GraalVM 19.3.0, joka tukee käynnissä olevia sovelluksia JavaScriptillä (Node.js), Pythonilla, Rubylla, R:llä, kaikilla JVM:n kielillä (Java, Scala, Clojure, Kotlin) ja kielillä, joille voidaan luoda LLVM-bittikoodi (C, C++). , ruoste). 19.3 haara on luokiteltu Long Term Support (LTS) -julkaisuksi ja huomattava tuki JDK 11, mukaan lukien kyky kääntää Java-koodia suoritettaviksi tiedostoiksi (GraalVM Native Image). Projektin koodi jakelija lisensoitu GPLv2:lla. Samalla julkaistiin uudet versiot Python-, JavaScript-, Ruby- ja R-kielitoteutuksista GraalVM:llä - GraalPython, GraalJS, TryffeliRuby и FastR.

GraalVM tarjoaa JIT-kääntäjä, joka voi suorittaa koodia mistä tahansa komentosarjakielestä lennossa JVM:ssä, mukaan lukien JavaScript, Ruby, Python ja R, ja mahdollistaa myös alkuperäisen koodin suorittamisen LLVM-bittikoodiksi muunnetussa JVM:ssä. GraalVM:n tarjoamia työkaluja ovat kieliriippumaton debuggeri, profilointijärjestelmä ja muistin varausanalysaattori. GraalVM mahdollistaa yhdistettyjen sovellusten luomisen erikielisillä komponenteilla, jolloin voit käyttää objekteja ja taulukoita muiden kielten koodista. JVM-pohjaisille kielille on olemassa tilaisuus luodaan konekoodiksi koottuja suoritettavia tiedostoja, jotka voidaan suorittaa suoraan minimaalisella muistinkulutuksella (muistin ja säikeen hallinta toteutetaan yhdistämällä puitteet Substraatti VM).

Muutoksia GraalJS:ssä:

  • Yhteensopivuus Node.js 12.10.0:n kanssa on taattu;
  • Standardista poikkeavat globaalit ominaisuudet ja toiminnot on oletuksena poistettu käytöstä:
    global (korvattu globalThis:llä, js.global-property palautettava), suorituskyky (js.performance), print ja printErr (js.print);

  • Toteutettu Promise.allSettled ja nollattu yhdistämisehdotus, jotka ovat saatavilla ECMAScript 2020 -tilassa ("-js.ecmascript-version=2020");
  • Päivitetty riippuvuudet ICU4J versioon 64.2, ASM versioon 7.1.

muutokset GraalPythonissa:

  • Lisätty tynkät gc.{enable,disable,isenabled}, toteutettu charmap_build, sys.hexversion ja _lzma;
  • Päivitetty Python 3.7.8 -standardikirjasto;
  • Lisätty tuki NumPy 1.16.4:lle ja Pandas 0.25.0:lle;
  • Lisätty timeit-tuki;
  • socket.socket on tuotu tilaan, jossa voit ajaa "graalpython -m http.server" ja ladata salaamattomia (ilman TLS:ää) http-resursseja;
  • Korjattu pandas.DataFrame-objektien näyttämiseen liittyvät ongelmat.
    virheellinen monikkojen käsittely bytes.startswith,
    iteraattorien rakenteen purkaminen ja sanakirjan dict.__contains__ käyttö sanakirjoissa;

  • Lisätty tuki tiedostolle ast.PyCF_ONLY_AST, joka sallittu varmista, että pytest toimii;
  • lisätty tukea PEP 498 (merkkijonojen interpolointi literaaleissa);
  • Toteutettu "--python.EmulateJython" -lippu tuodaksesi JVM-luokat normaalilla Python-tuontisyntaksilla ja nappataksesi JVM-poikkeukset Python-koodista;
  • Parannettu jäsentimen suorituskyky, poikkeusvälimuisti,
    Python-objektien käyttö JVM-koodista. Parannetut tulokset python-koodin ja natiivilaajennusten suorituskykytesteissä (natiivilaajennusten suorittaminen llvm:n päällä tarkoittaa, että bittikoodi llvm välitetään GraalVM:lle JIT-kääntämistä varten).

muutokset TruffleRubyssa:

  • Natiivilaajennusten kääntämiseen käytetään nyt sisäänrakennettua LLVM-työkalupakkia, joka luo sekä alkuperäistä koodia että bittikoodia. Tämä tarkoittaa, että enemmän natiivilaajennuksia pitäisi kääntää heti valmiiksi, mikä poistaa useimmat linkitysongelmat.
  • Erillinen LLVM-asennus natiivilaajennusten asentamista varten TruffleRubyssa;
  • C++-laajennusten asentaminen TruffleRubyyn ei enää vaadi libc++:n ja libc++abi:n asentamista;
  • Lisenssi päivitetty versioon EPL 2.0/GPL 2.0/LGPL 2.1, sama kuin äskettäin JRuby;
  • Lisätty tuki valinnaisille argumenteille GC.stat;
  • Toteutettu Kernel#load-metodi kääreellä ja Kernel#spawn komennolla :chdir;
  • Lisätty rb_str_drop_bytes, mikä on hienoa, koska OpenSSL käyttää sitä;
  • Mukana esiasennettujen jalokivien laajennukset, joita tarvitaan kiskoille, jotka ovat uusia Rails 6:ssa;
  • Natiivilaajennusten kokoamiseen käytetään lippuja, kuten MRI:ssä;
  • Suorituskykyä on optimoitu ja muistin kulutusta on vähennetty.

muutokset FastR:ssä:

  • Yhteensopivuus R 3.6.1:n kanssa varmistetaan;
  • Lisätty alustava tuki LLVM-pohjaisten natiivilaajennusten suorittamiselle. Kun rakennat alkuperäisiä R-paketteja, FastR konfiguroidaan käyttämään GraalVM:n sisäänrakennettua LLVM-työkalua. Tuloksena olevat binaaritiedostot sisältävät sekä alkuperäistä koodia että LLVM-bittikoodia.

    Myös esiasennetut paketit rakennetaan tällä tavalla.
    FastR lataa ja suorittaa oletusarvoisesti alkuperäisen laajennuskoodin, mutta kun se käynnistetään "--R.BackEnd=llvm"-vaihtoehdolla, käytetään bittikoodia. LLVM-taustaohjelmaa voidaan käyttää valikoivasti joillekin R-paketeille määrittämällä "--R.BackEndLLVM=pkg1,pkg2". Jos sinulla on ongelmia pakettien asentamisessa, voit palauttaa kaiken takaisin kutsumalla fastr.setToolchain("native") tai muokkaamalla manuaalisesti tiedostoa $FASTR_HOME/etc/Makeconf;

  • Tässä julkaisussa FastR toimitetaan ilman GCC:n ajonaikaisia ​​kirjastoja;
  • Korjattu muistivuotoja;
  • Korjattu ongelmat käytettäessä suuria vektoreita (>1 Gt);
  • Toteutettu grepRaw, mutta vain kiinteä=T.

Lähde: opennet.ru

Lisää kommentti