GraalVMの素敵な話
ポノス株式会社
じゅくちょー/阪田 浩一
#LINE_DM
@jyukutyo
Java
Virtual
Machine
- Java仮想マシン
http://www.graalvm.org/
http://www.graalvm.org/
Windows
対応作業中
GraalVM = HotSpot VM + α
GraalVMの+α部分
• Graal
– JITコンパイラ
• Truffle
– 言語実装フレームワーク/ASTインタプリタ
• Substrate VM
– Java AOTコンパイルコード構築のための
ランタイムライブラリとツール
Top 10 Things To Do With GraalVM
1. High-performance modern
Java
2. Low-footprint, fast-
startup Java
3. Combine JavaScript, Java,
Ruby, and R
4. Run native languages on
the JVM
5. Tools that work across
all languages
6. Extend a JVM-based
application
7. Extend a native
application
8. Java code as a native
library
9. Polyglot in the database
10.Create your own language
http://www.graalvm.org/
Top 10 Things To Do With GraalVM
1. High-performance modern
Java
2. Low-footprint, fast-
startup Java
3. Combine JavaScript, Java,
Ruby, and R
4. Run native languages on
the JVM
5. Tools that work across
all languages
6. Extend a JVM-based
application
7. Extend a native
application
8. Java code as a native
library
9. Polyglot in the database
10.Create your own language
Polyglot
Polyglot
HotSpot VM
JVMCI
Graal
JVM言語 Truffle
LLVMJS R Ruby
C C++
Fortran
インタプリタ
Polyglot on the JVM with Graal
単体の言語を
高パフォーマンスに
実行できるだけではない
例) JavaScriptコードから
Rubyコードを
“低コスト”で呼び出せる
JavaScriptからRuby
js>vararray= Polyglot.eval("ruby","[1,2,42,4]")
js> array[2]
42
[GRAALVM_HOME]/bin/polyglot --shell --jvm
https://www.sakatakoichi.com/entry/graalvmpolyglot
Chromeでのデバッグ
Interoperability
例) SQL文で
JavaScriptの関数を
呼び出せる
9. Polyglot in the database
Top 10 Things To Do With GraalVM
SQLからJavaScript
SQL> select validator.isEmail('alice@example.com’)
from dual;
VALIDATOR.ISEMAIL('ALICE@EXAMPLE.COM’)
-------------------------------------- 1
SQL> select validator.isEmail('bob@example') from dual;
VALIDATOR.ISEMAIL('BOB@EXAMPLE’)
-------------------------------- 0
https://www.sakatakoichi.com/entry/graalvmembeddeddb
SQL文から
validatorモジュールの
isEmail関数を呼び出している
(Node.js)
データベースに
GraalVMを
組み込んでいる
GraalVMは
Node.js v8.11.1
に対応
GraalVM組み込みデータベース
• Oracle Database
–Oracle Multilingual Engine
(Oracle MLE)
• MySQL
–MySQL MLE Plugin
–近日中にMySQL Labsにて公開予定
Node.jsのモジュールを
データベースにデプロイする
dbjsコマンドでのデプロイ
$ dbjs deploy -uscott -p tiger
-c localhost:1521/ORCLCDB validator
+validator.js
...
├─┬isEmail
│ └──SCALAR FUNCTION VALIDATOR.ISEMAIL("p0" IN VARCHAR2) RETURN
NUMBER
...
自作関数も利用可能
$ echo "export function helloworld() : string
{ return 'HelloWorld'; }" > helloworld.ts
$ dbjs deploy -u scott -p tiger
-c localhost:1521/ORCLCDB helloworld.ts
+ helloworld.js
└─┬ helloworld
└── SCALAR FUNCTION HELLOWORLD.HELLOWORLD RETURN VARCHAR2
自作関数も利用可能
$sqlplus scott/tiger@localhost:1521/ORCLCDB
SQL>select helloworld() fromdual;
HELLOWORLD()
----------------------------------------------------
HelloWorld
データベースは
JavaScriptのみ対応
次はPythonの予定
まとめ
GraalVMすごい

Great Ideas in GraalVM