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

Società Oracle pubblicato rilascio di una macchina virtuale universale GraalVM 19.3.0, che supporta l'esecuzione di applicazioni in JavaScript (Node.js), Python, Ruby, R, qualsiasi linguaggio per JVM (Java, Scala, Clojure, Kotlin) e linguaggi per i quali è possibile generare il codice bit LLVM (C, C++ , Ruggine). Il ramo 19.3 è classificato come versione con supporto a lungo termine (LTS) e notevole supporto JDK 11, inclusa la possibilità di compilare codice Java in file eseguibili (GraalVM Native Image). Codice del progetto distribuito da concesso in licenza con GPLv2. Allo stesso tempo, sono state rilasciate nuove versioni delle implementazioni dei linguaggi Python, JavaScript, Ruby e R che utilizzano GraalVM - GraalPython, GraalJS, Tartufo Ruby и Veloce R.

GraalVM fornisce Un compilatore JIT in grado di eseguire al volo codice da qualsiasi linguaggio di scripting nella JVM, inclusi JavaScript, Ruby, Python e R, e consente inoltre di eseguire codice nativo nella JVM convertito in codice bit LLVM. Gli strumenti forniti da GraalVM includono un debugger indipendente dalla lingua, un sistema di profilazione e un analizzatore di allocazione della memoria. GraalVM rende possibile creare applicazioni combinate con componenti in diversi linguaggi, permettendoti di accedere a oggetti e array da codice in altri linguaggi. Per i linguaggi basati su JVM esiste opportunità creazione di file eseguibili compilati in codice macchina che possono essere eseguiti direttamente con un consumo minimo di memoria (la gestione della memoria e dei thread viene implementata collegando il framework Substrato V.M).

Modifiche in GraalJS:

  • La compatibilità con Node.js 12.10.0 è assicurata;
  • Le proprietà e le funzioni globali non standard sono disabilitate per impostazione predefinita:
    global (sostituito da globalThis, impostando js.global-property su return), performance (js.performance), print e printErr (js.print);

  • Proposta di coalescenza Promise.allSettled e nullish implementata, disponibili in modalità ECMAScript 2020 (“-js.ecmascript-version=2020”);
  • Dipendenze aggiornate ICU4J a 64.2, ASM a 7.1.

Cambiamenti in GraalPython:

  • Aggiunti stub gc.{enable,disable,isenabled}, implementati charmap_build, sys.hexversion e _lzma;
  • Libreria standard Python 3.7.8 aggiornata;
  • Aggiunto supporto per NumPy 1.16.4 e Pandas 0.25.0;
  • Aggiunto supporto timeit;
  • socket.socket è stato portato a uno stato che consente di eseguire "graalpython -m http.server" e caricare risorse http non crittografate (senza TLS);
  • Risolti i problemi con la visualizzazione degli oggetti pandas.DataFrame.
    elaborazione errata delle tuple in bytes.startswith,
    assegnazione destrutturante degli iteratori e utilizzo di dict.__contains__ per i dizionari;

  • Aggiunto il supporto per ast.PyCF_ONLY_AST, che permesso garantire che pytest funzioni;
  • Aggiunto da sostegno PEP 498 (interpolazione di stringhe in letterali);
  • Implementato il flag "--python.EmulateJython" per importare classi JVM utilizzando la normale sintassi di importazione Python e catturare eccezioni JVM dal codice Python;
  • Prestazioni del parser migliorate, memorizzazione nella cache delle eccezioni,
    accedere agli oggetti Python dal codice JVM. Risultati migliorati nei test delle prestazioni per il codice Python e le estensioni native (l'esecuzione di estensioni native su llvm implica che il codice bit llvm venga passato a GraalVM per la compilazione JIT).

Cambiamenti in TartufoRubino:

  • Per compilare estensioni native, viene ora utilizzato il toolkit LLVM integrato, creando sia codice nativo che bitcode. Ciò significa che dovrebbero essere compilate immediatamente più estensioni native, eliminando la maggior parte dei problemi di collegamento;
  • Installazione LLVM separata per l'installazione di estensioni native in TruffleRuby;
  • L'installazione delle estensioni C++ su TruffleRuby non richiede più l'installazione di libc++ e libc++abi;
  • Licenza aggiornata a EPL 2.0/GPL 2.0/LGPL 2.1, come il recente JRuby;
  • Aggiunto supporto per argomenti facoltativi a GC.stat;
  • Implementato il metodo Kernel#load con un wrapper e Kernel#spawn con :chdir;
  • Aggiunto rb_str_drop_bytes, il che è fantastico perché OpenSSL lo utilizza;
  • Incluse estensioni di gemme preinstallate necessarie per i nuovi binari in Rails 6;
  • Per compilare estensioni native, vengono utilizzati i flag, come nella MRI;
  • Sono state apportate ottimizzazioni alle prestazioni e il consumo di memoria è stato ridotto.

Cambiamenti in FastR:

  • È assicurata la compatibilità con R 3.6.1;
  • Aggiunto supporto preliminare per l'esecuzione di estensioni native basate su LLVM. Quando si creano pacchetti R nativi, FastR è configurato per utilizzare gli strumenti LLVM integrati di GraalVM. I file binari risultanti conterranno sia il codice nativo che il bitcode LLVM.

    Anche i pacchetti preinstallati sono creati in questo modo.
    FastR carica ed esegue il codice dell'estensione nativa per impostazione predefinita, ma quando viene avviato con l'opzione "--R.BackEnd=llvm", verrà utilizzato il codice bit. Il backend LLVM può essere utilizzato in modo selettivo per alcuni pacchetti R specificando "--R.BackEndLLVM=pkg1,pkg2". Se riscontri problemi nell'installazione dei pacchetti, puoi ripristinare tutto chiamando fastr.setToolchain("native") o modificando manualmente il file $FASTR_HOME/etc/Makeconf;

  • In questa versione, FastR viene fornito senza le librerie runtime GCC;
  • Risolte le perdite di memoria;
  • Risolti problemi quando si lavora con vettori di grandi dimensioni (>1 GB);
  • GrepRaw implementato, ma solo per Fixed=T.

Fonte: opennet.ru

Aggiungi un commento