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

Azienda Oracle ha pubblicato uscita 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 è possibile generare codice LLVM (C, C++, Rust). Il ramo 19.3 è classificato come versione a lungo termine (LTS) e si distingue per supporto 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 contemporaneamente nuove versioni delle implementazioni dei linguaggi Python, JavaScript, Ruby e R che utilizzano GraalVM — GraalPython, GraalJS, TruffleRuby e FastR.

GraalVM offre Il JIT compiler in grado di eseguire al volo codice di qualsiasi linguaggio di scripting nella JVM, inclusi JavaScript, Ruby, Python e R, e consente l'esecuzione di codice nativo nella JVM, convertito in bitcode LLVM. Gli strumenti forniti da GraalVM includono un debugger, un sistema di profiling e un analizzatore di distribuzione della memoria, indipendenti dai linguaggi di programmazione. GraalVM consente di creare applicazioni combinate con componenti in linguaggi diversi, permettendo di accedere a oggetti e array da codice scritto in altri linguaggi. Per i linguaggi basati su JVM c'è possibilità la creazione di file eseguibili compilati in codice macchina, che possono essere eseguiti direttamente con un consumo di memoria minimo (la gestione della memoria e dei thread è implementata tramite l'integrazione del framework Substrate VM).

Modifiche in GraalJS:

  • È stata garantita la compatibilità con Node.js 12.10.0;
  • Le proprietà e le funzioni globali non standard sono disabilitate per impostazione predefinita:
    global (sostituito da globalThis, è prevista una configurazione per il ripristino js.global-property), performance (js.performance), print e printErr (js.print);
  • Sono stati implementati Promise.allSettled e nullish coalescing proposal, disponibili nella modalità ECMAScript 2020 («—js.ecmascript-version=2020»);
  • Dipendenze ICU4J aggiornate a 64.2, ASM a 7.1.

Modifiche in GraalPython:

  • Aggiunte le stubs gc.{enable,disable,isenabled}, implementate charmap_build, sys.hexversion e _lzma;
  • Aggiornata la libreria standard Python 3.7.8;
  • Aggiunto supporto per NumPy 1.16.4 e Pandas 0.25.0;
  • Aggiunto supporto per timeit;
  • socket.socket portato in uno stato tale da poter eseguire «graalpython -m http.server» e caricare risorse http non criptate (senza TLS);
  • Corrette le problematiche relative all'output degli oggetti pandas.DataFrame,
    trattamento scorretto delle tuple in bytes.startswith,
    assegnazione destrutturante di iteratori e utilizzo di dict.__contains__ per dizionari;
  • Aggiunto supporto per ast.PyCF_ONLY_AST, che ha permesso di far funzionare pytest;
  • Aggiunto supporto PEP 498 (interpolazione delle stringhe nei letterali);
  • Implementato flag «—python.EmulateJython» per importare classi JVM utilizzando la normale sintassi di import di Python e catturare le eccezioni JVM dal codice Python;
  • Migliorata la performance del parser, della cache delle eccezioni,
    accesso agli oggetti Python dal codice JVM. Migliorate le performance nei test di codice Python e delle estensioni native (l'esecuzione delle estensioni native sopra llvm implica che il bitcode llvm venga passato a GraalVM per la compilazione JIT).

Modifiche in TruffleRuby:

  • Per la compilazione delle estensioni native ora viene utilizzato un toolkit integrato LLVM, che produce sia codice nativo che bitcode. Questo significa che un maggior numero di estensioni native dovrebbe compilarsi senza problemi, risolvendo la maggior parte delle problematiche di linkage.
  • Installazione separata di LLVM per l'installazione delle estensioni native in TruffleRuby.
  • Per l'installazione delle 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, notevole in quanto utilizzato da OpenSSL.
  • Inclusi le estensioni dei gem preinstallati necessarie per rails new in Rails 6.
  • Per la compilazione delle estensioni native sono utilizzati flag simili a quelli di MRI.
  • Implementate ottimizzazioni delle prestazioni e ridotto il consumo di memoria.

Modifiche in FastR:

  • Compatibilità garantita con R 3.6.1.
  • È stata aggiunta una supporto preliminare per l'esecuzione di estensioni native basate su LLVM. Durante la compilazione dei pacchetti nativi, R FastR è configurato per utilizzare gli strumenti LLVM integrati in GraalVM. I file binari risultanti conterranno sia codice nativo che codice bitcode LLVM.

    I pacchetti preinstallati sono stati creati anche in questo modo.
    FastR carica ed esegue 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 durante l'installazione dei pacchetti, è possibile tornare indietro chiamando fastr.setToolchain("native") o modificando manualmente il file $FASTR_HOME/etc/Makeconf;

  • In questa versione, FastR viene fornito senza le librerie runtime GCC;
  • Sono state corrette perdite di memoria;
  • Sono stati risolti problemi con grandi vettori (>1GB);
  • È stata implementata 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