Izdaja 19.3.0 virtualne mašine GraalVM in implementacij Python, JavaScript, Ruby in R na njej

Tvrtka Oracle je objavilo izdaja univerzalne virtualne mašine GraalVM 19.3.0, ki podpira zagon aplikacij v JavaScript (Node.js), Python, Ruby, R, ter v vseh jezikih za JVM (Java, Scala, Clojure, Kotlin) in jezikih, za katere je mogoče generirati bitcode LLVM (C, C++, Rust). Večja 19.3 je razvrščena med izdaje z dolgoročnim podporo (LTS) in se ističe podpora JDK 11, vključno z možnostjo kompilacije Java kode v izvršljive datoteke (GraalVM Native Image). Koda projekta se distribuira pod licenco GPLv2. Hkrati so izdane nove različice implementacij jezikov Python, JavaScript, Ruby in R, ki uporabljajo GraalVM — GraalPython, GraalJS, TruffleRuby in FastR.

GraalVM zaščito pred DDoS napadi. JIT kompiler, ki lahko na hitro izvršuje v JVM kodo kateri koli skriptni jezik, vključno z JavaScript, Ruby, Python in R, ter omogoča zagon nativne kode v JVM, pretvorjene v bitcode LLVM. Orodja, ki jih nudi GraalVM, vključujejo jezikovno neodvisen debugger, sistem profiliranja in analize porabe pomnilnika. GraalVM omogoča ustvarjanje kombiniranih aplikacij s komponentami v različnih jezikih, kar omogoča dostop do objektov in tabel iz kode v drugih jezikih. Za jezike, osnovane na JVM, je na voljo možnost generiranje izvršnih datotek, skompiliranih v strojno kodo, ki se lahko izvajajo neposredno z minimalno porabo pomnilnika (upravljanje pomnilnika in nitmi je realizirano preko vključitve okvira Substrate VM).

Spremembe v GraalJS:

  • Zagotovljena je združljivost z Node.js 12.10.0;
  • Privzeto so onemogočene nestandardne globalne lastnosti in funkcije:
    global (zamenjano z globalThis, za vrnitev je predvidena nastavitev js.global-property), performance (js.performance), print in printErr (js.print);
  • Implementirani sta bili Promise.allSettled in nullish coalescing proposal, ki sta dostopni v načinu ECMAScript 2020 («—js.ecmascript-version=2020»);
  • Posodobljene so odvisnosti ICU4J do 64.2, ASM do 7.1.

Wijzigingen v GraalPython:

  • Dodane so bile napovedi gc.{enable,disable,isenabled}, implementirani 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 posodobljen do stanja, ki omogoča zagon «graalpython -m http.server» in nalaganje nešifriranih (brez TLS) http virov;
  • Rešene so težave, povezane z izpisom objektov pandas.DataFrame,
    nepravilna obdelava tuples v bytes.startswith,
    s pomočjo destrukturirajoče dodelitve iteratorjev in uporabe dict.__contains__ za slovarje;
  • Dodana je podpora za ast.PyCF_ONLY_AST, kar omogoča delovanje pytest;
  • Dodana podpora PEP 498 (interpolaacija nizov v literale);
  • Izvedeno nastavitev „—python.EmulateJython“ za uvoz JVM razredov s klasično Python sintakso import in zajemanje JVM napak iz Python kode;
  • Izboljšana je učinkovitost parserja, predpomnjenje napak,
    dostop do Python objektov iz JVM kode. Izboljšani so bili rezultati pri testih uspešnosti za Python kodo in nativne razširitve (izvrševanje nativnih razširitev na vrhu llvm pomeni, da se bitni koda llvm posreduje GraalVM za JIT prevajanje).

Wijzigingen v TruffleRuby:

  • Pri prevajanju nativnih razširitev se zdaj uporablja vgrajeno orodje LLVM, ki ustvarja tako nativno kodo kot bitni kodo. To pomeni, da bi moralo več nativnih razširitev delovati brez težav, kar omogoča rešitev večine težav pri povezovanju;
  • Ločena namestitev LLVM za namestitev nativnih razširitev v TruffleRuby;
  • Za namestitev C++ razširitev na TruffleRuby ni več potrebna namestitev libc++ in libc++abi;
  • Licenca je posodobljena na EPL 2.0/GPL 2.0/LGPL 2.1, kot pri nedavnem JRuby;
  • Dodana je podpora za opcijske argumente v GC.stat;
  • Uvedena je metoda Kernel#load z ovitkom in Kernel#spawn z :chdir;
  • Dodana je rb_str_drop_bytes, ki je zanimiva, ker jo uporablja OpenSSL;
  • Dodane so razširitve prednameščenih gem-ov, potrebne za rails new v Rails 6;
  • Za prevajanje nativnih razširitev se uporabljajo zastavice, kot v MRI;
  • Vnesene so optimizacije zmogljivosti in zmanjšana poraba pomnilnika.

Wijzigingen v FastR:

  • Zagotovljena je združljivost z R 3.6.1;
  • Dodana je osnovna podpora za izvajanje nativnih razširitev, ki temeljijo na LLVM. Pri gradnji nativnih paketov R je FastR konfiguriran za uporabo vgrajenega orodja GraalVM LLVM. Rezultantni binarni datoteki bosta vsebovala tako nativno kodo kot LLVM bitni kodo.

    Prednameščeni paketi so prav tako zgrajeni na ta način.
    FastR privzeto nalaga in izvaja nativno kodo razširitev, toda, ko je zagnan z možnostjo „—R.BackEnd=llvm“, se bo uporabljala bitna koda. LLVM back-end lahko uporabite selektivno za nekatere R pakete, tako da navedete „—R.BackEndLLVM=pkg1,pkg2“. V primeru težav pri namestitvi paketov lahko vse povrnete nazaj s klicem fastr.setToolchain(„native“) ali ročno urejanje datoteke $FASTR_HOME/etc/Makeconf;

  • Ta različica FastR se dobavlja brez knjižnic GCC runtime;
  • Popravljene so bile puščanje pomnilnika;
  • Popravljene so bile težave pri obdelavi velikih vektorjev (>1GB);
  • Implementiran je grepRaw, a samo za fixed=T.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster