►
From YouTube: 2021-04-21 Design Meeting: extern 'wasm' ABI
Description
No description was provided for this meeting.
If this is YOUR meeting, an easy way to fix this is to add a description to your video, wherever mtngs.io found it (probably YouTube).
A
A
A
A
A
B
A
Yes,
all
right,
three,
two
one:
let's
do
it
I'll
happily
take
some
notes,
but
there's
this
question
cue:
maybe
we'll
go
down
them
alex
you
can
pick
which
one
you
want
to
answer.
First,.
C
All
right,
so
what
makes
wise
and
binds
and
rely
on
is
this
existing
cabi?
So
this
is
an
implementation
specifically
thing
in
wise
and
binded.
Obviously,
but
the
idea
is
that
wise
and
by
engine
is
all
about
communication
between
rust
and
javascript,
and
javascript
is
working
with
the
wasm
module
that
is
actually
working
with,
and
so
we
have
to
like
wasn't
binding
the
tool
and
the
macro
has
to
under
has
to
generate
an
a
a
abi
that
both
javascript
expects
and
the
tool
expects
to
be
generated.
C
So
the
idea
is
that
every
type
has
a
well-known
api
for
how
it
crosses
this
boundary
between
javascript
and
rest,
and
then
the
javascript
code
generator
can
just
assume
the
rest
type.
Signature
looks
look
that
looks
that
way,
so,
basically
we're
using
extra
in
c,
because
we
need
the
agreement
and
then
the
difference
happens
where
right
now
there's
a
the
way
that
it
works
is
the
macro
you
generate.
You
write
a
function
that
has
an
argument
and
then
that
argument
is
expanded
to
another
argument
in
an
avi
style
form.
C
So
we
kind
of
lower
like
the
argument
that
you
give
to
the
api,
but
it's
a
one-to-one
mapping
like
a
one-to-one
mapping
of
the
parameter
that
you
wrote
in
your
rust
function
as
a
parameter
to
what's
actually
going
into
the
cabi
function
and
so,
for
example,
strings
are
passed
as
a
pointer
and
a
length
which
is
two
values,
and
so
we
we
rely
on
those
two
values
to
be
splat
into.
The
argument
list
where,
like
even
when
the
cabi
function
takes
one
parameter.
C
It's
actually
two
parameters
at
the
api
level
and
that's
because
the
javascript
expects
that
so
the
different.
If
the
difference
here
is
that
in
the
c
api
like
the
canonical
c
abi
with
clang,
that
single
parameter,
which
is
two
32-bit
values,
is
passed
indirectly
and
the
javascript
could
agree
with
that.
The
javascript
could
do
that,
but
it
doesn't
today.
And
so,
if
we
were
to
land
this
change
on
nightly,
it
would
break
anyone
it
like
wasn't
binding
would
have
to
change.
C
A
Difficult
to
migrate,
I
think
so
I
think
you're
saying
so.
I
first
of
all,
it
seems
like
some
of
this
logic
is
baked
into
where
some
binding
is
that.
C
Correct
has
everything
to
do
with
how
the
macro
expansion
currently
works
and
how
the
macro
expansion
assumes
that,
like
we
can
take
your
given
type
that
you
wrote
in
your
function
and
then
use
traits
to
project
that
to
a
different
associated
type,
which
we
assume
is
an
argument
and
like
an
extra
in
cabi.
And
then
we
make
assumptions
about
that
projection
as
an
argument.
What
the
api
should
be.
A
C
A
C
It's
it's
not
so
much
that
like
it
would
be
given
a
compiler.
It
would
be
pretty
easy
to
just
write
and
update
wise,
my
gen
to
do
the
correct
thing
like
we
can
just
say
that
javascript
expects
it
to
be
indirect
pointer.
The
bigger
issue
is
mainly
beta,
stable,
where
like.
If
we
were
to
land,
this
then,
like
basically
some
version
of
like
there's
just
some
breaking
point
where
like.
C
C
A
C
C
So
like
with
this
proposed
api,
the
idea
is
that
we
would
add
this
to
rest.
I
would
wait
for
that
api
to
reach
stable
rest,
and
then
I
would
change,
wasn't
binding
to
saying
I'm
going
to
use
extra
and
wasm
everywhere
instead
of
extra
and
c,
and
then
that
version
of
weizenbandgen
is
only
compatible
with
some
version
of
rust,
compeller
and
above,
but
you
get
like
a
compiler
if
you
use
the
wrong
compiler.
C
No,
the
semantics
of
extern
c
are
not
what
I
want,
I
don't
think,
is
what
anyone
wants
for
wise
and
mentions
use
case
like
there's.
No
purpose
of
passing
a
string
with
the
planner
length
indirectly,
like
the
blur
line,
should
be
arguments
so
like
through
the
semantics
of
the
semantics
of
what
happens
today.
What
arguments
go?
Where
is
exactly
what
I
think
everyone
wants
for
bison
blind,
and
so
I
wouldn't
switch
back
to
extra
and
even
if
extern.
C
D
F
C
Just
for
wise
and
mind
gen's
purposes,
yeah
not
like
in
abstract,
just
like
for
the
purposes
of
wise
and
by
engine
I
mean
like
the
idea
is
that
currently
there's
no
easy
way
to
target
a
precise
webassembly
signature
with
like
some
with
also
some
like
nice
things
in
between
where
you
get
to
have
like
structs
and
aggregates,
and
things
like
that,
it
just
kind
of
doesn't
have.
It
has
a
little
bit
of
an
impedance
match.
E
So
it
sounds
like
there's
going
to
be
a
whole
bunch
of
questions
about
this
and
we
have
a
question
q
at
the
bottom.
We
should
probably
go
down
that
list,
although
alex,
please
feel
free
to
answer
several
at
once.
If
there
is
an
overarching
thing
that
we're
missing
and
we're
still
in
the
middle
of
seeing
the
trees
rather
than
the
forest.
No
that's
fine.
B
C
Yeah,
I
think
it's
good
it's
important
to
acknowledge
like
if
we
change
the
c
api
for
the
unknown
target
that
is
technically
breaking,
but
I
think
that's
a
bug
fix,
like
I
don't
think
anyone's
going
to
say:
please
don't
break
it.
It's
just
apparently,
I'm
the
only
one
saying:
please
don't
break
it
for
wes
and
point
you
at
this
point
anyway.
So
felix
your
question
is
simply
correct.
Yes,
the
extern
wasm
would
behave
the
same
across
all
wasn't
targets
and
extern
c
would
also
behave
the
same
across
all
wisdom
targets.
B
C
B
C
C
C
The
current
state
is
that
rusty
supports
both
with
the
splatting
and
the
not
splatting.
The
not
splatting
hung
happens
on
every
single
target,
except
wasn't
32
unknown
unknown,
and
the
splatting
happens
on
wisenbc
the
history.
There
is
that
when
I
first
wrote
it,
I
did
splatting
because
I
didn't
understand
what
I
was
doing
and
then
every
other
target
doesn't
use
western
fine
gents
was
able
to
be
fixed,
and
I
know
not
known
as
the
only
target
wiseman
gen
primarily
uses,
and
so
when.
E
C
A
C
A
C
D
C
Just
put
alex
wiseman
where
yeah
something
like
that
russell.
C
Anyway,
so
moving
on
felix
has
a
question
of
summarizing
unknown
and
wassy.
The
only
difference
is
the
standard
library
where
the
unknown
unknown
target
has
no
implementations
of
anything
in
the
standard
library
so
like
if
you
print
it,
just
ignores
it.
If
you
try
and
open
a
file,
it
just
returns
an
error.
C
C
Used
nowadays,
sort
of
non-web
use
cases
like
weizen
time.
Various
engines
like
server
style,
use,
server-side
use
cases
and
unknown
because
it
is
so
limiting
is
suitable
for
the
web,
because
the
web
doesn't
have
a
standard
runtime
web
assembly
or
like
a
standard
set
of
import
functions.
C
And
this
is
also
like,
because
wazi
is
so
rare
to
use
be
used
on
the
web.
This
is
why
western
doesn't
really
target
wesley
that
much,
although
there's
not
really
reason
to
reason
it
couldn't,
but
that's
why
the
wise
m32
wessie
c
api
already
matches
clang.
C
So
the
reason
I
would
say
this
is
probably
not
a
great
alternative
is
the
primary
reason
for
changing.
This
is
so
it's
just
so
c
and
russ
can
agree,
and
this
is
for
projects
that
want
to
include
both
c
and
rust
in
their
project,
so
like
basically
as
long
as
extern
c
disagrees
with
clang.
If
you
use
that
target,
you
generally
can't
intermix
c
and
rust
in
the
same
project,
which
kind
of
sucks
this.
C
A
C
E
So
the
goal
here
is
that
extern
c
can
match
see
the
c
abi
provided
by
clang
on
all
targets
rather
than
having
so
to
clarify.
It
sounds
like
you're,
saying
it's
not
just
that
you
want
to
be
able
to
have
both
abis
in
the
same
rust
so
that
you
can
do
a
transition.
E
It's
that
you
want
both
abi's
in
the
same
rust,
because
you
might
actually
need
both
for
different
purposes,
one
for
calling
c
and
one
for
interoperating
better
with
other
modules
in
rust
or
in
javascript,
or
with
wasmbine,
gen
or
similar
correct.
C
C
And
I
I
would
explain
that.
That's
like
c,
is
your
matching
c,
because
you're
calling
c
and
wasm
is,
you
are
specifically
doing
something.
That's
not
c
or
something
like
you're,
targeting
the
webassembly
target
and
inherently
as
part
of
the
website.
We
target
functions,
have
signatures
which
only
take
athlete2
and
f64,
and
things
like
that
and
so
you're,
targeting
a
very,
very
specific
signature
for
either
importing
or
exporting,
or
something
like
that
like
that
is
the
purpose
like
a
function
pointer
with
external
asm.
C
C
So
this
is,
there
was
another
question
that
taylor
asked
which
about
what
types
we
allowed
to
be.
We
expect
to
be
allowed
and
we
could
solve
a
couple
things
with
this.
This
is
where,
like
I'm
glad
this
is
unstable,
because
I
don't
think
there's
a
great
answer
here
right
now.
It's
just
kind
of
like
whatever
and
I
think
like
a
reasonable
conclusion-
could
be
that
maybe
we
as
we
only
s,
we
only
accept
a
subset
of
types
in
the
extern
wiseman
avi.
C
So,
for
example,
web
assembly
only
has
i32
i64
floats,
and
now
it
has
like
v128
and
extra
ref
and
stuff
like
that.
So
we
could
limit
the
external
wasm
api
to
things
that
translate
to
that.
So,
like
integers,
smaller
than
32
bits
and
aggregates-
and
we
could
say
nothing
else
is
supported
like
we
could
give
you
a
rust
error
saying
this
type
is
not
supported,
so
u128
would
not
be
supported.
You
couldn't
pass
the
u128128
and
I
think
that
would
prob
that
that
would
be
a.
C
C
I
would
say
wise
and
blind
should
be
part
of
that
equation,
but
but
just
I
mean
I
would
say
that
new
items
probably
wouldn't
be
added,
unless
it's
obvious
that,
like
that
nothing
new
in
the
future
will
encompass
that
so
like,
for
example,
u8,
there's
no
wasm
type
for
u8
as
and
we
represent
that
as
an
i32
and
like
that's
just
a
bag
of
32
bits
so
like
we
would
define
that
u8s
or
sine
extended
to
32
bits.
C
C
C
D
So
because
you're
defining
aggregates
to
be
spotted,
that
also
means
that
the
contents
of
those
aggregates
wind
up
as
part
of
the
api
abi,
and
so
you
wind
up,
checking
those
as
well
correct.
So
that
would
mean
that
you
know
if
you
normally,
you
don't
require
a
wrapper
c
or
representation
on
types
right
or
or
anything
like
that
on
aggregates.
G
C
D
But
the
idea
is,
the
reason
is
because
there's
sort
of
a
subtle
like
potential
for
breaking
changes.
If
someone,
for
example,
adds
a
you
know,
I-128
to
their
type
like
their
existing
aggregate
in
rust
that
maybe
even
is
represent
right
and
then
you
use
them
as
a
library
and
then
pass
that
value
through
awesome
budget.
I
don't
know
how
real
that
use
case
is
or
not
like
you
know
way
better
than
I
do.
I'm
just
trying
to
understand
like
is
that
another
thing
we
need
to
guard
against
like.
C
Well,
I
was
saying
I
think
we
want.
We
might
want
ripper
c
to
that's
kind
of
an
indicator
of
saying
the
fields
must
be
passed
in
this
order,
because
the
field
order
matters,
because
that
affects
the
avi.
But
I'm
not
sure
upper
wasm
makes
sense,
but
only
because
I
would
probably
want
to
support
generics,
which
means
that
monomer,
we
would
check
the
monomorphized
version
of
a
struct
and.
F
C
D
Got
it
okay
and
because
you
wanna
you're,
saying
you
wanna,
support
generics
and
so
you're
having
to
check
the
model
more
price
types.
So
I
I
guess
I'm
I'm
unsure.
I
understand,
like
I
guess,
you're
saying
that,
like
any
values
you
pass
along,
there
are
already
sort
of
you're
not
respecting
any
kind
of
like
backwards
compatibility
guarantees
about
the
contents
of
those
types.
C
I
mean
yeah,
it's
not
you
wouldn't
be
able.
I
mean
if
you
added
or
deleted
any
field.
You
would
change
the
api
of
any
function
but
took
that
that
aggregate
by
value,
just
because
you're
removing
your
adding.
D
C
Yeah,
oh
yes!
Yes,
that
is
true
and
yeah
I
mean
that's.
That's
a
downside
like
this
is
a
thing
where
like.
If
we,
if
we
do
want
to
restrict
the
types
in
external
asm,
I
could
imagine
it's
actually
going
to
be
pretty
difficult
and
because,
like
I'm,
not
really
sure
what
happens,
if
you
have
like
a
generic
function
that
has
external
wasm
as
the
adi,
it
just
means
that
certain
instantiations
are
going
to
start
getting
errors.
C
That's
kind
of
funky,
because
it's
an
instantiation
time
like
monomorphization
error
and
like
you're
saying
it
just
means
that,
like
if
you
happen
to
instantiate
that
with
the
wrong
thing
or
like
on
some
targets,
might
have
been
using
this.
But
then,
when
you
compile
them,
then
you
start
getting
errors
like
that's
gonna
be
funky
and
it's
gonna
be
very
odd.
A
A
A
C
Yes,
I
was
trying
to
talk
about
that
the
previous
one,
yet
the
other
aspect
to
niko
in
your
question,
though,
unlikely
to
be
updated
in
a
reasonable
time
frame.
I
don't
know
that
I,
it
hasn't
changed
and
I'm
unaware
of
any
plans
to
change
it.
C
I
would
not
say
I
would
not
pass
adjustment
whether
it's
like
they're
unlikely.
I
would
want
to
literally
confirm
with
the
folks
doing
playing
stuff.
B
C
A
C
But
let
me
go
to
taylor's
next
question,
so
what
level
of
documentation
and
stability
guarantees
would
we
offer
to
extern
wasm?
C
So
this
is
this
is
kind
of
what
we
were
talking
about
earlier
like
I,
I
would
expect
that
you
would
have
documentation
for
what
exactly
like
the
goal
of
external
wasm
is
given
a
rust
signature.
You
can
predict,
you
can
predict
the
precise
webassembly
signature,
and
so
I
would
expect
documentation
of
exactly
what
that
is
so
like
we
don't
allow
generics.
We
do
allow
generics.
This
is
how
they
get
splatted.
This
is
how
u8's
get
sign
extended,
because
this
is,
I
mean
it's
also
rust
specific.
C
This
external
asm
wouldn't
exist
anywhere
else
in
the
business
of
the
ecosystem,
so
I
would
expect
us
to
have
lots
of
documentation
and
pretty
strict
stability
guarantees,
because
we
would
want
to
continue
to
migrate
this
with
webassembly.
Now
whether
that
can
all
be
achieved
is
another
question:
does
that
make
sense?
So
we.
D
C
Yeah,
I
I
I
would
not
expect
that
documentation
would
mention,
wasn't
binding
at
all
it's
more.
This
is
all
just
kind
of
a
lot
of
this
is
motivated
in
my
mind
in
general.
I
wasn't
going
to
use
this
because
eisenbeing
can
then
predictably
say
like
given
this
projection
of
this
trait
of
this
like
given
this
trait
sociotype
projection.
I
know
precisely
that
the
way
that
the
abi
is
going
to
be
this
things
like
that.
B
I
I
realize
now
hearing
your
answer
to
this
question
that
I
was
not
clear
on
one
detail
that
you,
I
think
you
said
it
earlier,
but
I
just
want
to
make
absolutely
clear
about
this.
B
You
gave
the
example
you've,
given
two
examples
of
things
that
aren't
part
of
wasm
u8
and
youth
128,
and
you
I,
my
original
interpretation
was
that
you
were
saying
that
we
just
extern
wasn't,
would
not
support
passing
either
of
those
things,
but
I
now
realize
that
what
you
in
fact,
are
saying
is
that
the
plan
is
that
things
like
u8
would
be
supported
and
would
have
a
definite
have
a
defined
semantics
for
how
they
are
translated
into
the
was
incompatible
things,
namely
sign
extension
or
whatever,
while.
F
B
C
B
B
Not
the
plan,
it
sounds
like
because
you
want
to
make
it
easier
for
people
to
still
have
like
past
trucks
in
and
things
like
that,
unless
you
don't
want
to
just
reject
all
you
waits
that
are
all
strokes.
Have
you
ate
in
them,
for
example,
right.
B
C
C
Okay,
yes,
yes,
there
will
not
be
synonyms
yeah
next
josh
will
extremism
exist
on
other
targets?
My
goal,
I
would
probably
say
no.
I
don't
really
want
to
consider
that
I
want
to
say
it's
just
a
compiler,
like
I
think,
there's
already
support
for
abis
only
existing
on
some
targets,
not
others,
and
so
I
think
we
would
just
extend
that.
E
So
corollary
to
that,
though,
if
we
don't
define
extern
wasm
on
other
targets,
then
I
can
imagine
people
wanting
to
define
the
same
function
on
two
different
architect:
two
different
targets,
where
the
only
difference
is
what's
in
the
extern
wasm
versus
extern
c,
and
that's
a
bit
of
a
pain
to
do
right
now,
because,
unlike
config
adder,
you
can't
make
the
contents
of
what's
inside
the
string,
constant
they're
dependent
on
a
config
variable.
F
C
Think
it
would
be
downside,
and
I
mean
scott
just
put
their
like
externs
blood,
and,
like
I
mean
I,
don't
really
want
to
be
the
one
to
add
a
new
api
to
russ.
Just
because
I
disagree
with
splatting
and
wasm
like
I.
That
feels
bad,
but
if
it
comes
to
that
like,
if
it
really
is
used
for
others,
I
think
that's
like
that.
C
E
Fair
point:
it's
more,
I
would
like
whatever
pattern
we
decide
is
ideal
for
defining
a
function,
that's
identical
everywhere,
except
that
it
uses
wasm
on
wasm
targets
and
c
elsewhere.
We
should
explicitly
say
here's
the
pattern
we
recommend
and
if
that
pattern
is
too
painful,
we
should
make
it
a
better
way
to
express
that
pattern.
E
E
F
I
it
does
seem
like
from
what
I've
heard
so
far
that
it
would
be
pretty
and
like
the
the
predominant
use
case,
we
expect
for
external
wasm
is
for
like
wazimbang
and
potentially
other
tooling.
That
really
precisely
is
intended
just
for
this
use
case
of
you
know,
passing
to
across
a
sort
of
wasm
api
to
some
other
language,
and
so
it
would
be
not
necessarily
typical
that
you
would
want
to
do
this
for,
like
a
user-written
function.
In
some
sense.
C
Well,
I
mean
so.
There
are
hypothetical
ideas
like
webassembly
is
going
to
get
this
thing
called
interface
types
which
is
intended
for,
like
here's,
a
type
grammar
by
which
you
can
communicate
with
the
outside
world.
In
a
what
we're
calling
shared
nothings
like
that,
you
have
to
share
memory
fashion
and
that's
giving
you
the
ability
of
like
even
in
native
code.
C
You
use
for
your
native
module
and
then
it
just
so
happens
that,
like
you're
using
all
the
same
stuff
and
like
it's
a
very
far-fetched
kind
of
very
far
in
the
future
idea,
but
that's
a
possibility
where,
like
you,
might
want
literally
the
exact
same
function,
exp
like
for,
if
you're,
defining
a
plug-in
to
be
compiled,
both
the
wasm
and
to
native
code,
and
that's
because
the
the
runtime
besides
just
understands
this
type
is
serialized.
This
way
and
has
this
definition
on
this
architecture.
C
C
Very
unsafe
could
segueful
kind
of
api
like
that,
it's
very
hypothetical
and
this
that's
where
like,
if
we
only
allow
external
asm
on
wasms
for
now
it's
just
it's
that's
what
I
would
probably
say
just
to
be
conservative,
just
we
can
allow
it
in
the
future
for
other
targets,
but
yeah
all
right
all
right.
The
next
question
for
will
the
cabin
and
was
maybe
emerge.
I
think
we
we'd
stop
by
that.
So
no,
they
will
probably
not
is
the
intention.
If
they
do
merge,
then
resin.
C
We
would
just
use
the
c
api
I
mean,
but
this
does
bring
up
a
point
about
multiple
returns,
which
we
haven't
talked
a
ton
about,
but
this
is
a
second
motivation
for
the
wasm
api,
which
is
the
multiple
returns
idea
of
webassembly,
and
so
the
canonical
c
api
today
doesn't
support
it
because
multiple
returns
are
weren't,
supported
or
weren't
allowed
when
the
cvm
was
created-
and
this
is
this
would
be
a
way
for
us
to
roll
out
multiple
returns,
support
in
rust,
without
having
like
brand
new
targets
or
like
brand
new
apis,
and
things
like
that.
C
C
It
makes
more
sense
to
have
multiple
targets,
and
so
I
honestly
think
it
would
be
really
nice
to
not
have
different
wasm
targets
for
multi-value
returns
and
so
like.
I
don't
want
the
wasm
target
and
then
the
as
a
multi-value
target,
because,
with
the
nature
of
webassembly
features,
everyone
will
eventually
use
the
wasm
multi-value
target
and
there's
no
reason
to
use
the
original
one
so
have
using
this
at
the
abi
level
gives
us
the
nice
ability
to
say
like
well.
It's
just.
This
is
the
abi
for.
B
The
metaphor
analogy
you're
drawing
here,
because
you
gave
the
example
of
armed
targets
with
soft
load
and
harflowed
and
said
like
this
is
a
real.
That's
a
reality
like
that's
something
where
there's
just
hardware
support
for
floats
and
some
arm
systems
and
software
and
no
hardware
support.
And
thus
you
must
and
the
whole
world
has
to
agree
on
which
thing
they're
running
on.
B
C
C
B
C
This
is
where
I
mean
so:
the
multi-return
is
a
backwards-compatible
extension
to
webassembly,
and
so
all
existing
vms
are
going
to
support
this
certain
like
it's
within
six
months
to
a
year.
C
It's
going
to
be
very
rare
to
find
a
vm
that
doesn't
support
this,
but
there
might
still
be
bb
people
that
want
to
compile
with
assembly
without
multi-value
for
something
I
don't
know
what,
but
I-
and
this
is
where
it's
slowly
different-
the
soft
float
and
hardflip,
which
is
like
fundamentally
different
runtimes,
but
this
is
something
that
this
isn't
really
a
fundamental
difference
at
the
run
time,
it's
just
whether
runtime
supports
it
or
not.
It's
very
easy
to
add
support
for
most
runtimes.
I
don't
know
if
that's
really
answering
your
question.
A
C
The
abi
is
just
so
pervasive
where
effects
it
affects
the
entire
program.
So,
like
there
are
features
you
can
add
to
webassembly
like
new
instructions,
and
that
could
be
very
localized
of
like
I
just
either
my
function
either
uses
the
instruction
or
doesn't
use
instruction,
and
it's
a
very
easy,
like
cfg
as
to
whether
it
uses
that
or
not.
C
But
this
is
different
where,
like
we're
talking
about
how
I
interact
with
the
outside
world
or
how
the
standard
library
will
interact
with
the
outside
world,
like,
for
example,
eventually
wazzy,
the
standard
is
going
to
have
a
specification
where
functions
that
you
import
will
return
multiple
values,
so
the
standard
library
is
going
to
have
to
make
a
choice,
and
so
I
would
love
for
the
standard
library
to
just
say
external,
because
it
is
binding.
The
signature
of
it
returns
multiple
values,
but
interaction
was
like.
We
don't
have
to
wait
for
the
c
api
to
update.
C
E
So
the
intent
there,
then,
is
that
even
if
the
standard
library
uses
extra
and
wasm
rather
than
extern
c,
to
export
some
things,
then
that'll
be
fine,
because
rust
is
calling
that
it
doesn't
need
to
be
javascript
won't
be
directly
calling
stood
without
an
intervening
exported
function.
C
This
is
more
about
imports
of.
Like
the
rest,
the
wasm
module
will
import
a
function
in
the
webassembly
file
that
returns
multiple
items
and
that's
sort
of
like
that's
the
like.
If
we
bind
wazzy
and
wazzy
changes
to
have
functions
that
return
multiple
things,
we
we
literally
can't
do
that
today,
and
so
this
would
be
the
only
way.
This
would
be
the
way
to
do
it
is,
and
we
can.
C
G
C
This
is
kind
of
not
super
well
defined
because
it's
not
really
well
supported
today.
The
answer
is,
if
you
literally
return
like
a
rust,
tuple
you'll
get
a
warning
saying
it's
cabi
incompatible
and
then
it'll
do
the
right
thing.
I
think
the
way
I
so
it's
sort
of
like
a
question
of
how
do
we
want
to
model
this?
I
believe
the
way
lvm
is
supporting
it
like
just
at
the
lvm
layer.
C
Is
you
return
an
aggregate
by
value
and
then
lvm
translates
that
to
a
multi-value
return,
and
so
we
could
do
that
and
that,
probably
honestly,
is
what
we're
gonna
do,
but
we
could
also
just
as
similarly
say,
we
define
the
external
wasm
abi
as
supporting
rust
tuples
in
the
return
position,
and
that
just
naturally
translates
to
multiple
return
values
like
we,
you
don't
get
the
lint
saying:
that's,
not
extra
z
compatible
or
whatever.
So
like.
C
Basically,
it's
up
to
us,
we
get
to
decide
what
to
do
here
and
by
not
trying
to
match
c,
precisely
because
we're
targeting
a
specifically
different
avi.
That
gives
a
simply
way
of
like
supporting
rust,
tuples
or
just
saying
that
the
first
level
of
aggregate
is
splattered,
maybe
others
aren't.
I
don't
like.
C
C
so
work
with
c,
so
the
c
a
b
I
works
for
everyone,
and
this
means
that
not
only
has
the
desired
semantics
that
I
personally
want
wise
and
blind
to
have
for
arguments,
but
also
having
some
story
for
the
migration
of
the
cabi
from
what
it
is
currently
to
multi-value,
which
I
honestly
have
no
idea
what
that
what
c
is
going
to
do
there,
and
that
would
be
good
to
hammer
down
so
like
that.
That's
hammer
that
down
and
see
if
that
story,
supplants
the
need
for
externalizing.
That's
the
main
alternative
solution.
F
It
does
based
on
the
previous
conversation.
It
sounded
like
that
solution
doesn't
quite
fit
the
need
of
sort
of.
Obviously
you
can
sort
of
hard
code.
What
c
does,
but
in
theory
at
least
it
doesn't
necessarily
fit
the
desire
for
a
very
sort
of
simple
and
straightforward
translation
that
hard
lints
or
errors
on
not
understood
things,
unlike
the
cabi,
which
currently,
at
least
from
what
I
know,
is
more
like
sort
of
best
effort
in
some
sense.
C
Yeah,
no,
I
I
agree
like
there's
a
that's
a
downside
to
using
extern
c,
which
is
like
all
these
problems
about
what
like
the
extern
c
api
will
define
what
happens
when
you
pass
a
u128
and
that
will
not
take
into
account
what
if
u128
is
added
to
asm
in
the
future,
and
so
the
answer
from
the
c
side
of
things
is
it'll
break.
And
if
the
cabi
breaks
it's
like.
Do
we
just
inherit
that
breakage
and
rust?
C
C
C
That's
what
I
was
saying
of,
like
I
think
so,
but
only
like
if
we
define
the
apis
aggregates,
are
slided
and
splattered
in
the
order
of
the
fields
there
then
represent,
might
be
useful
to
say.
Okay,
it
really
is
the
order
of
the
fields
there,
but
we
would
still
have
these
monomorphization
errors
of,
like
you
used
reproasm,
where
the
struct
had
a
trait
and
the
field
was
a
trait
projection,
and
then
only
during
modern
organization
do
we
realize
that
was
e128
and
should
be
an
error.
C
So
we
could
also
just
rely
on
remember
c,
for
this,
like
rep
c
says
the
order's
defined,
and
then
the
wrapper
wasm
on
the
lowering
layer
just
gives
you
my
monomer
monomorphization
errors,
but
either
way.
I
would
suspect
that
if
we
do
validation
of
arguments,
if
you
have
a
aggregate
and
a
parameter,
we
would
validate
that
something
is
on
there
either
remember
wesley
or
represent
it's
mostly
just
like
I
don't
I
don't
represent,
could
disallow
a
raw
I-128
field,
but
couldn't
disallow
like
a
generic
I-128
field,
and
so
I
don't
like
yeah.
B
A
E
Yeah,
I
personally
would
be
inclined
towards
just
use
repair
c
and
then,
if
you
pass
that
in
repper
wasm,
then
we
will
pay
close
attention
to
what
types
are
in
it
and
yeah.
You
might
get
a
monomersation
time
error,
but
so
be
it
and
I
don't
think
we
can
do
better
than
monomorphization
time
errors,
because
with
repper
wasm,
if
you
have
a
generic,
then
you
have
to
have
a
monomorphization
time
error.
B
Though
the
problem
that
josh
described
previously
was
something
where
that
part
was
at
rose
because
x
turned
the
external
c
block,
doesn't
give
you
a
way
to
say
you
know,
I
expect
to
be
working
in
c
in
some
contexts
and
wisem
and
others
I
feel
like
with
wrapper
the
wrapper
attribute.
You
do
have
a
little
more
flexibility
or
we
could
even
extend
it
to
let
you
say,
rep
repper
seek
homowasm
to
say
this
struck
needs
to
work
in
both
contexts
like
it
doesn't
sound
like
as
difficult
a
problem
to
solve.
D
D
The
one
thing
I
do,
I
don't
know
I
I
feel
like
I've,
I've
been
sort
of
convinced
that
this
isn't
necessary,
but
the
one
thing
I
do
like
about
reproasm
is
that
then
libraries,
exposing
types
with
like
private
fields
internally
right,
would,
as
I
understand
it,
like
it's,
a
breaking
change
for
them
to
add
like
a
u128
to
their
structs,
then.
D
D
A
G
B
Have
a
I
have
a
heart
out,
I
was
debating
whether
you
should
take
people's
temperature
or
not
about
this
overall
at
this
point,
but
I
don't
think
that's
a
good
way
to
end
the
meeting.
I
think
we
can
do
it
on
zulip,
I'd
like
to.