Izdaja 19.3.0 virtualnega stroja GraalVM in implementacije Pythona, JavaScripta, Rubyja in R, ki temeljijo na njem

Podjetje Oracle objavljeno izdaja univerzalnega virtualnega stroja GraalVM 19.3.0, ki podpira izvajanje aplikacij v JavaScript (Node.js), Python, Ruby, R, poljubnih jezikih za JVM (Java, Scala, Clojure, Kotlin) in jezikih, za katere je mogoče ustvariti bitno kodo LLVM (C, C++ , Rja). Veja 19.3 je razvrščena kot izdaja dolgoročne podpore (LTS) in izjemen podporo JDK11, vključno z možnostjo prevajanja javanske kode v izvedljive datoteke (GraalVM Native Image). Koda projekta distributer licenciran pod GPLv2. Istočasno so bile izdane nove različice jezikovnih implementacij Python, JavaScript, Ruby in R, ki uporabljajo GraalVM - GraalPython, GraalJS, TruffleRuby и FastR.

GraalVM zagotavlja Prevajalnik JIT, ki lahko sproti izvaja kodo iz katerega koli skriptnega jezika v JVM, vključno z JavaScript, Ruby, Python in R, in omogoča tudi izvajanje izvorne kode v JVM, pretvorjene v bitno kodo LLVM. Orodja, ki jih ponuja GraalVM, vključujejo od jezika neodvisen razhroščevalnik, sistem za profiliranje in analizator dodeljevanja pomnilnika. GraalVM omogoča ustvarjanje kombiniranih aplikacij s komponentami v različnih jezikih, kar vam omogoča dostop do predmetov in nizov iz kode v drugih jezikih. Za jezike, ki temeljijo na JVM, obstaja priložnost ustvarjanje izvršljivih datotek, prevedenih v strojno kodo, ki se lahko izvajajo neposredno z minimalno porabo pomnilnika (upravljanje pomnilnika in niti je implementirano s povezovanjem ogrodja Substrat VM).

Spremembe v GraalJS:

  • Zagotovljena je združljivost z Node.js 12.10.0;
  • Nestandardne globalne lastnosti in funkcije so privzeto onemogočene:
    global (nadomeščen z globalThis, nastavitev js.global-property za vrnitev), zmogljivost (js.performance), print in printErr (js.print);

  • Implementiran predlog združevanja Promise.allSettled in nullish, ki sta na voljo v načinu ECMAScript 2020 (»-js.ecmascript-version=2020«);
  • Posodobljene odvisnosti ICU4J na 64.2, ASM na 7.1.

Spremembe v GraalPython:

  • Dodane škrbine gc.{enable,disable,isenabled}, implementirane charmap_build, sys.hexversion in _lzma;
  • Posodobljena standardna knjižnica Python 3.7.8;
  • Dodana podpora za NumPy 1.16.4 in Pandas 0.25.0;
  • Dodana podpora za timeit;
  • socket.socket je bil preveden v stanje, ki vam omogoča zagon »graalpython -m http.server« in nalaganje nešifriranih (brez TLS) virov http;
  • Odpravljene težave s prikazovanjem objektov pandas.DataFrame.
    nepravilna obdelava tuples v bytes.startswith,
    destrukturiranje dodeljevanja iteratorjev in uporaba dict.__contains__ za slovarje;

  • Dodana podpora za ast.PyCF_ONLY_AST, ki dovoljeno zagotoviti, da pytest deluje;
  • Dodano podporo PEP 498 (interpolacija nizov v literalih);
  • Izvedeno zastavica “--python.EmulateJython” za uvoz razredov JVM z uporabo običajne sintakse uvoza Python in lovljenje izjem JVM iz kode Python;
  • Izboljšana zmogljivost razčlenjevalnika, predpomnjenje izjem,
    dostop do predmetov Python iz kode JVM. Izboljšani rezultati pri preizkusih zmogljivosti za kodo python in izvorne razširitve (izvajanje izvornih razširitev na vrhu llvm pomeni, da se bitna koda llvm posreduje GraalVM za prevajanje JIT).

Spremembe v TruffleRuby:

  • Za prevajanje izvornih razširitev se zdaj uporablja vgrajen komplet orodij LLVM, ki ustvarja izvorno kodo in bitno kodo. To pomeni, da bi moralo biti več izvornih razširitev prevedenih takoj, kar bi odpravilo večino težav s povezovanjem;
  • Ločena namestitev LLVM za namestitev izvornih razširitev v TruffleRuby;
  • Namestitev razširitev C++ na TruffleRuby ne zahteva več namestitve libc++ in libc++abi;
  • Licenca posodobljena na EPL 2.0/GPL 2.0/LGPL 2.1, enako kot nedavni JRuby;
  • Dodana podpora za neobvezne argumente v GC.stat;
  • Izvedena metoda Kernel#load z ovojom in Kernel#spawn z :chdir;
  • Dodan rb_str_drop_bytes, kar je super, ker ga uporablja OpenSSL;
  • Vključene razširitve vnaprej nameščenih draguljev, potrebnih za tirnice, nove v Rails 6;
  • Za prevajanje izvornih razširitev se uporabljajo zastavice, kot pri MRI;
  • Izvedene so bile optimizacije delovanja in zmanjšana poraba pomnilnika.

Spremembe v FastR:

  • Združljivost z R 3.6.1 je zagotovljena;
  • Dodana predhodna podpora za izvajanje izvornih razširitev, ki temeljijo na LLVM. Pri gradnji izvirnih paketov R je FastR konfiguriran za uporabo vgrajenega orodja LLVM GraalVM. Nastale binarne datoteke bodo vsebovale izvorno kodo in bitno kodo LLVM.

    Na ta način so zgrajeni tudi vnaprej nameščeni paketi.
    FastR privzeto naloži in zažene izvorno razširitveno kodo, vendar bo ob zagonu z možnostjo »--R.BackEnd=llvm« uporabljena bitna koda. Zaledje LLVM je mogoče uporabiti selektivno za nekatere pakete R tako, da podate "--R.BackEndLLVM=pkg1,pkg2". Če imate težave z nameščanjem paketov, lahko vse povrnete nazaj tako, da pokličete fastr.setToolchain("native") ali ročno uredite datoteko $FASTR_HOME/etc/Makeconf;

  • V tej izdaji je FastR dobavljen brez izvajalnih knjižnic GCC;
  • Odpravljeno puščanje pomnilnika;
  • Odpravljene težave pri delu z velikimi vektorji (>1GB);
  • Implementiran grepRaw, vendar samo za fixed=T.

Vir: opennet.ru

Dodaj komentar