ื’ืจืกื” 19.3.0 ืฉืœ ื”ืžื›ื•ื ื” ื”ื•ื•ื™ืจื˜ื•ืืœื™ืช GraalVM ื•ื”ื˜ืžืขื•ืช ืฉืœ Python, JavaScript, Ruby ื•-R ื”ืžื‘ื•ืกืกื•ืช ืขืœื™ื”

ื—ื‘ืจืช ืื•ืจืงืœ ะพะฟัƒะฑะปะธะบะพะฒะฐะปะฐ ืฉื—ืจื•ืจ ืฉืœ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืื•ื ื™ื‘ืจืกืœื™ืช GraalVM 19.3.0, ื”ืชื•ืžืš ื‘ื”ืคืขืœืช ื™ื™ืฉื•ืžื™ื ื‘-JavaScript (Node.js), Python, Ruby, R, ื›ืœ ื”ืฉืคื•ืช ืขื‘ื•ืจ ื”-JVM (Java, Scala, Clojure, Kotlin) ื•ืฉืคื•ืช ืฉืขื‘ื•ืจืŸ ื ื™ืชืŸ ืœื™ืฆื•ืจ LLVM bitcode (C, C++ , ื—ืœื•ื“ื”). ื”ืกื ื™ืฃ 19.3 ืžืกื•ื•ื’ ื›ื’ืจืกืช ืชืžื™ื›ื” ืœื˜ื•ื•ื— ืืจื•ืš (LTS) ื• ืจืื•ื™ ืœืฆื™ื•ืŸ ืชืžื™ื›ื” 11 JDK, ื›ื•ืœืœ ื”ื™ื›ื•ืœืช ืœื”ื“ืจ ืงื•ื“ Java ืœืงื‘ืฆื™ ื”ืคืขืœื” (GraalVM Native Image). ืงื•ื“ ืคืจื•ื™ืงื˜ ืžื•ืคืฅ ืขืœ ื™ื“ื™ ืžื•ืจืฉื” ืชื—ืช GPLv2. ื‘ืžืงื‘ื™ืœ, ืฉื•ื—ืจืจื• ื’ืจืกืื•ืช ื—ื“ืฉื•ืช ืฉืœ ื™ื™ืฉื•ืžื™ ืฉืคื•ืช Python, JavaScript, Ruby ื•-R ื‘ืืžืฆืขื•ืช GraalVM - GraalPython, GraalJS, ื›ืžื”ื™ืŸ ืจื•ื‘ื™ ะธ FastR.

GraalVM ืžืกืคืง ืžื”ื“ืจ JIT ืฉื™ื›ื•ืœ ืœื”ืคืขื™ืœ ืงื•ื“ ืžื›ืœ ืฉืคืช ืกืงืจื™ืคื˜ื™ื ืชื•ืš ื›ื“ื™ ืชื ื•ืขื” ื‘-JVM, ื›ื•ืœืœ JavaScript, Ruby, Python ื•-R, ื•ื’ื ืžืืคืฉืจ ืœื”ืจื™ืฅ ืงื•ื“ ืžืงื•ืจื™ ื‘-JVM ื”ืžื•ืžืจ ืœ-LLVM bitcode. ื”ื›ืœื™ื ื”ืžืกื•ืคืงื™ื ืขืœ ื™ื“ื™ GraalVM ื›ื•ืœืœื™ื ื‘ืื’ื™ื ื‘ืœืชื™ ืชืœื•ื™ ื‘ืฉืคื”, ืžืขืจื›ืช ืคืจื•ืคื™ืœื™ื ื•ืžื ืชื— ื”ืงืฆืืช ื–ื™ื›ืจื•ืŸ. GraalVM ืžืืคืฉืจืช ืœื™ืฆื•ืจ ื™ื™ืฉื•ืžื™ื ืžืฉื•ืœื‘ื™ื ืขื ืจื›ื™ื‘ื™ื ื‘ืฉืคื•ืช ืฉื•ื ื•ืช, ืžื” ืฉืžืืคืฉืจ ืœืš ืœื’ืฉืช ืœืื•ื‘ื™ื™ืงื˜ื™ื ื•ืžืขืจื›ื™ื ืžืงื•ื“ ื‘ืฉืคื•ืช ืื—ืจื•ืช. ืขื‘ื•ืจ ืฉืคื•ืช ืžื‘ื•ืกืกื•ืช JVM ื™ืฉ ื”ื–ื“ืžื ื•ืช ื™ืฆื™ืจืช ืงื‘ืฆื™ ื”ืคืขืœื” ื”ืžื•ืจื›ื‘ื™ื ืœืชื•ืš ืงื•ื“ ืžื›ื•ื ื” ืฉื ื™ืชืŸ ืœื”ืคืขื™ืœ ื™ืฉื™ืจื•ืช ื‘ืฆืจื™ื›ืช ื–ื™ื›ืจื•ืŸ ืžื™ื ื™ืžืœื™ืช (ื ื™ื”ื•ืœ ื–ื™ื›ืจื•ืŸ ื•ื—ื•ื˜ื™ื ืžื™ื•ืฉื ื‘ืืžืฆืขื•ืช ื—ื™ื‘ื•ืจ ื”ืžืกื’ืจืช ืžืฆืข VM).

ืฉื™ื ื•ื™ื™ื ื‘-GraalJS:

  • ืžื•ื‘ื˜ื—ืช ืชืื™ืžื•ืช ืขื Node.js 12.10.0;
  • ืžืืคื™ื™ื ื™ื ื•ืคื•ื ืงืฆื™ื•ืช ื’ืœื•ื‘ืœื™ื•ืช ืœื ืกื˜ื ื“ืจื˜ื™ื•ืช ืžื•ืฉื‘ืชื•ืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ:
    global (ืžื•ื—ืœืฃ ื‘-globalThis, ื”ื’ื“ืจืช js.global-property ืœื”ื—ื–ืจ), ื‘ื™ืฆื•ืขื™ื (js.performance), print ื•-printErr (js.print);

  • ื”ื˜ืžืขื” ื”ืฆืขืช ืื™ื—ื•ื“ ืฉืœ Promise.allSettled ื•ื‘ื˜ืœื”, ื”ื–ืžื™ื ื•ืช ื‘ืžืฆื‘ ECMAScript 2020 ("-js.ecmascript-version=2020");
  • ืชืœื•ืช ืžืขื•ื“ื›ื ืช ICU4J ืœ-64.2, ASM ืœ-7.1.

ืฉื™ื ื•ื™ื™ื ื‘-GraalPython:

  • ื ื•ืกืคื• stubs gc.{enable,disable,isenabled}, ื”ื˜ืžื™ืขื• charmap_build, sys.hexversion ื•-_lzma;
  • ืกืคืจื™ื™ื” ืกื˜ื ื“ืจื˜ื™ืช ืžืขื•ื“ื›ื ืช ืฉืœ Python 3.7.8;
  • ื ื•ืกืคื” ืชืžื™ื›ื” ืขื‘ื•ืจ NumPy 1.16.4 ื•-Pandas 0.25.0;
  • ื ื•ืกืคื” ืชืžื™ื›ื” ื‘-timeit;
  • socket.socket ื”ื•ื‘ื ืœืžืฆื‘ ื”ืžืืคืฉืจ ืœืš ืœื”ืจื™ืฅ "graalpython -m http.server" ื•ืœื˜ืขื•ืŸ ืžืฉืื‘ื™ http ืœื ืžื•ืฆืคื ื™ื (ืœืœื TLS);
  • ืชื™ืงื ื• ื‘ืขื™ื•ืช ื‘ื”ืฆื’ืช ืื•ื‘ื™ื™ืงื˜ื™ pandas.DataFrame.
    ืขื™ื‘ื•ื“ ืฉื’ื•ื™ ืฉืœ tuples ื‘-bytes.startswith,
    ื”ืงืฆืืช ื”ืจืก ืฉืœ ืื™ื˜ืจื˜ื•ืจื™ื ื•ืฉื™ืžื•ืฉ ื‘-dict.__contains__ ืขื‘ื•ืจ ืžื™ืœื•ื ื™ื;

  • ื ื•ืกืคื” ืชืžื™ื›ื” ืขื‘ื•ืจ ast.PyCF_ONLY_AST, ืืฉืจ ืžื•ึผืชึธืจ ืœื”ื‘ื˜ื™ื— ืฉ-pytest ืขื•ื‘ื“;
  • ื ื•ืกืฃ ืœืชืžื•ืš PEP 498 (ืื™ื ื˜ืจืคื•ืœืฆื™ื” ืฉืœ ืžื—ืจื•ื–ืช ื‘ืžื™ืœื•ืœื™);
  • ืžื•ื˜ืžืข ื”ื“ื’ืœ "--python.EmulateJython" ืœื™ื™ื‘ื ืžื—ืœืงื•ืช JVM ื‘ืืžืฆืขื•ืช ืชื—ื‘ื™ืจ ื™ื™ื‘ื•ื โ€‹โ€‹ืจื’ื™ืœ ืฉืœ Python ื•ืœืชืคื•ืก ื—ืจื™ื’ื™ื ืฉืœ JVM ืžืงื•ื“ Python;
  • ื‘ื™ืฆื•ืขื™ ืžื ืชื— ืžืฉื•ืคืจื™ื, ืžื˜ืžื•ืŸ ื—ืจื™ื’,
    ื’ื™ืฉื” ืœืื•ื‘ื™ื™ืงื˜ื™ื ืฉืœ Python ืžืงื•ื“ JVM. ืชื•ืฆืื•ืช ืžืฉื•ืคืจื•ืช ื‘ืžื‘ื—ื ื™ ื‘ื™ืฆื•ืขื™ื ืขื‘ื•ืจ ืงื•ื“ ืคื™ืชื•ืŸ ื•ื”ืจื—ื‘ื•ืช ืžืงื•ืจื™ื•ืช (ื‘ื™ืฆื•ืข ื”ืจื—ื‘ื•ืช ืžืงื•ืจื™ื•ืช ืขืœ ื’ื‘ื™ llvm ืžืจืžื– ืฉ-bitcode llvm ืžื•ืขื‘ืจ ืœ-GraalVM ืœืฆื•ืจืš ื”ื™ื“ื•ืจ JIT).

ืฉื™ื ื•ื™ื™ื ื‘-TruffleRuby:

  • ื›ื“ื™ ืœื”ืจื›ื™ื‘ ื”ืจื—ื‘ื•ืช ืžืงื•ืจื™ื•ืช, ื ืขืฉื” ื›ืขืช ืฉื™ืžื•ืฉ ื‘ืขืจื›ืช ื”ื›ืœื™ื ื”ืžื•ื‘ื ื™ืช ืฉืœ LLVM, ืฉื™ื•ืฆืจืช ื’ื ืงื•ื“ ืžืงื•ืจื™ ื•ื’ื ืงื•ื“ ืกื™ื‘ื™ื•ืช. ืžืฉืžืขื•ืช ื”ื“ื‘ืจ ื”ื™ื ืฉื™ื•ืชืจ ื”ืจื—ื‘ื•ืช ืžืงื•ืจื™ื•ืช ืฆืจื™ื›ื•ืช ืœื”ื“ืจ ืžื”ืงื•ืคืกื”, ื•ืœื‘ื˜ืœ ืืช ืจื•ื‘ ื‘ืขื™ื•ืช ื”ืงื™ืฉื•ืจ;
  • ื”ืชืงื ืช LLVM ื ืคืจื“ืช ืœื”ืชืงื ืช ื”ืจื—ื‘ื•ืช ืžืงื•ืจื™ื•ืช ื‘-TruffleRuby;
  • ื”ืชืงื ืช ื”ืจื—ื‘ื•ืช C++ ื‘-TruffleRuby ืื™ื ื” ืžืฆืจื™ื›ื” ืขื•ื“ ื”ืชืงื ืช libc++ ื•-libc++abi;
  • ื”ืจื™ืฉื™ื•ืŸ ืขื•ื“ื›ืŸ ืœ-EPL 2.0/GPL 2.0/LGPL 2.1, ื–ื”ื” ืœ-JRuby ื”ืื—ืจื•ืŸ;
  • ื ื•ืกืคื” ืชืžื™ื›ื” ืขื‘ื•ืจ ืืจื’ื•ืžื ื˜ื™ื ืื•ืคืฆื™ื•ื ืœื™ื™ื ืœ-GC.stat;
  • ื”ื˜ืžื™ืข ืืช ืฉื™ื˜ืช Kernel#load ืขื ืขื˜ื™ืคื” ื•-Kernel#spawn ืขื :chdir;
  • ื”ื•ืกื™ืฃ rb_str_drop_bytes, ื•ื–ื” ื ื”ื“ืจ ื›ื™ OpenSSL ืžืฉืชืžืฉ ื‘ื•;
  • ื›ืœื•ืœื™ื ื”ืจื—ื‘ื•ืช ืฉืœ ืื‘ื ื™ ื—ืŸ ืฉื”ื•ืชืงื ื• ืžืจืืฉ ื”ื“ืจื•ืฉื•ืช ืœืžืกื™ืœื•ืช ื—ื“ืฉื•ืช ื‘ืžืกื™ืœื•ืช 6;
  • ื›ื“ื™ ืœื”ืจื›ื™ื‘ ื”ืจื—ื‘ื•ืช ืžืงื•ืจื™ื•ืช, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ื“ื’ืœื™ื, ื›ืžื• ื‘-MRI;
  • ื‘ื•ืฆืขื• ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืฉืœ ื‘ื™ืฆื•ืขื™ื ื•ืฆืจื™ื›ืช ื”ื–ื™ื›ืจื•ืŸ ื”ืฆื˜ืžืฆืžื”.

ืฉื™ื ื•ื™ื™ื ื‘-FastR:

  • ืžื•ื‘ื˜ื—ืช ืชืื™ืžื•ืช ืขื R 3.6.1;
  • ื ื•ืกืคื” ืชืžื™ื›ื” ืจืืฉื•ื ื™ืช ืœื”ืคืขืœืช ืชื•ืกืคื™ื ืžืงื•ืจื™ื™ื ื”ืžื‘ื•ืกืกื™ื ืขืœ LLVM. ื‘ืขืช ื‘ื ื™ื™ืช ื—ื‘ื™ืœื•ืช R ืžืงื•ืจื™ื•ืช, FastR ืžื•ื’ื“ืจ ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ ื”-LLVM ื”ืžื•ื‘ื ื™ื ืฉืœ GraalVM. ื”ืงื‘ืฆื™ื ื”ื‘ื™ื ืืจื™ื™ื ืฉื™ืชืงื‘ืœื• ื™ื›ื™ืœื• ื’ื ืงื•ื“ ืžืงื•ืจื™ ื•ื’ื LLVM bitcode.

    ื—ื‘ื™ืœื•ืช ืžื•ืชืงื ื•ืช ืžืจืืฉ ื‘ื ื•ื™ื•ืช ื’ื ื›ืš.
    FastR ื˜ื•ืขืŸ ื•ืžืจื™ืฅ ืงื•ื“ ืชื•ืกืฃ ืžืงื•ืจื™ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืืš ื›ืืฉืจ ื™ื•ืคืขืœ ืขื ื”ืืคืฉืจื•ืช "--R.BackEnd=llvm", ื™ื™ืขืฉื” ืฉื™ืžื•ืฉ ื‘-bitcode. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืงืฆื” ื”ืื—ื•ืจื™ ืฉืœ LLVM ื‘ืื•ืคืŸ ืกืœืงื˜ื™ื‘ื™ ืขื‘ื•ืจ ื—ืœืง ืžื—ื‘ื™ืœื•ืช R ืขืœ ื™ื“ื™ ืฆื™ื•ืŸ "--R.BackEndLLVM=pkg1,pkg2". ืื ื™ืฉ ืœืš ื‘ืขื™ื•ืช ื‘ื”ืชืงื ืช ื—ื‘ื™ืœื•ืช, ืชื•ื›ืœ ืœื”ื—ื–ื™ืจ ื”ื›ืœ ื‘ื—ื–ืจื” ืขืœ ื™ื“ื™ ืงืจื™ืื” ืœ-fastr.setToolchain("native") ืื• ืขืจื™ื›ื” ื™ื“ื ื™ืช ืฉืœ ื”ืงื•ื‘ืฅ $FASTR_HOME/etc/Makeconf;

  • ื‘ืžื”ื“ื•ืจื” ื–ื•, FastR ื ืฉืœื— ืœืœื ืกืคืจื™ื•ืช ื–ืžืŸ ื”ืจื™ืฆื” ืฉืœ GCC;
  • ืชื™ืงื•ืŸ ื“ืœื™ืคื•ืช ื–ื™ื›ืจื•ืŸ;
  • ืชื™ืงื ื• ื‘ืขื™ื•ืช ื‘ืขื‘ื•ื“ื” ืขื ื•ืงื˜ื•ืจื™ื ื’ื“ื•ืœื™ื (>1GB);
  • grepRaw ืžื™ื•ืฉื, ืื‘ืœ ืจืง ืขื‘ื•ืจ fixed=T.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”