SlideShare ist ein Scribd-Unternehmen logo
1 von 91
Downloaden Sie, um offline zu lesen
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Polyglot	on	the	JVM	with	Graal
Akihiro Nishikawa
May 20, 2017
JJUG	CCC	2017	Spring
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Safe	Harbor	Statement
The	following	is	intended	to	outline	our	general	product	direction.	It	is	intended	for	
information	purposes	only,	and	may	not	be	incorporated	into	any	contract.	It	is	not	a	
commitment	to	deliver	any	material,	code,	or	functionality,	and	should	not	be	relied	upon	
in	making	purchasing	decisions.	The	development,	release,	and	timing	of	any	features	or	
functionality	described	for	Oracle’s	products	remains	at	the	sole	discretion	of	Oracle.
2
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Program	Agenda
3
What’s	Graal?	What’s	Graal VM?
Polyglot	in	Graal VM
How	to	use
Appendix
1
2
3
4
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
What’s	Graal?	What’s	Graal VM?
4
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Graal and	Graal VM
• A	new compiler for HotSpot written in	Java	and with a	focus on	speculative
optimizations.
– Based	HotSpot
– Aggressive	high-level	optimizations	
– JVMCI	and Graal included in	JDK9	(modified version of JDK8	available via	OTN)
5
Graal
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Graal and	Graal VM
• JVM	packaged	with	Graal,	Truffle,	and	other	languages	such	as	JavaScript,	R,	
Ruby,	and	so	on.
6
Graal VM
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 7
Graal and	Graal VM
C++
Java
HotSpot
Compiler Interface
Client Server
HotSpot
JVMCI
Graal
HotSpot	VM Graal VM
Compiler
Interface
Client
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Polyglot	in	Graal VM
8
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
The	One	VM	Concept
High	performance	polyglot	virtual	machine
9
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 10
The	Ruby	Logo	is	Copyright	(c)	2006,	Yukihiro	Matsumoto.	It	is	licensed	under	the	terms	of	the	Creative	Commons	Attribution-ShareAlike 2.5	agreement
JS	Logo	Copyright	(c)	2011	Christopher	Williams	<chris@iterativedesigns.com>,	MIT		licence
You	can	distribute	the	R	logo	under	the	terms	of	the	Creative	Commons	Attribution-ShareAlike 4.0	International	license	(CC-BY-SA	4.0)	or	(at	your	option)	the	GNU	General	Public	License	version	2	(GPL-2).
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Impl Impl Impl Impl
11
VM VM VM VM
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
VM
Impl Impl Impl Impl
12
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
• JavaScript
– Better	ECMAScript2016	score	than	V8
– Almost	same	performance	as	V8
– Fully	support	for	node.js
• R
– Statistical	language
13
• Ruby
– Fork	of	JRuby
– 5〜10x	better	performance
• C、C++、Fortran
– Native	language	support	via	LLVM
Graal	VM	Polyglot
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 14
Graal	VM	Polyglot
C
HotSpot
JVMCI
Graal
Truffle
LLVM
(Sulong)
RRubyJavaScript
Java
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Truffle
• Together	with	the Graal compiler,	Truffle	interpreters	are	automatically	
just-in-time	compiled	and	programs	running	on	top	of	them	can	reach	
performance	of	normal	Java.
• Provides	the	basic	foundation	for	building	abstract-syntax-tree	(AST)	
interpreters	that	perform self-optimizations at	runtime
– The	included	TruffleDSL provides	a	convenient	way	to	express	such	optimizations.
15
Framework	for	implementing	languages	as	simple	interpreters
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 16
Fully	compatible	including	native	module	support!
Graal.js Architecture
C++JavaScript Java
node	modules	with	only	JavaScript
node	standard	library
V8	API
Thread pool
(libeio)
Event loop
(libev)
DNS
(c-ares)
crypto
(OpenSSL)
Graal.js JavaScript	Engine
Adapter	V8	API
to	Graal.js (via	JNI)
Native	
extensions
node	bindings	(socket,	http,	…)
node	modules	with	
native	
extensions
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
FastR
• Goal:	realize	the	advantages	of	the	Truffle	stack	for	R
– Superior	performance	without	resorting	to	C/C++/Fortran/…
– Designed	for	data-heavy	and	parallel	applications
– CRAN	/	Bioconductor	repository	support
• Not	an	”incremental	improvement”	on	GNU	R
– New	execution	engine	written	from	scratch,	based	on	Truffle
– Designed	as	a	drop-in	replacement	for	GNU	R
• Speedup	over	latest	GNU	R	interpreter
– Somewhere	between	2	and	10x
17
https://github.com/graalvm/fastr
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
JavaScript	in	Graal VM
18
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Completeness
19
ECMAScript	2015	(ES6)
(16298	tests/16417	tests)
Failing	tests	are	to	a	large	part	Unicode	Regular	
Expressions
93.4%
ECMAScript	2016	(ES7)
Supports	exponentiation	operator,	Array.prototype.includes
Fails	due	to	new	block-level	function	declaration	and	corner-
case	tests	of	the	spread	operator
99.3%
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| Oracle	Confidential	– Internal
Classic	research	benchmarks	(Octane)
0
0.2
0.4
0.6
0.8
1
1.2
1.4
V8	(5.4.500.6)
Graal.js
20
roughly	level	with	V8
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Ruby	in	Graal VM
21
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Completeness	– language	and	core	library
22
Ruby	Language
JRuby:	94%
96%
Ruby core	libraries
JRuby: 95%
99%
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Classic	research	benchmarks	– 10-20x	faster
0
5
10
15
20
25
30
35
40
45
GraalVM
JRuby+invokedynamic
Ruby
23
Bigger	score	is	better	(based	on	Ruby score)
Benchmarks	bound	by	allocation	
or	BigInteger performance
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
“But,	it’s	easy	to	
optimize	that	kind	
of	code!”
24
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 25
Simple	local	variables
Vectorisation opportunities
Simple	floating	point	arithmetic
Basic	loops
No	method	calls
(except	operators)
Only	types	are	numerical or	boolean
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
“Real	Ruby	is	much	
more	complex!”
26
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 27
Smalltalk-style	blocks	instead	
of	loops
Loop	bounds	are	objects	
instead	of	simple	values
Instance	variables
Logic	hidden	in	
methods
Arrays
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 28
Arithmetic	hidden	in	core	
library	methods
Intermediate	objects
Hash	mapped	to	an	array	of
arrays,	via	another	array,
converted	back	to	a	hash
Inner	loop	pixels represented	
as	a	hash	of r,	g,	b
No	local	variables,	only	
method	calls
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 29
Metaprogramming	send Dynamically	created	symbol
Actual	logic	method	
dynamic	method	calls
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Chunky	PNG	kernels
0.01
0.1
1
10
100
1000
GraalVM
JRuby+invokedynamic
Ruby
30
Many	of	these	benchmarks	are	
optimised away	entirely	by	GraalVM
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
PSD.rb kernels
0.1
1
10
100
1000
GraalVM JRuby+invokedynamic Ruby
31
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Polyglot
32
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
REST
public	internet
REST
private	intranet
33
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
REST
public	internet
34
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
REST
public	internet
35
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
How	we	do	polyglot	in	Graal VM
36
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Ruby
Truffle::Interop.eval('application/language', source)
value = Truffle::Interop.import(name)
Truffle::Interop.export(name)
37
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
JavaScript
Interop.eval('application/language', source)
value = Interop.import(name)
Interop.export(name)
// Returns 20
Interop.eval('application/javascript', '14 + 6')
38
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
JavaScript	in	Ruby
puts Truffle::Interop.eval('application/javascript',
'14 + 6')
39
This	returns	20
JavaScript Ruby
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
JavaScript	in	Ruby
Truffle::Interop.eval('application/javascript',
"function add(a,b) {
return a + b;
}
Interop.export('add',
add.bind(this));")
add = Truffle::Interop.import('add')
puts add.call(14,2)
40
Uses	function	defined	in	JavaScript	from	Ruby
JavaScript
Ruby
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Ruby
JavaScript
41
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Ruby
JS
42
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Performance
43
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 44
Clamp
Warms	up	and	then	
reports	iterations	
per	second
Random	inputs	stop	
the	whole	thing	being	
totally	optimized	away
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Ruby
0
1000000
2000000
3000000
4000000
5000000
6000000
7000000
8000000
9000000
10000000
GraalVM JRuby+invokedynamic Ruby
Operations	Per	Second
45
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 46
JavaScript	(V8)
Rewritten	in	
JavaScript	and	call	
it	on	V8
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Ruby	+	JavaScript	(V8)
0
50000
100000
150000
200000
250000
300000
350000
Ruby	(just	Ruby) Ruby	(Ruby	+	JS	with	V8)
Operations	Per	Second
47
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 48
In	case	of	Rhino
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
JRuby +	JavaScript	(Rhino)
0
100000
200000
300000
400000
500000
600000
JRuby+indy	(just	Ruby) JRuby+indy	(Ruby	+	JS	with	Rhino)
Operations	Per	Second
49
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 50
In	case	of	Nashorn
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
JRuby +	JavaScript	(Nashorn)
0
100000
200000
300000
400000
500000
600000
JRuby+indy	(just	Ruby) JRuby+indy	(Ruby	+	JS	with	
Rhino)
JRuby+indy	(Ruby	+	JS	with	
Nashorn)
Operations	Per	Second
51
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 52
In	case	of	Graal VM
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Ruby	+	JavaScript	(Graal VM)
0
1000000
2000000
3000000
4000000
5000000
6000000
7000000
8000000
9000000
10000000
GraalVM	(just	Ruby) GraalVM	(Ruby	+	JS) JRuby+invokedynamic Ruby
Operations	Per	Second
53
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
0
1000000
2000000
3000000
4000000
5000000
6000000
7000000
8000000
9000000
10000000
GraalVM	
(just	Ruby)
GraalVM	
(Ruby	+	JS)
JRuby+indy	
(just	Ruby)
JRuby+indy	
(Ruby	+	JS	
with	Rhino)
JRuby+indy	
(Ruby	+	JS	
with	
Nashorn)
Ruby	(just	
Ruby)
Ruby	(Ruby	
+	JS	with	
V8)
Operations	Per	Second
54
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
1
10
100
1000
10000
100000
1000000
10000000
GraalVM	
(just	Ruby)
GraalVM	
(Ruby	+	JS)
JRuby+indy	
(just	Ruby)
JRuby+indy	
(Ruby	+	JS	
with	Rhino)
JRuby+indy	
(Ruby	+	JS	
with	
Nashorn)
Ruby	(just	
Ruby)
Ruby	(Ruby	
+	JS	with	
V8)
Operations	Per	Second
55
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
How	Graal achieves	this
56
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Hotspot
JIT
57
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Hotspot
JIT
Graal
Truffle
58
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Basics	of	Truffle	and	Graal
59
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Basic	Concepts
• Common	representation	of	programs
• Keep	it	rich	enough	to	not	have	to	throw	away	meaning
• Common	optimization	of	the	representation
60
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
x + y * z
+
x *
y z
load_local x
load_local y
load_local z
call *
call +
pushq %rbp
movq %rsp, %rbp
movq %rdi, -8(%rbp)
movq %rsi, -16(%rbp)
movq %rdx, -24(%rbp)
movq -16(%rbp), %rax
movl %eax, %edx
movq -24(%rbp), %rax
imull %edx, %eax
movq -8(%rbp), %rdx
addl %edx, %eax
popq %rbp
ret
61
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
U
U U
U
U
Node Rewriting
for Profiling Feedback
AST Interpreter
Uninitialized Nodes
Node Transitions
S
U
I
D
G
Uninitialized Integer
Generic
DoubleString
T.	Würthinger,	C.	Wimmer,	A.	Wöß,	L.	Stadler,	G.	Duboscq,	C.	Humer,	G.	Richards,	D.	Simon,	
and	M.	Wolczko.	One	VM	to	rule	them	all.	In	Proceedings	of	Onward!,	2013.
62
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
U
U U
U
U I
I I
G
G
Node Rewriting
for Profiling Feedback
AST Interpreter
Rewritten Nodes
AST Interpreter
Uninitialized Nodes
Node Transitions
S
U
I
D
G
Uninitialized Integer
Generic
DoubleString
T.	Würthinger,	C.	Wimmer,	A.	Wöß,	L.	Stadler,	G.	Duboscq,	C.	Humer,	G.	Richards,	D.	Simon,	
and	M.	Wolczko.	One	VM	to	rule	them	all.	In	Proceedings	of	Onward!,	2013.
63
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
I
I I
G
G I
I I
G
G
Rewriting
ng Feedback
AST Interpreter
Rewritten Nodes
Compilation using
Partial Evaluation
Compiled Code
I
D
Uninitialized Integer
Generic
Double
T.	Würthinger,	C.	Wimmer,	A.	Wöß,	L.	Stadler,	G.	Duboscq,	C.	Humer,	G.	Richards,	D.	Simon,	
and	M.	Wolczko.	One	VM	to	rule	them	all.	In	Proceedings	of	Onward!,	2013.
64
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
T.	Würthinger,	C.	Wimmer,	A.	Wöß,	L.	Stadler,	G.	Duboscq,	C.	Humer,	G.	Richards,	D.	Simon,	
and	M.	Wolczko.	One	VM	to	rule	them	all.	In	Proceedings	of	Onward!,	2013.
I
I I
G
G I
I I
G
G
Deoptimization
to AST Interpreter
D
I
Node Rewriting to Update
Profiling Feedback
65
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
T.	Würthinger,	C.	Wimmer,	A.	Wöß,	L.	Stadler,	G.	Duboscq,	C.	Humer,	G.	Richards,	D.	Simon,	
and	M.	Wolczko.	One	VM	to	rule	them	all.	In	Proceedings	of	Onward!,	2013.
I
I
G
G D
I D
G
G D
I D
G
G
Node Rewriting to Update
Profiling Feedback
Recompilation using
Partial Evaluation
66
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 67
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 68
Frequently executed call
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 69
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 70
Even	if	another	language…
Frequently executed call
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 71
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 72
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Looking	at	how	effective	this	is
73
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 74
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 75
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 76
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 77
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 78
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 79
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 80
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
How	to	use	Graal VM
81
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
• Includes:
– JVM	(RE	or	DK)
– Java
– JavaScript
– Ruby
– R
– More	in	the	future
• Binary	tarball release
• Mac	or	Linux
82
Graal VM	– everything	in	one	package	today
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 83
Java	9	– runs	on	an	unmodified	JVM
Hotspot
Graal
Truffle
JS others…Ruby
Java
C++
JVMCI
(JVM	Compiler	Interface)
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 84
Java	9	– runs	on	an	unmodified	JVM
Hotspot
Graal
Truffle
JS others…Ruby
via	Maven	etc
Java 9
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Appendix
85
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 86
http://www.oracle.com/technetwork/oracle-labs/program-languages
Search	for	“Graal OTN”
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		| 87
https://github.com/graalvm
Search	for	“GitHub GraalVM”
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Acknowledgements
Oracle
Danilo	Ansaloni
Stefan	Anzinger
Cosmin	Basca
Daniele	Bonetta
Matthias	Brantner
Petr	Chalupa
Jürgen	Christ
Laurent	Daynès
Gilles	Duboscq
Martin	Entlicher
Brandon	Fish
Bastian	Hossbach
Christian	Humer
Mick	Jordan
Vojin	Jovanovic
Peter	Kessler
David	Leopoldseder
Kevin	Menard
Jakub	Podlešák
Aleksandar	Prokopec
Tom	Rodriguez
Oracle	(continued)
Roland	Schatz
Chris	Seaton
Doug	Simon
Štěpán	Šindelář
Zbyněk	Šlajchrt
Lukas	Stadler
Codrut	Stancu
Jan	Štola
Jaroslav	Tulach
Michael	Van	De	Vanter
Adam	Welc
Christian	Wimmer
Christian	Wirth
Paul	Wögerer
Mario	Wolczko
Andreas	Wöß
Thomas	Würthinger
JKU	Linz
Prof.	Hanspeter	Mössenböck
Benoit	Daloze
Josef	Eisl
Thomas	Feichtinger
Matthias	Grimmer
Christian	Häubl
Josef	Haider
Christian	Huber
Stefan	Marr
Manuel	Rigger
Stefan	Rumzucker
Bernhard	Urban
University	of Edinburgh
Christophe	Dubach
Juan	José	Fumero Alfonso
Ranjeet Singh
Toomas Remmelg
LaBRI
Floréal Morandat
University	of California,	Irvine
Prof.	Michael	Franz
Gulfem	Savrun	Yeniceri
Wei	Zhang
Purdue University
Prof.	Jan	Vitek
Tomas	Kalibera
Petr	Maj
Lei	Zhao
T.	U.	Dortmund
Prof.	Peter	Marwedel
Helena	Kotthaus
Ingo	Korb
University	of California,	Davis
Prof.	Duncan	Temple	Lang
Nicholas	Ulle
University	of Lugano,	Switzerland
Prof.	Walter	Binder
Sun	Haiyang
Yudi	Zheng
Oracle	Interns
Brian	Belleville	
Miguel	Garcia
Shams	Imam
Alexey	Karyakin
Stephen	Kell
Andreas	Kunft
Volker	Lanting
Gero	Leinemann
Julian	Lettner
Joe	Nash
David	Piorkowski
Gregor	Richards
Robert	Seilbeck
Rifat	Shariyar
Alumni
Erik	Eckstein
Michael	Haupt
Christos	Kotselidis
Hyunjin	Lee
David	Leibs
Chris	Thalinger
Till	Westmann
Copyright	©	2017,	Oracle	and/or	its	affiliates.	All	rights	reserved.		|
Safe	Harbor	Statement
The	preceding	is	intended	to	outline	our	general	product	direction.	It	is	intended	for	
information	purposes	only,	and	may	not	be	incorporated	into	any	contract.	It	is	not	a	
commitment	to	deliver	any	material,	code,	or	functionality,	and	should	not	be	relied	upon	
in	making	purchasing	decisions.	The	development,	release,	and	timing	of	any	features	or	
functionality	described	for	Oracle’s	products	remains	at	the	sole	discretion	of	Oracle.
89
Polyglot on the JVM with Graal (English)
Polyglot on the JVM with Graal (English)

Weitere ähnliche Inhalte

Was ist angesagt?

Curious Coders Java Web Frameworks Comparison
Curious Coders Java Web Frameworks ComparisonCurious Coders Java Web Frameworks Comparison
Curious Coders Java Web Frameworks Comparison
Hamed Hatami
 
Enterprise Architectures with Ruby (and Rails)
Enterprise Architectures with Ruby (and Rails)Enterprise Architectures with Ruby (and Rails)
Enterprise Architectures with Ruby (and Rails)
Konstantin Gredeskoul
 

Was ist angesagt? (20)

Rakuten’s Journey with Splunk - Evolution of Splunk as a Service
Rakuten’s Journey with Splunk - Evolution of Splunk as a ServiceRakuten’s Journey with Splunk - Evolution of Splunk as a Service
Rakuten’s Journey with Splunk - Evolution of Splunk as a Service
 
[RakutenTechConf2013] [D-2] RPaaS DevOps: Lessons from using Cloudfoundry in ...
[RakutenTechConf2013] [D-2] RPaaS DevOps: Lessons from using Cloudfoundry in ...[RakutenTechConf2013] [D-2] RPaaS DevOps: Lessons from using Cloudfoundry in ...
[RakutenTechConf2013] [D-2] RPaaS DevOps: Lessons from using Cloudfoundry in ...
 
クラウド時代の Spring Framework (aka Spring Framework in Cloud Era)
クラウド時代の Spring Framework (aka Spring Framework in Cloud Era)クラウド時代の Spring Framework (aka Spring Framework in Cloud Era)
クラウド時代の Spring Framework (aka Spring Framework in Cloud Era)
 
Test Engineering on Mobage
Test Engineering on MobageTest Engineering on Mobage
Test Engineering on Mobage
 
Architecture of Professionals.az
Architecture of Professionals.azArchitecture of Professionals.az
Architecture of Professionals.az
 
Cloud Native Java:GraalVM
Cloud Native Java:GraalVMCloud Native Java:GraalVM
Cloud Native Java:GraalVM
 
【Primer】WebApp release in 3 hours! Programming from scratch Rails course
【Primer】WebApp release in 3 hours! Programming from scratch Rails course【Primer】WebApp release in 3 hours! Programming from scratch Rails course
【Primer】WebApp release in 3 hours! Programming from scratch Rails course
 
"Different software evolutions from Start till Release in PHP product" Oleksa...
"Different software evolutions from Start till Release in PHP product" Oleksa..."Different software evolutions from Start till Release in PHP product" Oleksa...
"Different software evolutions from Start till Release in PHP product" Oleksa...
 
Curious Coders Java Web Frameworks Comparison
Curious Coders Java Web Frameworks ComparisonCurious Coders Java Web Frameworks Comparison
Curious Coders Java Web Frameworks Comparison
 
Enterprise Architectures with Ruby (and Rails)
Enterprise Architectures with Ruby (and Rails)Enterprise Architectures with Ruby (and Rails)
Enterprise Architectures with Ruby (and Rails)
 
Nashorn
NashornNashorn
Nashorn
 
Groovy on Grails by Ziya Askerov
Groovy on Grails by Ziya AskerovGroovy on Grails by Ziya Askerov
Groovy on Grails by Ziya Askerov
 
Preparing your code for Java 9
Preparing your code for Java 9Preparing your code for Java 9
Preparing your code for Java 9
 
[D2 campus seminar]웹브라우저 엔진
[D2 campus seminar]웹브라우저 엔진[D2 campus seminar]웹브라우저 엔진
[D2 campus seminar]웹브라우저 엔진
 
Future of Grails
Future of GrailsFuture of Grails
Future of Grails
 
給 RD 的 Kubernetes 初體驗 (GDG Cloud KH 2019-08 version)
給 RD 的 Kubernetes 初體驗 (GDG Cloud KH 2019-08 version) 給 RD 的 Kubernetes 初體驗 (GDG Cloud KH 2019-08 version)
給 RD 的 Kubernetes 初體驗 (GDG Cloud KH 2019-08 version)
 
In defense of GWT-RPC By Colin Alworth
In defense of GWT-RPC By Colin AlworthIn defense of GWT-RPC By Colin Alworth
In defense of GWT-RPC By Colin Alworth
 
給 RD 的 Kubernetes 初體驗
給 RD 的 Kubernetes 初體驗給 RD 的 Kubernetes 初體驗
給 RD 的 Kubernetes 初體驗
 
New opportunities for Developers With GraalVM
New opportunities for Developers With GraalVMNew opportunities for Developers With GraalVM
New opportunities for Developers With GraalVM
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기
 

Andere mochten auch

JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
Koichi Sakata
 

Andere mochten auch (20)

Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
 
Arachne Unweaved (JP)
Arachne Unweaved (JP)Arachne Unweaved (JP)
Arachne Unweaved (JP)
 
Jjug ccc
Jjug cccJjug ccc
Jjug ccc
 
2017spring jjug ccc_f2
2017spring jjug ccc_f22017spring jjug ccc_f2
2017spring jjug ccc_f2
 
Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1Jjugccc2017spring-postgres-ccc_m1
Jjugccc2017spring-postgres-ccc_m1
 
VMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VMVMの歩む道。 Dalvik、ART、そしてJava VM
VMの歩む道。 Dalvik、ART、そしてJava VM
 
Java libraries you can't afford to miss
Java libraries you can't afford to missJava libraries you can't afford to miss
Java libraries you can't afford to miss
 
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求U-NEXT学生インターン、過激なJavaの学び方と過激な要求
U-NEXT学生インターン、過激なJavaの学び方と過激な要求
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
新卒2年目から始めるOSSのススメ~明日からできるコミットデビュー~
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug 日本Javaグループ2017年定期総会 #jjug
日本Javaグループ2017年定期総会 #jjug
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
 
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
ヤフーの広告レポートシステムをSpring Cloud Stream化するまで #jjug_ccc #ccc_a4
 
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3 データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
データ履歴管理のためのテンポラルデータモデルとReladomoの紹介 #jjug_ccc #ccc_g3
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
Introduction of Project Jigsaw
Introduction of Project JigsawIntroduction of Project Jigsaw
Introduction of Project Jigsaw
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 

Ähnlich wie Polyglot on the JVM with Graal (English)

Ähnlich wie Polyglot on the JVM with Graal (English) (20)

Polyglot on the JVM with Graal (Japanese)
Polyglot on the JVM with Graal (Japanese)Polyglot on the JVM with Graal (Japanese)
Polyglot on the JVM with Graal (Japanese)
 
MySQL Shell - The DevOps Tool for MySQL
MySQL Shell - The DevOps Tool for MySQLMySQL Shell - The DevOps Tool for MySQL
MySQL Shell - The DevOps Tool for MySQL
 
TDC2018SP | Trilha Java Enterprise - O Java EE morreu? EE4J e so um plugin? E...
TDC2018SP | Trilha Java Enterprise - O Java EE morreu? EE4J e so um plugin? E...TDC2018SP | Trilha Java Enterprise - O Java EE morreu? EE4J e so um plugin? E...
TDC2018SP | Trilha Java Enterprise - O Java EE morreu? EE4J e so um plugin? E...
 
General Capabilities of GraalVM by Oleg Selajev @shelajev
General Capabilities of GraalVM by Oleg Selajev @shelajevGeneral Capabilities of GraalVM by Oleg Selajev @shelajev
General Capabilities of GraalVM by Oleg Selajev @shelajev
 
REST in an Async World
REST in an Async WorldREST in an Async World
REST in an Async World
 
MOUG17 Keynote: What's New from Oracle Database Development
MOUG17 Keynote: What's New from Oracle Database DevelopmentMOUG17 Keynote: What's New from Oracle Database Development
MOUG17 Keynote: What's New from Oracle Database Development
 
Bringing Java into the Open
Bringing Java into the Open Bringing Java into the Open
Bringing Java into the Open
 
Why MySQL High Availability Matters
Why MySQL High Availability MattersWhy MySQL High Availability Matters
Why MySQL High Availability Matters
 
Cloud Native 자바 플랫폼: Graalvm Overview
Cloud Native 자바 플랫폼: Graalvm OverviewCloud Native 자바 플랫폼: Graalvm Overview
Cloud Native 자바 플랫폼: Graalvm Overview
 
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
 
JCP 20 Year Anniversary
JCP 20 Year AnniversaryJCP 20 Year Anniversary
JCP 20 Year Anniversary
 
TDC2018 | Trilha Java - The quest to the Language Graal: One VM to rule them...
TDC2018 | Trilha Java -  The quest to the Language Graal: One VM to rule them...TDC2018 | Trilha Java -  The quest to the Language Graal: One VM to rule them...
TDC2018 | Trilha Java - The quest to the Language Graal: One VM to rule them...
 
GraalVM: Run Programs Faster Everywhere
GraalVM: Run Programs Faster EverywhereGraalVM: Run Programs Faster Everywhere
GraalVM: Run Programs Faster Everywhere
 
The Future of Java and You
The Future of Java and YouThe Future of Java and You
The Future of Java and You
 
Deep Dive into Automating Oracle GoldenGate Using the New Microservices
Deep Dive into Automating Oracle GoldenGate Using the New MicroservicesDeep Dive into Automating Oracle GoldenGate Using the New Microservices
Deep Dive into Automating Oracle GoldenGate Using the New Microservices
 
Full Speed Ahead! (Ahead-of-Time Compilation for Java SE) [JavaOne 2017 CON3738]
Full Speed Ahead! (Ahead-of-Time Compilation for Java SE) [JavaOne 2017 CON3738]Full Speed Ahead! (Ahead-of-Time Compilation for Java SE) [JavaOne 2017 CON3738]
Full Speed Ahead! (Ahead-of-Time Compilation for Java SE) [JavaOne 2017 CON3738]
 
Java EE 8 - February 2017 update
Java EE 8 - February 2017 updateJava EE 8 - February 2017 update
Java EE 8 - February 2017 update
 
FOSDEM'18: MySQL InnoDB Cluster - MySQL HA Made Easy!
FOSDEM'18: MySQL InnoDB Cluster - MySQL HA Made Easy!FOSDEM'18: MySQL InnoDB Cluster - MySQL HA Made Easy!
FOSDEM'18: MySQL InnoDB Cluster - MySQL HA Made Easy!
 
20191119 Cloud Native Java : GraalVM
20191119 Cloud Native Java : GraalVM20191119 Cloud Native Java : GraalVM
20191119 Cloud Native Java : GraalVM
 
Democratizing Serverless—The Open Source Fn Project - Serverless Summit
Democratizing Serverless—The Open Source Fn Project - Serverless SummitDemocratizing Serverless—The Open Source Fn Project - Serverless Summit
Democratizing Serverless—The Open Source Fn Project - Serverless Summit
 

Mehr von Logico

Mehr von Logico (12)

Welcome, Java 15! (Japanese)
Welcome, Java 15! (Japanese)Welcome, Java 15! (Japanese)
Welcome, Java 15! (Japanese)
 
Look into Project Valhalla from CLR viewpoint
Look into Project Valhalla from CLR viewpointLook into Project Valhalla from CLR viewpoint
Look into Project Valhalla from CLR viewpoint
 
Jvmls 2019 feedback valhalla update
Jvmls 2019 feedback   valhalla updateJvmls 2019 feedback   valhalla update
Jvmls 2019 feedback valhalla update
 
Project Helidon Overview (Japanese)
Project Helidon Overview (Japanese)Project Helidon Overview (Japanese)
Project Helidon Overview (Japanese)
 
Oracle Code One 2018 Feedback (Server Side / Japanese)
Oracle Code One 2018 Feedback (Server Side / Japanese)Oracle Code One 2018 Feedback (Server Side / Japanese)
Oracle Code One 2018 Feedback (Server Side / Japanese)
 
ADBA (Asynchronous Database Access)
ADBA (Asynchronous Database Access)ADBA (Asynchronous Database Access)
ADBA (Asynchronous Database Access)
 
Nashorn in the future (Japanese)
Nashorn in the future (Japanese)Nashorn in the future (Japanese)
Nashorn in the future (Japanese)
 
Nashorn in the future (English)
Nashorn in the future (English)Nashorn in the future (English)
Nashorn in the future (English)
 
これからのNashorn
これからのNashornこれからのNashorn
これからのNashorn
 
Nashorn in the future (English)
Nashorn in the future (English)Nashorn in the future (English)
Nashorn in the future (English)
 
Nashorn: JavaScript Running on Java VM (English)
Nashorn: JavaScript Running on Java VM (English)Nashorn: JavaScript Running on Java VM (English)
Nashorn: JavaScript Running on Java VM (English)
 
Nashorn : JavaScript Running on Java VM (Japanese)
Nashorn : JavaScript Running on Java VM (Japanese)Nashorn : JavaScript Running on Java VM (Japanese)
Nashorn : JavaScript Running on Java VM (Japanese)
 

Kürzlich hochgeladen

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Kürzlich hochgeladen (20)

Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 

Polyglot on the JVM with Graal (English)