SlideShare una empresa de Scribd logo
B 
 
DSL

G VM










M 
M
@mthmuldersOGB
APAC
Virtual
Tour
D 
S 
L
https://pxhere.com/en/photo/1057524
@mthmuldersOGB
APAC
Virtual
Tour
SELECT


country,










COUNT(1)
AS
count

FROM




Customer

GROUP
BY
country;

@mthmuldersOGB
APAC
Virtual
Tour
Given
my
account
has
a
balance
of
€
430

When
I
receive
a
money
transfer
of
€
500

Then
my
account
should
have
a
balance
of
€
930

@mthmuldersOGB
APAC
Virtual
Tour
Setup(





Boat
on
StartingShore,





Wolf
on
StartingShore,





Sheep
on
StartingShore,





Cabbage
on
StartingShore

)
execute
(





Boat
move
Cabbage
to
StartingShore,





Boat
move
Sheep
to
DestinationShore,





Boat
move
None
to
StartingShore,





Boat
move
Cabbage
to
DestinationShore,





Boat
move
Sheep
to
StartingShore,





Boat
move
Wolf
to
DestinationShore,





Boat
move
None
to
StartingShore,





Boat
move
Sheep
to
DestinationShore

)

https://github.com/NRBPerdijk/dsl-for-the-dense/
@mthmuldersOGB
APAC
Virtual
Tour
+
+
>
+
+
+
+
+
[
<
+
>
-
]
+
+
+
+
+
+
+
+
[
<
+
+
+
+
+
+
>
-
]
<
.

@mthmuldersOGB
APAC
Virtual
Tour
B
This
program
adds
the
numbers
2
and
5



+
+















Store
the
number
2
in
the
f rst
slot

>
+
+
+
+
+







Store
the
number
5
in
the
second
slot



[

















Move
back
and
forth
between
f rst
and
second
slot







<
+
>
-







While
"moving"
ones
from
the
second
to
the
f rst
slot

]



The
f rst
slot
now
has
'7'
in
it
but
we
need
to
output
the
ASCII
value
for
that

The
ASCII
value
is
48
higher
than
the
number
we
have



The
second
slot
is
now
empty

It
will
act
as
a
counter
so
we
can
add
6
*
8
to
the
f rst
slot

+
+
+
+
+
+
+
+



Store
8
in
it



[

















Again
move
back
and
forth
between
f rst
and
second
slot





<
+
+
+
+
+
+

while
adding
6
to
the
f rst
slot





>
-











before
reducing
the
counter
in
the
second
slot

]



<
.















Go
back
to
the
f rst
slot
and
print
it

@mthmuldersOGB
APAC
Virtual
Tour
0 1 2 3 4 ... 29
997 29
998 29
999
2 5 3 0 0 0 0 0
↑
@mthmuldersOGB
APAC
Virtual
Tour
command meaning
+ increase
value
­ decrease
value
. print
value
to
std
out
, read
one
byte
from
std
in
[ if
value
eq
0,
jump
after
matching
]
] if
value
neq
0,
jump
after
matching
[
< move
pointer
left
> move
pointer
right
@mthmuldersOGB
APAC
Virtual
Tour
https://www.thepinkhumanist.com/articles/330-life-of-alan-turing-examined-in-a-new-graphic-novel
@mthmuldersOGB
APAC
Virtual
Tour
https://commons.wikimedia.org/wiki/File:USA_tar_bubble_la_brea_CA.jpg
@mthmuldersOGB
APAC
Virtual
Tour
G VM
“One
VM
to
rule
them
all
cc-by-sa/2.0
-
©
Lairich
Rig
-
https://www.geograph.org.uk/photo/3203827
@mthmuldersOGB
APAC
Virtual
Tour
@mthmuldersOGB
APAC
Virtual
Tour
B
yapi.bf
calculating
15
digits
of
π
Runtime Average
time
(ms/op) Error
Java
HotSpot(TM)
64-Bit
Server
VM 53 ±
1
OpenJDK
GraalVM
CE
19.0.0 45 ±
1
All
tests
are
ran
on
an
2018
MacBook
Pro
with
2.6
GHz
Intel
Core
i7
and
16
GB
2400
MHz
DDR4.
The
machine
runs
macOS
Mojave
10.14.4
and
JDK
1.8.0_212.
Tests
measured
with
 .
Each
test
ran
5
times
with
5
warmup
iterations.jmh
@mthmuldersOGB
APAC
Virtual
Tour
B
yapi.bf
calculating
45
digits
of
π
Runtime Average
time
(ms/op) Error
Java
HotSpot(TM)
64-Bit
Server
VM 207 ±
2
OpenJDK
GraalVM
CE
19.0.0 185 ±
3
All
tests
are
ran
on
an
2018
MacBook
Pro
with
2.6
GHz
Intel
Core
i7
and
16
GB
2400
MHz
DDR4.
The
machine
runs
macOS
Mojave
10.14.4
and
JDK
1.8.0_212.
Tests
measured
with
 .
Each
test
ran
5
times
with
5
warmup
iterations.jmh
@mthmuldersOGB
APAC
Virtual
Tour
T
cc-by-sa/2.5
-
©
Darvin
DeShazer
-
https://mushroomobserver.org/2538
“open
source
library
for
building
programming
language
implementations
as
interpreters
for
self-modifying
Abstract
Syntax
Trees.
@mthmuldersOGB
APAC
Virtual
Tour
A 
S 
T
ROOT
INCR_VAL INCR_VAL INCR_VAL INCR_VAL INCR_VAL JUMP INCR_VAL INCR_VAL
DECR_PTR INCR_VAL INCR_PTR DECR_VAL
(part
of
the
program
that
adds
5
and
2)
@mthmuldersOGB
APAC
Virtual
Tour
https://chrisseaton.com/rubytruffle/pldi17-truffle/pldi17-truffle.pdf
@mthmuldersOGB
APAC
Virtual
Tour
P 
E
Calculate
 
for
positive
integers
If
we
know
(or
assume)
that
 ,
the
program
becomes
simpler:
x
n
f (x, n) =
⎧
⎩
⎨
⎪
⎪
1
,(f (x, 0.5 ∗ n))
2
x ∗ f (x, n − 1),
if n = 0
if n is
even
otherwise
n = 5
f (x) = x ∗ ( )x
2
2
@mthmuldersOGB
APAC
Virtual
Tour
N 
 
POJO
public
class
BFIncrementByteNode
extends
Node
{





/**
The
slot
that
holds
the
data
pointer.
 





private
f nal
FrameSlot
dataPointerSlot;







public
BFIncrementByteNode(f nal
FrameSlot
dataPointerSlot)
{









this.dataPointerSlot
=
dataPointerSlot;





}







@Override
public
void
execute(f nal
VirtualFrame
frame)
{









 
Find
the
memory
location









f nal
int
dataPointer
=
FrameUtil.getIntSafe(frame,
dataPointerSlot);









f nal
FrameSlot
currentByteSlot
=
frame.getFrameDescriptor().f ndFrameSlot(dataPointer);











 
Find
the
current
value
in
that
location









f nal
byte
currentValue
=
FrameUtil.getByteSafe(frame,
currentByteSlot);











 
Increase
the
current
value









f nal
byte
newValue
=
(byte)
(1
+
currentValue);











 
Store
the
current
value









frame.setByte(getSlot(frame),
newValue);





}

}

@mthmuldersOGB
APAC
Virtual
Tour
B
https://pxhere.com/en/photo/493605
@mthmuldersOGB
APAC
Virtual
Tour
B
@Override

public
void
execute(f nal
VirtualFrame
frame)
{





f nal
int
currentValue
=
someCalculation();





doPrint(getContext().getOutput(),
(char)
currentValue);

}



@TruffleBoundary

private
void
doPrint(f nal
PrintWriter
out,
f nal
char
value)
{





out.print(value);





out.flush();

}

@mthmuldersOGB
APAC
Virtual
Tour
S
https://www.mammoet.com/cases/Tennet/
@mthmuldersOGB
APAC
Virtual
Tour
S
@Specialization(guards
=
"b
 
0")

public
double
divide(int
a,
int
b)
{





return
a
/
b;

}

@mthmuldersOGB
APAC
Virtual
Tour
S
@Specialization(rewriteOn
=
ArithmeticException.class)

int
doAddNoOverflow(int
a,
int
b)
{





return
Math.addExact(a,
b);

}



@Specialization

long
doAddWithOverflow(int
a,
int
b)
{





return
a
+
b;

}

execute(Integer.MAX_VALUE
-
1,
1)
 
doAddNoOverflow(Integer.MAX_VALUE
-
1,
1)



execute(Integer.MAX_VALUE



,
1)
 
doAddNoOverflow(Integer.MAX_VALUE,
1)






































throws
ArithmeticException



































 
doAddWithOverflow(Integer.MAX_VALUE,
1)



execute(Integer.MAX_VALUE
-
1,
1)
 
doAddWithOverflow(Integer.MAX_VALUE
-
1,
1)

@mthmuldersOGB
APAC
Virtual
Tour
W 
 
G VM
 
 
 
 
JVM
function
abs
(int
i)






if
(
 
we
saw
only
positive
integers
in
the
input
 
)
{









return
i;





}
else
{










transferToInterpreterAndInvalidate;









return
i
<
0
?
 i
:
i;





}

}

@mthmuldersOGB
APAC
Virtual
Tour
B 
 
 
 
T
@mthmuldersOGB
APAC
Virtual
Tour
@mthmuldersOGB
APAC
Virtual
Tour
L
Converts
a
sequence
of
characters
into
a
sequence
of
tokens.








@mthmuldersOGB
APAC
Virtual
Tour
P
Converts
a
sequence
of
tokens
into
(hierarchical)
data
structure.








@mthmuldersOGB
APAC
Virtual
Tour
P 
 
L 

1.
Write
some
regular
expressions
2.
Use
a
parser
generator
(like
 )ANTLR
cc-by-nc/2.5
-
©
Randall
Munroe
-
https://www.xkcd.com/1171/
@mthmuldersOGB
APAC
Virtual
Tour
I 
 

@mthmuldersOGB
APAC
Virtual
Tour
G VM
U
GraalVM
comes
with
the
GraalVM
Updater
(gu)
Use
gu
to
install
components,
such
as
language
packs
or
tools.
e.g.
gu
install
native­image
gu
-L
install
brainfuck-0.1-SNAPSHOT-component.jar

@mthmuldersOGB
APAC
Virtual
Tour
C
Distribute
your
language
implementation
as
a
component:
$
tree

.

├──
META-INF

│


├──
MANIFEST.MF

│


├──
permissions

│


└──
symlinks

└──
jre





└──
languages









└──
bf













├──
bin













│


└──
bf













├──
brainfuck.jar













└──
launcher

















└──
bf launcher.jar



6
directories,
6
f les

@mthmuldersOGB
APAC
Virtual
Tour
U 
 
 

1.
Prepare
source
code
2.
Prepare
GraalVM
polyglot
context
3.
Evaluate
the
source
code
input
=
"+
+
>
+
+
+
+
+
[
<
+
>
-
]
+
+
+
+
+
+
+
+
[
<
+
+
+
+
+
+
>
-
]
<
.";

source
=
Source.newBuilder("bf",
input,
"user
input").build();

output
=
new
ByteArrayOutputStream();

context
=
Context.newBuilder("bf").out(output).build();

context.eval(source);

System.out.println(output.toString());

@mthmuldersOGB
APAC
Virtual
Tour
T
“Implementing
your
own
language
using
GraalVM
will
not
only
give
you
high
performance.
More
importantly,
it
allows
your
language
to
connect
with
the
rich
tooling
provided
by
the
GraalVM
ecosystem.
https://www.graalvm.org/docs/graalvm-as-a-platform/
https://pxhere.com/en/photo/1067853
@mthmuldersOGB
APAC
Virtual
Tour
G 
L 
D
Start
the
launcher
with
­­inspect
Debugger
listening
on
port
9229.

To
start
debugging,
open
the
following
URL
in
Chrome:





chrome­devtools://devtools/bundled/js_app.html?ws=127.0.0.1:9229/77b52d12­53f20cb0ab35

@mthmuldersOGB
APAC
Virtual
Tour
@mthmuldersOGB
APAC
Virtual
Tour
G 
L 
C 

Start
the
launcher
with
­­coverage,
and
optionally


­­coverage.Output=detailed

­­coverage.OutputFile=coverage.txt


Code
coverage
histogram.



Shows
what
percent
of
each
element
was
covered
during
execution




Path






















































|

Statements
|



Lines
|



Roots





~/Code/brainfuck jvm/launcher/src/test/resources/sample.bf
|




100.00%
|

100.00%
|



0.00%




@mthmuldersOGB
APAC
Virtual
Tour
W 
 
 

The
Truffle
framework
has
an
Instrument
API
to
write
other
tools:
1.
Source
code-related
events
2.
Allocation
events
3.
Language
runtime
and
thread
creation
events
4.
Application
execution
events
@mthmuldersOGB
APAC
Virtual
Tour
W 

Yes,
you
can
run
any
language
with
GraalVM.

...
but
it
may
take
some
time.
It's
certainly
fun

...
and
it
might
even
be
profitable.
@mthmuldersOGB
APAC
Virtual
Tour
T 

You
don't
need
to
write
a
parser
yourself

(and
maybe
you
don't
want
to,
either)
Take
time
to
think
about
the
AST
using
a
wrong
structure
leads
to
hard-to-track
bugs
refactoring
it
later
is
very
hard
and
time-consuming
@mthmuldersOGB
APAC
Virtual
Tour
Q
 
A








Sample
code:

Follow-up
project:

http://bit.ly/brainfuck-jvm
https://bit.ly/scheme4graalvm
@mthmuldersOGB
APAC
Virtual
Tour

Más contenido relacionado

Más de Maarten Mulders

React in 40 minutes (JCON)
React in 40 minutes (JCON) React in 40 minutes (JCON)
React in 40 minutes (JCON)
Maarten Mulders
 
React in 50 minutes (Bucharest Software Craftsmanship Community)
React in 50 minutes (Bucharest Software Craftsmanship Community)React in 50 minutes (Bucharest Software Craftsmanship Community)
React in 50 minutes (Bucharest Software Craftsmanship Community)
Maarten Mulders
 
React in 50 Minutes (JNation)
 React in 50 Minutes (JNation)  React in 50 Minutes (JNation)
React in 50 Minutes (JNation)
Maarten Mulders
 
SSL/TLS for Mortals (JavaLand)
SSL/TLS for Mortals (JavaLand) SSL/TLS for Mortals (JavaLand)
SSL/TLS for Mortals (JavaLand)
Maarten Mulders
 
Making Maven Marvellous (J-Fall)
Making Maven Marvellous (J-Fall)Making Maven Marvellous (J-Fall)
Making Maven Marvellous (J-Fall)
Maarten Mulders
 
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)
Maarten Mulders
 
SSL/TLS for Mortals (UtrechtJUG)
SSL/TLS for Mortals (UtrechtJUG)SSL/TLS for Mortals (UtrechtJUG)
SSL/TLS for Mortals (UtrechtJUG)
Maarten Mulders
 
Building a DSL with GraalVM (javaBin online)
Building a DSL with GraalVM (javaBin online)Building a DSL with GraalVM (javaBin online)
Building a DSL with GraalVM (javaBin online)
Maarten Mulders
 
SSL/TLS for Mortals (Lockdown Lecture)
SSL/TLS for Mortals (Lockdown Lecture)SSL/TLS for Mortals (Lockdown Lecture)
SSL/TLS for Mortals (Lockdown Lecture)
Maarten Mulders
 
React in 50 Minutes (OpenValue)
React in 50 Minutes (OpenValue) React in 50 Minutes (OpenValue)
React in 50 Minutes (OpenValue)
Maarten Mulders
 
React in 50 Minutes (DevNexus)
React in 50 Minutes (DevNexus) React in 50 Minutes (DevNexus)
React in 50 Minutes (DevNexus)
Maarten Mulders
 
React in 45 Minutes (Jfokus)
React in 45 Minutes (Jfokus)React in 45 Minutes (Jfokus)
React in 45 Minutes (Jfokus)
Maarten Mulders
 
Building web applications with React (Jfokus)
Building web applications with React (Jfokus)Building web applications with React (Jfokus)
Building web applications with React (Jfokus)
Maarten Mulders
 
SSL/TLS for Mortals (Devoxx)
 SSL/TLS for Mortals (Devoxx) SSL/TLS for Mortals (Devoxx)
SSL/TLS for Mortals (Devoxx)
Maarten Mulders
 
Building a DSL with GraalVM (CodeOne)
Building a DSL with GraalVM (CodeOne)Building a DSL with GraalVM (CodeOne)
Building a DSL with GraalVM (CodeOne)
Maarten Mulders
 
Building a DSL with GraalVM (Full Stack Antwerpen)
Building a DSL with GraalVM (Full Stack Antwerpen)Building a DSL with GraalVM (Full Stack Antwerpen)
Building a DSL with GraalVM (Full Stack Antwerpen)
Maarten Mulders
 
Building a DSL with GraalVM (Devoxx PL)
Building a DSL with GraalVM (Devoxx PL) Building a DSL with GraalVM (Devoxx PL)
Building a DSL with GraalVM (Devoxx PL)
Maarten Mulders
 
Building a DSL with GraalVM (VoxxedDays Luxembourg)
Building a DSL with GraalVM (VoxxedDays Luxembourg)Building a DSL with GraalVM (VoxxedDays Luxembourg)
Building a DSL with GraalVM (VoxxedDays Luxembourg)
Maarten Mulders
 
Mastering Microservices with Kong (DevoxxUK 2019)
Mastering Microservices with Kong (DevoxxUK 2019)Mastering Microservices with Kong (DevoxxUK 2019)
Mastering Microservices with Kong (DevoxxUK 2019)
Maarten Mulders
 
Mastering Microservices with Kong (CodeMotion 2019)
Mastering Microservices with Kong (CodeMotion 2019)Mastering Microservices with Kong (CodeMotion 2019)
Mastering Microservices with Kong (CodeMotion 2019)
Maarten Mulders
 

Más de Maarten Mulders (20)

React in 40 minutes (JCON)
React in 40 minutes (JCON) React in 40 minutes (JCON)
React in 40 minutes (JCON)
 
React in 50 minutes (Bucharest Software Craftsmanship Community)
React in 50 minutes (Bucharest Software Craftsmanship Community)React in 50 minutes (Bucharest Software Craftsmanship Community)
React in 50 minutes (Bucharest Software Craftsmanship Community)
 
React in 50 Minutes (JNation)
 React in 50 Minutes (JNation)  React in 50 Minutes (JNation)
React in 50 Minutes (JNation)
 
SSL/TLS for Mortals (JavaLand)
SSL/TLS for Mortals (JavaLand) SSL/TLS for Mortals (JavaLand)
SSL/TLS for Mortals (JavaLand)
 
Making Maven Marvellous (J-Fall)
Making Maven Marvellous (J-Fall)Making Maven Marvellous (J-Fall)
Making Maven Marvellous (J-Fall)
 
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)
SSL/TLS for Mortals (Oracle Groundbreaker EMEA Virtual Tour)
 
SSL/TLS for Mortals (UtrechtJUG)
SSL/TLS for Mortals (UtrechtJUG)SSL/TLS for Mortals (UtrechtJUG)
SSL/TLS for Mortals (UtrechtJUG)
 
Building a DSL with GraalVM (javaBin online)
Building a DSL with GraalVM (javaBin online)Building a DSL with GraalVM (javaBin online)
Building a DSL with GraalVM (javaBin online)
 
SSL/TLS for Mortals (Lockdown Lecture)
SSL/TLS for Mortals (Lockdown Lecture)SSL/TLS for Mortals (Lockdown Lecture)
SSL/TLS for Mortals (Lockdown Lecture)
 
React in 50 Minutes (OpenValue)
React in 50 Minutes (OpenValue) React in 50 Minutes (OpenValue)
React in 50 Minutes (OpenValue)
 
React in 50 Minutes (DevNexus)
React in 50 Minutes (DevNexus) React in 50 Minutes (DevNexus)
React in 50 Minutes (DevNexus)
 
React in 45 Minutes (Jfokus)
React in 45 Minutes (Jfokus)React in 45 Minutes (Jfokus)
React in 45 Minutes (Jfokus)
 
Building web applications with React (Jfokus)
Building web applications with React (Jfokus)Building web applications with React (Jfokus)
Building web applications with React (Jfokus)
 
SSL/TLS for Mortals (Devoxx)
 SSL/TLS for Mortals (Devoxx) SSL/TLS for Mortals (Devoxx)
SSL/TLS for Mortals (Devoxx)
 
Building a DSL with GraalVM (CodeOne)
Building a DSL with GraalVM (CodeOne)Building a DSL with GraalVM (CodeOne)
Building a DSL with GraalVM (CodeOne)
 
Building a DSL with GraalVM (Full Stack Antwerpen)
Building a DSL with GraalVM (Full Stack Antwerpen)Building a DSL with GraalVM (Full Stack Antwerpen)
Building a DSL with GraalVM (Full Stack Antwerpen)
 
Building a DSL with GraalVM (Devoxx PL)
Building a DSL with GraalVM (Devoxx PL) Building a DSL with GraalVM (Devoxx PL)
Building a DSL with GraalVM (Devoxx PL)
 
Building a DSL with GraalVM (VoxxedDays Luxembourg)
Building a DSL with GraalVM (VoxxedDays Luxembourg)Building a DSL with GraalVM (VoxxedDays Luxembourg)
Building a DSL with GraalVM (VoxxedDays Luxembourg)
 
Mastering Microservices with Kong (DevoxxUK 2019)
Mastering Microservices with Kong (DevoxxUK 2019)Mastering Microservices with Kong (DevoxxUK 2019)
Mastering Microservices with Kong (DevoxxUK 2019)
 
Mastering Microservices with Kong (CodeMotion 2019)
Mastering Microservices with Kong (CodeMotion 2019)Mastering Microservices with Kong (CodeMotion 2019)
Mastering Microservices with Kong (CodeMotion 2019)
 

Último

Mobile app Development Services | Drona Infotech
Mobile app Development Services  | Drona InfotechMobile app Development Services  | Drona Infotech
Mobile app Development Services | Drona Infotech
Drona Infotech
 
Lecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptxLecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptx
TaghreedAltamimi
 
How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?
ToXSL Technologies
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
Grant Fritchey
 
一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理
dakas1
 
Top 9 Trends in Cybersecurity for 2024.pptx
Top 9 Trends in Cybersecurity for 2024.pptxTop 9 Trends in Cybersecurity for 2024.pptx
Top 9 Trends in Cybersecurity for 2024.pptx
devvsandy
 
SQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure MalaysiaSQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure Malaysia
GohKiangHock
 
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
dakas1
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
VALiNTRY360
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
mz5nrf0n
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
Rakesh Kumar R
 
All you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVMAll you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVM
Alina Yurenko
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
Odoo ERP Vs. Traditional ERP Systems – A Comparative Analysis
Odoo ERP Vs. Traditional ERP Systems – A Comparative AnalysisOdoo ERP Vs. Traditional ERP Systems – A Comparative Analysis
Odoo ERP Vs. Traditional ERP Systems – A Comparative Analysis
Envertis Software Solutions
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
Peter Muessig
 
Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
brainerhub1
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
Remote DBA Services
 
Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !
Marcin Chrost
 
Requirement Traceability in Xen Functional Safety
Requirement Traceability in Xen Functional SafetyRequirement Traceability in Xen Functional Safety
Requirement Traceability in Xen Functional Safety
Ayan Halder
 

Último (20)

Mobile app Development Services | Drona Infotech
Mobile app Development Services  | Drona InfotechMobile app Development Services  | Drona Infotech
Mobile app Development Services | Drona Infotech
 
Lecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptxLecture 2 - software testing SE 412.pptx
Lecture 2 - software testing SE 412.pptx
 
How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?How Can Hiring A Mobile App Development Company Help Your Business Grow?
How Can Hiring A Mobile App Development Company Help Your Business Grow?
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
 
一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理
 
Top 9 Trends in Cybersecurity for 2024.pptx
Top 9 Trends in Cybersecurity for 2024.pptxTop 9 Trends in Cybersecurity for 2024.pptx
Top 9 Trends in Cybersecurity for 2024.pptx
 
SQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure MalaysiaSQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure Malaysia
 
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
 
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdfTop Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
Top Benefits of Using Salesforce Healthcare CRM for Patient Management.pdf
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
 
All you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVMAll you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVM
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
Odoo ERP Vs. Traditional ERP Systems – A Comparative Analysis
Odoo ERP Vs. Traditional ERP Systems – A Comparative AnalysisOdoo ERP Vs. Traditional ERP Systems – A Comparative Analysis
Odoo ERP Vs. Traditional ERP Systems – A Comparative Analysis
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
 
Unveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdfUnveiling the Advantages of Agile Software Development.pdf
Unveiling the Advantages of Agile Software Development.pdf
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
 
Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !Enums On Steroids - let's look at sealed classes !
Enums On Steroids - let's look at sealed classes !
 
Requirement Traceability in Xen Functional Safety
Requirement Traceability in Xen Functional SafetyRequirement Traceability in Xen Functional Safety
Requirement Traceability in Xen Functional Safety
 

Building a DSL with GraalVM (Oracle Groundbreaker APAC Virtual Tour)