Izdanje 19.3.0 GraalVM virtualne mašine i realizacije Python, JavaScript, Ruby i R na njenoj osnovi

Tvrtka Oracle objavila izdanje univerzalne virtualne mašine GraalVM 19.3.0, koja podržava pokretanje aplikacija na JavaScriptu (Node.js), Pythonu, Rubyju, R-u, svim jezicima za JVM (Java, Scala, Clojure, Kotlin) i jezicima za koje se može generirati LLVM bit kod. Grana 19.3 klasificirana je kao izdanje s dugoročnom podrškom (LTS) i ističe se podršku JDK 11, uključujući mogućnost kompilacije Java koda u izvršne datoteke (GraalVM Native Image). Kod projekta distribuira se pod licencom GPLv2. Istovremeno su objavljene nove verzije implementacija jezika Python, JavaScript, Ruby i R koje koriste GraalVM — GraalPython, GraalJS, TruffleRuby i FastR.

GraalVM pruža JIT kompajler koji može u JVM-u izvršavati kod bilo kojih skriptnih jezika u stvarnom vremenu, uključujući JavaScript, Ruby, Python i R, a također omogućuje pokretanje nativnog koda u JVM-u, pretvorenog u LLVM bit kod. GraalVM alati uključuju neovisne od jezika debager, sustav profiliranja i analizator raspodjele memorije. GraalVM omogućuje stvaranje kombiniranih aplikacija s komponentama na različitim jezicima, omogućujući pristup objektima i nizovima iz koda na drugim jezicima. Za jezike temeljen na JVM-u postoji mogućnost stvaranje izvršnih datoteka kompiliranih u strojni kod koje se mogu izvoditi izravno s minimalnom potrošnjom memorije (upravljanje memorijom i niti je realizirano povezivanjem s okvirom Substrate VM).

Promjene u GraalJS:

  • Osigurana je kompatibilnost s Node.js 12.10.0;
  • Nepravilna globalna svojstva i funkcije su prema zadanim postavkama onemogućene:
    global (zamijenjeno s globalThis, za povratak postoji postavka js.global-property), performance (js.performance), print i printErr (js.print);
  • Implementirani su Promise.allSettled i nullish coalescing proposal, koji su dostupni u režimu ECMAScript 2020 („—js.ecmascript-version=2020“);
  • Ažurirane su ovisnosti ICU4J na 64.2, ASM na 7.1.

Promjene u GraalPythonu:

  • Dodani su stubovi gc.{enable,disable,isenabled}, implementirani charmap_build, sys.hexversion i _lzma;
  • Ažurirana je standardna biblioteka Python 3.7.8;
  • Dodana je podrška za NumPy 1.16.4 i Pandas 0.25.0;
  • Dodana je podrška za timeit;
  • socket.socket je doveden do stanja koje omogućuje pokretanje „graalpython -m http.server” i preuzimanje nešifriranih (bez TLS) http-ressursa;
  • Ispravljeni su problemi vezani uz ispis objekata pandas.DataFrame,
    neispravnim obradama tuplea u bytes.startswith,
    dekonstruiranim dodjelama iteratora i korištenjem dict.__contains__ za rječnike;
  • Dodana je podrška ast.PyCF_ONLY_AST, koja omogućava osigurati rad pytest;
  • Dodana podrška PEP 498 (interpolacija stringova u literalu);
  • Implementiran zastavica "--python.EmulateJython" za uvoz JVM-klasa koristeći standardnu Python sintaksu import i hvatanje JVM-izuzetaka iz Python koda;
  • Poboljšana izvedba parsera, keširanja izuzetaka,
    pristupa Python objektima iz JVM-koda. Poboljšani rezultati u testovima performansi za Python kod i nativne ekstenzije (izvršenje nativnih ekstenzija preko llvm podrazumijeva da se bitcode llvm prosljeđuje GraalVM za JIT-kompilaciju).

Promjene u TruffleRuby:

  • Za kompilaciju nativnih ekstenzija sada se koristi ugrađeni LLVM alat koji stvara i nativni kod i bitcode. To znači da bi se više nativnih ekstenzija trebalo moći kompilirati iz kutije, rješavajući većinu problema povezanih s povezivanjem;
  • Odvojena instalacija LLVM za instalaciju nativnih ekstenzija u TruffleRuby;
  • Za instalaciju C++ ekstenzija na TruffleRuby više nije potrebna instalacija libc++ i libc++abi;
  • Licenca je ažurirana na EPL 2.0/GPL 2.0/LGPL 2.1, kao i u nedavnom JRuby;
  • Dodana podrška za opcijske argumente u GC.stat;
  • Implementirana metoda Kernel#load s omotačem i Kernel#spawn s :chdir;
  • Dodana rb_str_drop_bytes, zanimljiva jer je koristi OpenSSL;
  • Uključene su ekstenzije unaprijed instaliranih gemova potrebne za rails new u Rails 6;
  • Za kompilaciju nativnih ekstenzija korištene su zastavice, kao u MRI;
  • Unesene su optimizacije performansi i smanjena potrošnja memorije.

Promjene u FastR:

  • Osigurana kompatibilnost s R 3.6.1;
  • Dodana preliminarna podrška za izvršavanje nativnih ekstenzija temeljenih na LLVM. Pri gradnji nativnih paketa R, FastR je konfiguriran za korištenje ugrađenog GraalVM LLVM alata. Rezultantni binarni fajlovi će sadržavati i nativni kod i LLVM-bitcode.

    Unaprijed instalirani paketi također su prikupljeni na ovaj način.
    FastR učitava i pokreće nativni kod ekstenzija prema zadanim postavkama, ali, kada se pokrene s opcijom "--R.BackEnd=llvm", koristiće se bitcode. LLVM back-end može se koristiti selektivno za neke R pakete, navodeći "--R.BackEndLLVM=pkg1,pkg2". U slučaju problema prilikom instalacije paketa, možete se vratiti unazad pozivajući fastr.setToolchain("native") ili ručno uređujući datoteku $FASTR_HOME/etc/Makeconf;

  • U ovoj verziji FastR dolazi bez GCC runtime biblioteka;
  • Ispravljene su memorijske curenja;
  • Ispravljeni su problemi prilikom rada s velikim vektorima (>>1GB);
  • Implemented grepRaw, but only for fixed=T.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster