Izdanje 19.3.0 GraalVM virtuelne mašine i implementacije Python, JavaScript, Ruby i R zasnovane na njoj

Kompanija Oracle objavljeno izdanje univerzalne virtuelne mašine GraalVM 19.3.0, koji podržava pokretanje aplikacija u JavaScriptu (Node.js), Python, Ruby, R, bilo kojim jezicima za JVM (Java, Scala, Clojure, Kotlin) i jezicima za koje se može generirati LLVM bitcode (C, C++ , Rust). Grana 19.3 je klasifikovana kao izdanje za dugoročnu podršku (LTS). izvanredan podrška JDK11, uključujući mogućnost kompajliranja Java koda u izvršne datoteke (GraalVM Native Image). Šifra projekta distribuira licenciran pod GPLv2. Istovremeno, objavljene su nove verzije implementacija jezika Python, JavaScript, Ruby i R koristeći GraalVM - GraalPython, GraalJS, TruffleRuby и FastR.

GraalVM pruža JIT kompajler koji može u hodu izvršiti kod iz bilo kojeg skriptnog jezika u JVM-u, uključujući JavaScript, Ruby, Python i R, a također omogućava pokretanje izvornog koda u JVM-u konvertovanog u LLVM bitcode. Alati koje pruža GraalVM uključuju program za otklanjanje grešaka koji je nezavisan od jezika, sistem profilisanja i analizator alokacije memorije. GraalVM omogućava kreiranje kombinovanih aplikacija sa komponentama na različitim jezicima, omogućavajući vam da pristupite objektima i nizovima iz koda na drugim jezicima. Za jezike zasnovane na JVM postoji prilika kreiranje izvršnih datoteka kompajliranih u mašinski kod koji se može izvršiti direktno uz minimalnu potrošnju memorije (upravljanje memorijom i nitima se implementira kroz povezivanje okvira Supstrat VM).

Promjene u GraalJS-u:

  • Kompatibilnost sa Node.js 12.10.0 je osigurana;
  • Nestandardna globalna svojstva i funkcije su onemogućene prema zadanim postavkama:
    global (zamijenjen globalThis, postavljanje js.global-property za povratak), performanse (js.performance), print i printErr (js.print);

  • Implementirani Promise.allSettled i nullish prijedlog spajanja, koji su dostupni u ECMAScript 2020 modu (“-js.ecmascript-version=2020”);
  • Ažurirane zavisnosti ICU4J na 64.2, ASM na 7.1.

Promjene u GraalPython-u:

  • Dodani stubovi gc.{enable,disable,isenabled}, implementirani charmap_build, sys.hexversion i _lzma;
  • Ažurirana standardna biblioteka Python 3.7.8;
  • Dodata podrška za NumPy 1.16.4 i Pandas 0.25.0;
  • Dodata podrška za timeit;
  • socket.socket je doveden u stanje koje vam omogućava da pokrenete “graalpython -m http.server” i učitate nešifrovane (bez TLS) http resurse;
  • Riješeni problemi s prikazivanjem objekata pandas.DataFrame.
    pogrešna obrada tuple u bytes.startswith,
    destrukturiranje dodjele iteratora i korištenje dict.__contains__ za rječnike;

  • Dodata podrška za ast.PyCF_ONLY_AST, što dozvoljeno osigurati da pytest radi;
  • Dodano podrška PEP 498 (interpolacija niza u literalima);
  • Implementirano oznaku “--python.EmulateJython” za uvoz JVM klasa koristeći normalnu Python sintaksu za uvoz i hvatanje JVM izuzetaka iz Python koda;
  • Poboljšane performanse parsera, keširanje izuzetaka,
    pristupanje Python objektima iz JVM koda. Poboljšani rezultati u testovima performansi za Python kod i izvorne ekstenzije (izvršavanje izvornih ekstenzija na vrhu llvm-a implicira da se bitcode llvm prosljeđuje GraalVM-u za JIT kompilaciju).

Promjene u TruffleRuby:

  • Za kompajliranje izvornih ekstenzija sada se koristi ugrađeni LLVM alat koji kreira i izvorni i bitni kod. To znači da bi više izvornih ekstenzija trebalo kompajlirati iz kutije, eliminirajući većinu problema s povezivanjem;
  • Odvojena LLVM instalacija za instaliranje izvornih ekstenzija u TruffleRuby;
  • Instaliranje C++ ekstenzija na TruffleRuby više ne zahtijeva instaliranje libc++ i libc++abi;
  • Licenca ažurirana na EPL 2.0/GPL 2.0/LGPL 2.1, isto kao i nedavni JRuby;
  • Dodata podrška za opcione argumente u GC.stat;
  • Implementirao metodu Kernel#load sa omotačem i Kernel#spawn sa :chdir;
  • Dodano rb_str_drop_bytes, što je odlično jer ga OpenSSL koristi;
  • Uključena proširenja unaprijed instaliranih dragulja potrebnih za nove šine u Rails 6;
  • Za kompajliranje izvornih ekstenzija, koriste se zastavice, kao u MRI;
  • Napravljene su optimizacije performansi i smanjena je potrošnja memorije.

Promjene u FastR-u:

  • Osigurana je kompatibilnost sa R ​​3.6.1;
  • Dodata preliminarna podrška za pokretanje izvornih ekstenzija zasnovanih na LLVM-u. Prilikom izrade izvornih R paketa, FastR je konfigurisan da koristi ugrađeni LLVM alat u GraalVM-u. Rezultirajuće binarne datoteke će sadržavati i izvorni kod i LLVM bitni kod.

    Unaprijed instalirani paketi su također napravljeni na ovaj način.
    FastR učitava i pokreće izvorni kod ekstenzije prema zadanim postavkama, ali kada se pokrene s opcijom "--R.BackEnd=llvm", bit će korišten kod. LLVM pozadina se može koristiti selektivno za neke R pakete navođenjem "--R.BackEndLLVM=pkg1,pkg2". Ako imate problema sa instalacijom paketa, možete vratiti sve nazad tako što ćete pozvati fastr.setToolchain("native") ili ručno urediti datoteku $FASTR_HOME/etc/Makeconf;

  • U ovom izdanju, FastR se isporučuje bez GCC runtime biblioteka;
  • Popravljeno curenje memorije;
  • Rešeni problemi pri radu sa velikim vektorima (>1GB);
  • Implementiran grepRaw, ali samo za fixed=T.

izvor: opennet.ru

Dodajte komentar