Il rilascio 19.3.0 della macchina virtuale GraalVM e delle implementazioni di Python, JavaScript, Ruby e R basate su di essa

Azienda Oracle ha pubblicato rilascio della macchina virtuale universale GraalVM 19.3.0, che supporta l'esecuzione di applicazioni in JavaScript (Node.js), Python, Ruby, R, in qualsiasi linguaggio per JVM (Java, Scala, Clojure, Kotlin) e nei linguaggi per i quali può essere generato il bitcode LLVM (C, C++, Rust). La versione 19.3 è classificata come rilasci con supporto a lungo termine (LTS) e è notevole il supporto per JDK 11, inclusa la possibilità di compilare codice Java in file eseguibili (GraalVM Native Image). Il codice del progetto è distribuito è sotto licenza GPLv2. Sono state rilasciate anche nuove versioni delle implementazioni dei linguaggi Python, JavaScript, Ruby e R basate su GraalVM — GraalPython, GraalJS, TruffleRuby e FastR.

GraalVM fornisce compilatore JIT che può eseguire in tempo reale codice di qualsiasi linguaggio di scripting nella JVM, compresi JavaScript, Ruby, Python e R, e consente di eseguire codice nativo nella JVM, convertito in bitcode LLVM. Gli strumenti forniti da GraalVM includono un debugger indipendente dal linguaggio, un sistema di profilazione e un analizzatore di distribuzione della memoria. GraalVM consente di creare applicazioni combinate con componenti in lingue diverse, permettendo di accedere a oggetti e array dal codice in altri linguaggi. Per i linguaggi basati su JVM c'è la possibilità la possibilità di creare file eseguibili compilati in codice macchina, che possono essere eseguiti direttamente con un consumo minimo di memoria (la gestione della memoria e dei thread è implementata tramite il framework Substrate VM).

Modifiche in GraalJS:

  • Compatibilità garantita con Node.js 12.10.0;
  • Disabilitate per impostazione predefinita le proprietà e le funzioni globali non standard:
    global (sostituito con globalThis, è disponibile un'impostazione per ripristinare js.global-property), performance (js.performance), print e printErr (js.print);
  • Implementati Promise.allSettled e la proposta di coalescenza nullish, disponibili in modalità ECMAScript 2020 («—js.ecmascript-version=2020»);
  • Aggiornate le dipendenze ICU4J a 64.2, ASM a 7.1.

Modifiche in GraalPython:

  • Aggiunte stubs gc.{enable,disable,isenabled}, implementati charmap_build, sys.hexversion e _lzma;
  • Aggiornata la libreria standard Python 3.7.8;
  • Aggiunta supporto per NumPy 1.16.4 e Pandas 0.25.0;
  • Aggiunto supporto per timeit;
  • socket.socket aggiornato per consentire l'esecuzione di «graalpython -m http.server» e il caricamento di risorse http non crittografate (senza TLS);
  • Risolti problemi legati all'output di oggetti pandas.DataFrame,
    errata gestione delle tuple in bytes.startswith,
    assegnazione distruttiva degli iteratori e utilizzo di dict.__contains__ per i dizionari;
  • Aggiunto supporto ast.PyCF_ONLY_AST, che ha permesso assicurare il funzionamento di pytest;
  • È stata aggiunta highlightsFromPoint() PEP 498 (interpolazione delle stringhe nei letterali);
  • Realizzato il flag «—python.EmulateJython» per importare classi JVM utilizzando la sintassi Python normale import e gestire eccezioni JVM dal codice Python;
  • Migliorata la performance del parser, della memorizzazione delle eccezioni,
    dell'accesso agli oggetti Python dal codice JVM. Migliorati i risultati nei test di performance per codice python ed estensioni native (l'esecuzione di estensioni native sopra llvm implica che il bitcode llvm venga passato a GraalVM per la compilazione JIT).

Modifiche in TruffleRuby:

  • Per la compilazione di estensioni native ora viene utilizzato un toolchain LLVM integrato, creando sia codice nativo che bitcode. Ciò significa che più estensioni native dovrebbero compilarsi direttamente, risolvendo la maggior parte dei problemi di linking;
  • Installazione separata di LLVM per l'installazione di estensioni native in TruffleRuby;
  • Per l'installazione di estensioni C++ su TruffleRuby non è più necessaria l'installazione di libc++ e libc++abi;
  • La licenza è stata aggiornata a EPL 2.0/GPL 2.0/LGPL 2.1, come nel recente JRuby;
  • Aggiunta la supporto per argomenti opzionali in GC.stat;
  • Implementato il metodo Kernel#load con wrapper e Kernel#spawn con :chdir;
  • Aggiunto rb_str_drop_bytes, eccezionale perché utilizzato da OpenSSL;
  • Inclusi le estensioni delle gem preinstallate necessarie per rails new in Rails 6;
  • Per la compilazione di estensioni native sono stati coinvolti i flag, come in MRI;
  • Apportate ottimizzazioni nelle performance e ridotto il consumo di memoria.

Modifiche in FastR:

  • Garantita la compatibilità con R 3.6.1;
  • Aggiunta la supporto preliminare per l'esecuzione di estensioni native basate su LLVM. Quando si assemblano pacchetti nativi R, FastR è configurato per utilizzare il toolchain LLVM integrato in GraalVM. I file binari risultanti conterranno sia codice nativo che bitcode LLVM.

    I pacchetti preinstallati sono stati assemblati in questo modo.
    FastR carica ed esegue il codice nativo delle estensioni per impostazione predefinita, ma quando viene eseguito con l'opzione «—R.BackEnd=llvm», verrà utilizzato il bitcode. Il backend LLVM può essere utilizzato selettivamente per alcuni pacchetti R specificando «—R.BackEndLLVM=pkg1,pkg2». In caso di problemi nell'installazione dei pacchetti, è possibile tornare indietro chiamando fastr.setToolchain(«native») o modificando manualmente il file $FASTR_HOME/etc/Makeconf;

  • In questa release FastR è fornito senza le librerie di runtime GCC;
  • Corrette le perdite di memoria;
  • Corretto i problemi relativi a grandi vettori (>1GB);
  • È stato implementato grepRaw, ma solo per fixed=T.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster