►
Description
WebAssembly is currently being actively developed on all sides - by browser vendors, language implementors, game engines developers and many others. What is it and why is it important? How can we use it to speed up our apps without going into scary lands of unsafe native languages? Let's take a deep breath and try to figure these things out together.
Presented by: Ingvar Stepanyan (@rreverser) — Rust + WebAssembly = ❤️
JS/D2D Developer, Rust/WebAssembly enthusiast, RustFest Kyiv Speaker | Cloudflare, London
Slides:
[Rust Hungary Meetup #1, 2017-09-23, Mozilla Hungary Community Space, Budapest]
https://www.meetup.com/Rust-Hungary-Meetup/events/242955063/
A
A
B
C
B
I
was
going
to
more
or
less
repeats
attack
from
Ross
Fez
that
I
was
being
on
web
awesome
VM
by
Qasim,
GS
&
härtel
works
internally
bugs
and
a
ketone
society
will
be
known,
so
many
system
developers,
but
mostly
JavaScript
developers
and
I,
had
to
change.
But
it
looks
like
most
of
you
are
not
have
estate
developer
site.
They
paint
your
fence
again.
D
B
B
I
will
get
Claude
systems
engineer,
partly-mostly
I
can
see,
but
my
background
is
mostly
JavaScript
I
used
to
do
that
like
full
time
so
now,
I'm
trying
to
balance
just
not
to
lose
ever
since
this
happens
in
Java
Golden's,
it's
like
votes
and
to
fast,
but
at
the
same
time
keeping
it
phone
systems
so
yeah.
Let's
talk
about
the
boss
on
the
end,
it
will
be
like
in
three
parts
so
as
I
like
to
call
it
Christmas
Carol.
If
you're
familiar
easiest,
you
can
story.
Anyone
for
me.
Is
it.
B
B
So
binary
ast
is
very
recent
development
that
historically
in
contests
by
Mozilla
team,
what
it's
and
it's
important
to
understand
it
to
understand
like
what
was
a
robust
in
bees
or
what
it's
not
so
binary
St
is
currently
stage.
One
proposal,
there's
like
four
stages
in
JavaScript
for
many
proposals
to
the
language
is
that
one
purpose,
meaning
it
was
accepted
and
it's
being
developed
actually
to
be
implemented
in
browsers.
So
the
basic
idea
is
that
Mozilla,
together
with
some
Facebook
people,
looked
into
measure,
websites
and
Raqqah
said
well.
B
But
it's
very
hard
to
jump
suit.
Semantics,
where,
like
some
variable,
can
be
before
it's
defined.
You
know
and
you
need
to
move
things
around
and
you
can't
really
get
entire
context.
So
the
idea
of
this
proposal
is
instead
of
having
entire
job
switch
back
and
we
also
like
special
unicode
characters
out
of
40
variables
and
etc.
You
can
just
decode
ever
seen
a
convenient
binary
format
where
just
encode
the
lecture
ast
as
binary
binary
as
as
a
three.
B
We
also
know
it's
described
in
the
beginning
of
the
file
and
then
like
Jesse's.
So
basically,
it's
exactly
the
same
JavaScript
except
it's
structurally
compressed
into
a
proper
data
structure,
and
it's
very
fast
course
it's
much
easy
to
what
we's,
because
you
can
just
compress
it
and
set
aside
pants
and
browser
they
do
the
rest
on
client
side.
So
what
this
confirms?
This
experiment
is
that
parsing
time
became
like
three
times
faster
compared
to
just
parsing,
javascript
lazy.
B
D
B
Let's
say
you
have
some
really
stupid
example:
the
season
every
CS
keep
a
notch
in
numbers
and
it's
very
valuable
negation
for
Watson
for
I
know
it
because
we
are
the
Carson
two
times
when
we
don't
actually
need
that.
But
anyway,
and
it's
a
pretty
good
at
trying
to
optimize
it
out
to
figure
out
all
the
types
and
so
on,
but
still
judge,
which
has
its
limitations.
Because
types
can
change
in
runtime
you
can
replace
function
is
another
you
can.
B
You
have
only
floats
like
no
problem,
integers
and
so
on,
and
you
know
constantly,
as
it
will
search
you
can
actually
give
hints
to
just
with
engineer
advanced
about
what
types
you
have,
and
so
it's
an
typed
language
and
this
hints
were
formalize
a
single
spec
where
it's
still
backwards
compatible.
It's
just
plain
old
JavaScript,
so
you
can
still
run
it
all
browsers,
don't
know
some
chairs,
but
new
browsers
can
just
parse
it
with
completely
separate
asset
and
run
in
completely
separate
engine
and
not
like
JIT
compiler,
and
it
actually
works.
B
That's
static
language,
just
like
C
or
after
whatever
else
so
to
each
operation.
You
have
explicit
type
Marcos.
So,
in
this
case,
it's
just
operation
of
binary
or
with
you,
which
basically
con
which,
by
John
systematic,
just
converts
any
float
to
integer
but
for
oxygen,
has
enabled
engine.
It
just
hints
it
well.
In
most
places
we
have
only
integers
and
it
doesn't
need
to
do
any
type,
guessing
Triton
types
whatever
it
can
just
go
through
this,
compile
it
once
statically
and
just
reuse.
This
function.
B
If
you
simple
Fibonacci
example,
you
can
see
that
it
gives
like
for
it
speed
ups,
just
because
engine
knows
all
the
tax
and
it's
all
taken
apart
already
and
the
fun
part
needs
worked
even
on
more
complicated
amis,
obviously
than
just
some
simple
function.
So
this
I
don't
know
if
Jesus
is
down
by
Mozilla
couple
of
years
ago,
was
reported
entire
Unreal
Engine
to
ask
Jess
by
just
cross
compile.
It
is
a
subset
of
JavaScript
from
C
and
C++,
and
what
which
is
mostly
close
to
negative,
and
he
couldn't
see
any
legs
over
teller.
B
What
couldn't
be
achievable?
It's
just
right,
we're
just
it
may
be
it
killed
them.
Well,
in
this
case,
I
could
just
cross,
compile
the
same
code
like
without
any
extra
effort,
and
it
just
worked
so
what
awesomely
ease?
Oh,
the
ghost
of
Christmas
present
as
I
like
to
call
it.
It's
combination
of
previous
two
ideas,
basically
or
more
problem
binary
jet,
was
derived
from
idea
for
passing
where
browser
engine
vendors
decided
that
make
yes
is
subset
of
jobs.
Reports
in
that
was
compatible
advice,
but
we
have
all
these
extra
type
annotations.
B
Now
the
just
becomes
even
bigger
and
when
you
just
compiled
like
huge
game
engine.
Well,
it's
not
very
nice
to
wait
while
you
download,
like
twenty
or
fifty
megabytes
of
JavaScript,
just
to
stop
showing
something.
So
they
decided
to
develop
a
partner
format
is
that
that
would
represent
all
this
native
operations
in
a
cross-platform
format
that
they
could
just
convert
to
machine
code,
research
it
compile
it,
but
it
would
be
much
smaller
sense
of
original
child,
strict,
always
see
whatever.
B
So,
basically,
it's
a
common
cross-platform
binary
representation
of
native
code,
whereas
native
code
is
usually
like
specific
roles,
CPU
for
operating
system
and
so
on
and
awesome
just
Maps
directly
to
web
awesomely.
So
all
these
type
annotations
get
converted
to
prompt
instructions
where
they
just
operate
these
technologies
at
each
point
of
time
and.
A
B
B
B
B
Exclusively
have
types
on
every
single
operand
lake,
the
comparison
to
second
to
be
integers,
and
then
we
have
inconel
like
instruction
what
happens
if
it's
true
and
so
on?
So
it's
pretty
much
like
this
original
example.
It's
relatively
reasonable,
but
the
main
point
is
that
it's
very
well
compressible,
because
you
have
only
very
small
subset
of
instructions
that
you
need
to
care
about,
so
whatever
passionately
is
its
it
cuz.
It's
also
like
this
text
format
for
humans
trying
to
fill
table.
B
As
I
said,
this
stack
machine
is
binary
format
where
all
the
values
I
just
put
on
stack
and
you
can
come
back
to
support
if
you
are
familiar,
is
like
polish
notation.
Fortunately
like
it's
very
similar,
and
it
has
several
compare
like
kind
of
to
compression
layers
on
top
of
the
binary
format,
one
of
which
being
still
in
development,
is
actual
compression,
where
you
can
have
own
functions
for
sections
of
your
binary.
That
tells
how
to
read
the
binary.
B
So
you
have
to
be
clear
like
if
you
didn't
need
ask
Jeff
before.
If
he
didn't
want
to
run
your
native
code
in
browse,
we
probably
don't
need
web
part
simply
as
well,
because
it's
exactly
the
same
thing,
it
reads
is
the
same
engine
it
just
a
little
smaller
mutations
because
it
adds
like
mo
low-level
operations
to
the
game.
But
if
you
do
want
to
do
some
heavy
calculations
in
prod
on
objects,
it's
probably
nothing!
Okay.
So
how
do
we
use
it
on
a
page?
It's
usually
done
like
this.
B
B
So
the
button
is
just
like
at
modules
that
is
complimentary
to
each
other
script,
but
you
can
pass
it
like
own
inputs
and
you
can
give
NSS
it
it
explores.
They
simply
use
it.
If
you
don't
want
to
really
do
some
transformations,
but
it's
not
really
recommended
because
then
it
will
block
your
UI
or
server
side
while
call
the
code
is
compiler,
which
is
usually
not
the
things
if
you
want,
but
at
least
it's
much
easier
to
use
for
small
experiments
where
you
can
just
instantiate
separate
instances
concurrently.
B
So
how
can
we
use
it?
Because,
obviously
you
you
don't
want
to
write
this
like
hand,
so
we're
passing
the
text
board.
You
know
you
can,
and
there
are
some
tutorials
that
show
cathartic,
it's
not
the
most
convenient
to
do.
You
usually
want
to
just
cross,
compile
suppose
that
you
already
have
another
language
and
that's
where
I'm
tripping
comes
to
play.
So
what
is
Krypton
is
eats
at
projects
that
evolved
from
C
compiler
called
C.
B
C
B
Or
any
other
comparison,
you
know
what
encrypting
did
they
just
put
silent
but
replace
some
small
parts
of
it.
So,
instead
of
the
girls
from
native
objects
and
made
it
exactly
table,
it
just
generates
John
script
over
by
something
instead,
so
initially
it
was
just
generating
passengers
out
of
native
food.
B
Now
it's
useful,
possibly,
which
is
essentially
the
same
thing,
just
different
representation
for
so
it
was
an
easy
design
reject
and
now
as
convenient
students
or
us
is
also
based
on
a
little
VMs
Florio
said
Russ
just
takes
bastard,
it
collects
to
reduce
native
objects
and
a
to
exhibit.
So,
even
though
I'm
scripting
is
a
fork
of
C
compiler,
what
we
can
do
to
use
Russ
to
compile
to
the
bus
into
a
desk
chairs,
we
can
just
skip
some
parts
of
it
when
we
just
seen
them
together.
B
We
see
that
we
can
go
directly
from
a
little
bit
code
to
just
to
pass.
Only
is
the
last
step
of
X
cryptic
and
such
a
thing.
What
Russ
did
when
it
added
native
support
for
escape
the
targets?
Basically,
one
gospel,
this
element
with
called
out
of
its
own
passcode.
It
just
sends
it
to
unscripted
and
executing
days
care
of
Kentucky
to
get
to
just
read
awasum,
because
it's
much
easier
entering
the
90s
at
the
same
logic,
compiler.
C
B
Yes,
we
kissing,
so
how
can
you
recommend
our
fashion
rocks?
Well,
mass
index
is
the
expressive
summertime
from
Jessica
content,
simple
since
first
four
seconds,
another
topic,
so
actions
speak
much
like
it
looks
in
JavaScript,
except
in
trust.
You
can
recommends
return.
It
will
automatically
returns
in
Australia
at
the
Kamikaze
function.
Assume
is
that
you
don't
have
semicolon
and
you
can
just
pull
one
if
I
meant
to
keep
ten
installed
in
your
system,
I
can
just
call
or
Astley's
Rossy
target.
Wasn't
cyclic
you
on
our
web
scripting.
B
And
well,
first
problem
is
that
it
says
main
function
is
not
found
because
by
default
any
a
jumpsuit,
the
robot,
so
the
output
is
expected
to
be
just
executive.
If
you
want
to
explore
some
function,
we
need
to
trick
it
into
thinking
sit
well,
it's
exactly
table,
but
it
has
some
functions.
So
first
thing
we
do
is
just
at
empty
may.
B
Well,
that's
not
where
our
journey
edits,
when
we
try
to
compile
that
each
kind
of
compiles,
but
it
doesn't
really
work
when
you
try
to
actually
just
go
to
know
them
likewise,
is
dangerous.
You
can
see
the
play
it
cleans
them
stripped
and
what
your
object
and
immediately
that's
it.
This
is
not
fun.
Obviously,
if
you
want
to
use
actually
something
out
of
this
option
before
exit
there
isn't
possibility,
simple
is
a
trust
by
default.
Just
in
sets
an
optional
exit
instruction
into
your
mind,
even
though
your
mind
is
empty
traps.
B
It
into
another
internal
function,
so
actually
exits.
Your
app
is
your
exit
code
and
tracks
all
the
errors
that
happen
inside
everything,
and
there
are
several
ways
to
work
around
it
to
keep
it
running,
but
most
easiest
is
to
use
executing
function.
That
is
exactly
for
that.
So
she
doesn't
have
the
bomb,
because
in
C
you
can
compile
exactly
stable.
Even
if,
like
you,
don't
affect
many
well
in
rust,
you
need
to
take
it
to
it
a
bit
so.
C
B
We
do
here,
we
define
an
example
where
the
inputs,
a
function
called
inscription
exit,
asleep
runtime,
which
the
rust
looks
like
any
other
input
from
like
C
libraries
or
anything
else
and
in
mind.
You
use
it
in
Excel
flow
because
any
extents
in
rust
consider
access,
because
fast
can
attract,
what's
happening
inside
of
it,
and
this
will
at
least
keep
it
running,
which
is
nice.
B
But
if
you
try
to
call
the
function
and
in
it
you
can
use
it
by
calling
the
C
code
with
the
function
and
define
it
because
I'm
skip
the
policy,
doesn't
sound
like
what
types
you
want
to
pass
inside
of
it.
It
says
connected
call
another
function,
CD,
because
we
missed
one
middle
send
our
country,
if
not
action
expected,
is
just
internet.
B
This
country
should
preserve
its
name,
because
we
want
to
actually
find
it
later
somewhere
and
call
it
by
name
and
not
just
address
after
this,
when
we
compounded,
we
can
just
use
it
directly
from
node
by
Parsons,
name,
arguments
and
argument
types,
and
we
can
actually
see
the
second
correct,
which
is
also
nice
in
what
one
little
so
that
you
don't
seem
like
when
you're
excited
with
Sierra.
You
know
what
is
it?
What
if
I
just
call
the
function
directly?
B
B
Because
say
it
is
slope
to
just
block,
say
July
or
satisfied
because
John
shape
the
single
psychic.
Usually
you
don't
want
to
wait.
Well,
something
small
happens,
including
reversing
the
complexion,
as
I
said,
like
it's
happening
essentially
and
executing
these
compiles,
but
it
doesn't
directly
tell
you
that
open
it
finishes.
It
doesn't
great
for
separation.
So
what
you
can
do
is
when
you
input
the
module
you
can
subscribe
to
special
event
like
on
runtime
initialized
and
inside
of
it.
B
After
this,
everything
should
walk,
so
is
it
fast?
That's
some
reason
to
do
this
at
all.
So
is
very
simple
right
back
where
we
just
defines
a
Fibonacci
function
from
the
first
slide,
we're
just
up
here,
just
leaping
from
the
answer
brass
compiled
one.
We
consider
two
we're
passing
the
one
is
actually
slightly
slower.
The
reason
for
that
being
very
simple.
It's
very
easy
to
forget.
Asian
flex,
to
rust
after
we
yeah
OH
II,
actually
compiled
and
gives
some
nice
benefits,
so
lovely
fell
almost
four
times.
B
Speed
up,
just
like
we
saw
is
awesome
yet
because
I
said
like
it's
basically
the
same
engine,
and
as
in
small
sense,
it
we
can
squeeze
out
unit
is
that
we
had
right
now
call
in
sick
all
these
parameter
types
and
every
sin
every
time,
which
is
not
very
nice,
because
every
time
it
has
to
actually
parse
the
string
names
of
also
types
and
actually
converts
on
its
own.
Instead,
you
can
tell
them
to
just
rub
the
function
once
and
then
just
call
these
parameters
anyway,
instead
of
passing
single
time.
B
This
doesn't
give
that
compressor,
speed
up
but
and
as
a
zero
to
three
milliseconds,
and
this
number
grows
like
SS.
You
try
to
throw
Fibonacci
number
now
debugging.
This
stuff
is
easy.
Ish,
because
when
you
try
to
look
inside
of
it
correctly
were
passing
the
unlike
awesome.js
well,
first
of
all,
it's
not
necessary
gable
assessment,
JavaScript
anymore
and
second,
with
dozens
of
our
source
maps
where,
in
your
JavaScript,
depending
actually
have
source
maps
that
show
you
its
original
source
as
you're,
stepping
straight
and
instantly.
B
B
B
You
can't
tell
what
you
want
from
JavaScript
side
instead
of
scripting
uses
it
for
its
own
goals.
Internally,
like
for
lots
of
goals,
all
these
functions
are
implemented
on
JavaScript
side
and,
if
scripting
periodically
calls
out
to
them
when
it
wants
to
do
something
useful
asking
about
from
the
branch
but
actually
go
to
the
network
or
create
threads
using
web
office
or
from
Avellino.
Whatever
else
is
not
available
inside.
B
One
of
the
simplest
way
to
call
some
JavaScript
is
a
macro
provided
by
Emscripten,
where
you
can
just
say
a
10-person,
and
we
said
if
it
would
end
adjust
it
and
it
will
do
the
recipe
so
what
it
actually
like
how
it
is
defined.
Well,
when
we
dig
inside
of
the
headers,
we
can
find
that
this
marker
guess
call
some
magic
function
where
it's
25
0
code
and
pass
all
the
arguments.
B
So
the
code
is
literally
a
string
that
is
moved
out
of
our
binary
later
during
compilation
phase
and
absolutely
just
does
two
things,
and
so
we
can
just
read
upon
this
function
on
the
raw
side.
If
we
want
to
do
exactly
the
same,
we
define
a
15,000
Const
with
code,
been
just
bite
pointer,
because
restraints
and
see
strings
are
slightly
different
and.
B
B
One
little
clips
that
we
usually
do
into
a
stairwell,
then
Anthony
see
just
drop
it
into
some
nice
macro
when
you
can
find
it
inside
of
marker.
Just
like
and
script
in,
does
it's
not
likely
anymore
and
you
can
just
drink
if
I
inside
let
zero
about
Custer
all
the
types
and
unsafe.
So
the
user
doesn't
even
know
that
it's
actually
unsafe
to
do
that,
and
then
you
can
just
call
it
a
block
which
looks
really
nice.
B
Okay,
so
the
question
is:
why
do
we
with
us
in
the
mind
we
just
allow
them
the
wrong
diesel
beam
IR?
Is
it
does
almost
the
same
thing
exactly
the
still
has
to
be
specific
operations
first
and
second,
it's
too
unsafe.
It's
like
very
low
level
thing,
while
the
bottom
ve,
like
one
of
the
goals,
is
that
you
can't
run
outside
code
on
the
web.
You
can't
just
go
out
of
the
boundaries
and
etc.
So
you
still
need
some
layer
in
between
two
surfaces.
That
would
add,
say:
media
checks.