►
Description
This week we discuss two topics of ShadowRealm, how to represent wrapped functions, particularly their name and length, and opine on a future proposal to allow SharedArrayBuffers to transit between shadow realms.
A
C
Yeah
I
can
give
an
introduction
of
what's
going
on.
I
just
two
two
topics
that
have
been
raised
and
they
are
definitely
topics
that
would
need
consensus
and
we
intend
to
go
to
the
tc39
meeting
after.
We
have
an
informed
decision
at
this
meeting
here
or
if
we
need
more
meetings,
but
we
definitely
need
like
an
informed
decision.
C
C
Yeah,
sorry,
I
don't
yeah,
I
don't
have
a
camera,
should
I
try
it
into
it
to
use
the
camera
here
thanks.
I
just
saw
like
people
freezing
and
turning
off
their
cameras,
so
it
was
not
specified
what
to
do
with
the
name
and
length
of
the
wrapped
functions
when
the
import
value
or
the
evaluation
of
the
the
evaluation
result
from
the
shadow
realm
evaluate
ends
in
a
callable,
so
we
receive
the
wrapped
function,
but
what
is
their
name
and
lymph?
So
the
question
here
is
more
on
what
it
should
be.
C
I
currently
have
a
pull
request
with
some
pre-work
done,
leading
to
one
direction,
but
also
like
it's
not
exactly
the
direction
that
I
there
is
my
favorite.
The
current
per
request
is
saying
is
getting
the
same.
Steps
is
cloning,
the
steps
from
function
bind
function,
prototype
bind
and
it's
currently
sending
the
name
of
the
wrap
function
with
a
prefix
wrapped
space
and
the
name
of
the
function
from
the
other
realm.
C
Remember
that,
like
the
name
property
is
not
writable,
but
it's,
it
is
configurable,
so
kind
of
like
it's
user,
it's
able
to
like
user
customization
is
possible
in
both
ways
in
both
realms
somehow
like.
If
you
don't
have
any
control
and
the
current
option,
it
follows
the
same
steps
from
function:
prototype
pine.
It
actually
creates
an
abstraction
that
should
be
reused
by
function.
Prototype
bind
adding
the
prefix
wrapped
space
to
the
name,
and
it
does
not
account,
although
it's
not
try
to
observe,
what's
the
current
name
of
the
function.
C
C
Unless
you
treat
that
name
for
what
I
discussed
internally
at
salesforce
with
karidi
and
rick,
we
have
no
need
for
this
prefix
and
we
kind
of
like
we
don't
love
the
idea
of
using
rapt
as
a
public
to
to
become
a
like
out
of
the
specs
user
level.
Name
feature
like
we
see.
No
reason
to
to
set
that
into
stone
like
rapt
is
just
like
spec
language.
C
C
C
D
Okay,
what
it!
What
does,
first
of
all,
what
does
bind
do
if
you
bind
the
bound
function.
C
Bind
gets
only
a
string,
name
discards.
Anything
else
gets
only
a
string
name
from
the
target
function
and
prefix
it
with
bound
space.
D
Really
wow:
yes,
okay!
Now
the
what
does
a
function,
dot,
prototype,
dot
to
string,
dot,
call
on
a
wrapped
function,
div.
A
A
A
function
prototype
two
string
is
gonna,
actually
dump
the
native
code
like
custom
host
specific
wrapper,
so
they
usually
aren't
executable.
It
may
or
may
not
show
the
name.
It's
not
clear
that
they're
banned
on
showing
the
name.
I'm.
D
The
only
two
possibilities-
one
is
original
source
code
and
the
other
one
is
the
the
the
the
very
specific
syntax
with
the
open,
curly
open
square
bracket
native
function
or
whatever
close
quarterback
and
close
curly.
A
So
we're
talking
about
the
thing
here,
there's
function
native
code,
which
is
what
it
generates.
A
That's
the
results
in
engines,
I'm
not
sure,
are
they
prohibited
from
returning
anything
else?
Now
I
know
at
one
point
they
were
not.
I
believe.
D
C
So
mark
currently
in
chrome,
just
to
reproduce
like
if
I
have
a
function,
fn,
which
name
which
name
is
fn
and
if
I
create
a
bound
function
of
it
called
b,
any
name
like
I'm
calling
it
b.
If
I
do
the
function
prototype
to
string
dot
call
on
b,
I
only
get
an
anonymous
function
like
a
function
with
no
name
and
the
native
code
inside
this
is
the
current
behavior
in
chrome,.
D
Okay,
and
by
native
code,
we
mean
the
open,
curly,
open
square
bracket
native
space
function
or
whatever;
yes,
yes,
okay,
okay!
So
what
it?
What?
What
do
we?
Currently?
According
to
the
current
spec
current
draft
spec
for
shadow
realms?
What
does
function
prototype
to
string.call
on
a
wrapped
function?
D
C
I'm
not
sure
if
we
have
anything
more
specified
on
the
name
for
the
wrapped
function,
but
I
am
expecting
the
same
output
for
a
wrapped
function.
If
we
do
like
the
two
string
or
call
on
a
wrapped
function
to
give
like
a
function
with
no
name
and
native
code.
A
Okay,
so
checking
the
specs.
The
native
code
thing
is
allowed
to
have
a
name.
D
Okay
and
what
does
bat,
what
does
bind
do
on
length.
C
C
No,
so
that's
the
thing
I
just
remembering
here
and
looking
at
the
code.
That's
why
I
needed
more
time
things
it
has.
It
looks
for
his
own
property
length
only
accounts
on
properties.
C
If
it's
true
it
gets
the
length
property
and
after
getting
the
length
properly
it
sets
it
only
copies
the
length
properly
the
value
of
the
length
property.
If
the
value
is
a
number,
it
discards
any
other
values.
C
If
the
value
is
not
a
number,
it
sets
the
value
of
the
bound
function
to
zero.
If
it's
an
object,
it's
if
it's
a
number
object.
It
sets
the
new
length
to
zero.
If
you
don't,
if
it
is
a
number,
it
does
check
for
infinity,
etcetera.
B
I'm
getting
a
length
of
zero
for
a
bound
function
where
I
bound
an
argument.
A
D
D
I
think
that
the
the
bound
bound
bound
behavior
is
very
unfortunate,
and
in
retrospect
I
think
that
if,
if
I
had
been
aware
of
that
at
the
time
I
probably
would
have
argued
for
some
some
logic
to
prevent
it
from
nesting
like
that
for
bound
functions.
It
doesn't
matter
that
much
because
typical
use
case
doesn't
keep
rebinding
it
for
wrapped
functions.
D
The
typical
use
case
will
keep
wrapping
it
and,
in
fact,
not
actually
wrap
it
when
it
wraps
it,
because
if
you
know
a
wrap,
a
a
wrapping
of
a
wrapping
of
function,
foo
is
behaviorally
identical
to
the
the
final
wrapping
of
the
function.
Food.
The
fact
that
it's
going
through
an
intermediate
wrapper
is
actually
not
observably
part
of
the
semantics
in
any
way
it
sounds
like,
except
for
this
wrapping
of
the
name.
D
B
Hold
on
one
sec,
it's
not
part
of
the
behavior
at
execution
of
the
function.
However,
it
was
the
behavior
at
the
creation
of
the
function.
This
is
doing
in
the
creation.
B
I
thought
there
we
discussed
at
some
point
there
might
be
regarding
the
observability
of
the
lifetime
of
the
realm
or
any
revocation,
possibly
in
the
future.
D
Oh
god,
this
the
the
observability
of
lifetime
is
just
always
coming
back
to
bite
me
other
than
observability
of
lifetime
observability
of
lifetime.
There's
there's
you
know
we're
trying
to
do
this
very,
very
delicate,
dance,
around
implementation,
freedom
versus
strong
enough
constraints
that
you
can
write
meaningful
programs
yeah.
So
so
let
me
so
let
me
say,
aside
from
aside
from
observability
of
garbage
collection
lifetime
through
weak
references.
D
Aside
from
that,
is
there
any
observable
consequence
of
change
and,
aside
from
the
double
wrapping
of
the
name,
is
there
any
observable
consequence
of
saying
that
a
wrapping
of
a
wrapped
function
creates
a
new,
a
new
wrapping
of
the
original
function.
B
I'm
going
to
answer
very
quick.
I
think
we
talked
about
a
being
able
to
introduce
revocability
in
the
future,
but
I
I
don't
know
that
would
be
the
only
thing
I
can
think
of.
D
Okay,
so
yeah,
I
remember
the
revocate
revocability
thing
and-
and
I
think
I
might
I
might
certainly
participated
in
that
discussion
and
yeah.
We
don't
have
that
now
and
if
we
had,
if
we
had
it
it
would
be,
it
would
be
via
something
new
being
introduced
that
that
beyond
what's
in
there
now,
so
I
think
the
answer
is
yes,
they
are
equivalent.
B
Leo
is
his
hand
raised.
D
D
If
we
decided
that
the
wrapping
created
a
new
wrapper
of
the
original
that
would
provide
specs
more
freedom
that
they're
likely
to
require,
you
know
they're
likely
to
actually
not
keep
the
entire
chain
around
if
the
lifetime
is
the
only
thing
that
requires
it,
because
that's
really
onerous
from
an
implementation
perspective,
if
you
can
otherwise
shorten
these
chains,
so
I
think
in
fact,
implementations
will
want
to
always
shorten
the
chains,
in
which
case
the
we
should
not
demand
more
from
that
on
lifetimes,
and
if
we
only
demand
the
lifetime
corresponding
to
the
shortened
chain,
then
any
implementation
that
doesn't
shorten
will
still
conform
to
that
looser
spec.
D
So
so
I
think
I'm
in
favor
of
changing
the
spec
in
that
way.
Okay,
leah.
D
C
I'm
not
complaining,
and
please
help
me
until
I
finish
this.
I
think
this
is
a
special
treatment,
but
I
think
it's
fine,
because
the
next
topic
will
be
a
list
about
a
special
treatment
and
like
observing
that
the
object
is
a
special
object.
So
the
this
object
is
a
wrapped
function.
So
let's
give
it
a
special
treatment:
let's
get
the
target
and
create
a
new
wrapped
function.
C
So
in
this
sense
I
think
it's
going
to
be
fine,
although
I
have
just
another
comment
about
the
the
wrapped
functions,
one
of
the
things
that
we
observe
like
we.
We
try
to
observe
like
to
just
like
rough
analyses,
and
I
believe
we
are
not
going
to
be
like
we
don't
have
use
case
for
transferring
the
same
rap
functions
back
and
forth.
C
It's
more
on
the
execution,
as
matthew
has
mentioned,
it's
more
like
grabbing
one
function
to
execute
it
many
times,
but
not
like
sending
the
function
back
and
forth
many
times,
and
still
this
name
is
user
configurable.
Whenever
I
have
this
wrapped
function,
the
name
is
user
configurable.
So
I
can
delete
and
set
another
name,
remove
prefix
or
create
many
wrapped
prefixes.
B
I
think
this
points
to
a
problem
with
the
unwrapping
there's
two
problems
with
it.
This
configuration
problem
and
also,
if
you,
if
you
take
the
name
of
the
original
function
and
the
length
when
you
re-wrap
it,
you
would
have
to
cache
those
original
ones
when
the
function
was
originally
wrapped
and
copied
those
from
the
wrapper
or
else
you
would
be
able
to
observe
when
you
re-wrap.
C
Yeah,
in
the
same
in
the
same
line
when
you
have
like,
if
you
just
re,
wrap
the
the
target
function,
the
original
function,
one
of
the
things
here-
it
makes
more
sense
for
me
to
just
reuse
the
name
or
of
the
target.
So
you
don't
have
special
treatment
like
if
you're,
let's
say,
if
you're
wrapping
it
for
the
first
time,
you
give
it
perfect.
But
then,
if
you
wrapped
it
again,
you
get
the
target.
But
now
it's
like
you
remove
this
consider
the
wrapped,
because
you
cannot
account
for
that.
C
So
in
this
case
I
don't
think
the
prefix
is
helpful
at
all
like.
I
would
be
interested
in
not
having
a
prefix.
C
D
C
I
can
try
to
give
an
example
like
let's
say
in
realm:
a
you
have
a
function
named,
do
something
and
you
receive
it
in
realm
b
as
wrapped.
Do
something
when
you
send
it
back
to
realm
a
you.
Can
just
call
it
again,
wrapped
do
something,
but
everything
would
be
like
okayish,
but
this
is
user
configurable.
So,
let's
go
again
like
on
realm
a
you
have
a
function
that
is
called.
C
C
B
I
there's
actually
a
bigger
problem
with
the
renaming
which
is
again
observability,
so
if
in
realm,
eights
do
something
you
send
it
to
written
b,
it's
wrapped
do
something
realm
b
overrides
that
name
to
set
it
to
well,
do
something
else
and
removes
rap
when
you.
If
we
go
by
mark's
suggestion
of
looking
at
the
original
name,
it
shouldn't
be
the
case
to
be
able
to
observe
the
original
name.
Again,
you
should
do
get
the
overall
name.
B
A
I
guess
I
guess
it
wasn't
exactly
the
same
as
what
I
was
going
to
bring
up,
which
is
never
prefixing,
so
just
copy
the
name
copy
the
length
it's
an
it's
an
own
property
on
the
wrapper.
If
you
wrap
it
again,
then
you're
going
to
get
the
same
data
unless
it's
been
modified,
but
there's
no
special
trickery.
You
just
read
the
property
and
make
a
copy
of
it
on
the
new
value.
D
Okay,
I
might
have
been
the
only
person
of
us
who
was
there
at
the
time,
and
I
don't
remember
I
have
no.
D
D
I
think
the
lifetime
issue
should
allow
the
implementation
to
shorten
regardless
in
terms
of
not
keeping
the
intermediate
wrapping
around
because
after
creation,
even
if
we're
taking
the
name
from
the
intermediate
wrapping
once
we've
created
it,
there's
no
reason
for
the
for
the
second
wrapper
to
keep
the
first
wrapper
around.
So
implementations
will,
in
fact
at
least
sometimes
drop.
The
first
wrapper,
if
only
the
second
wrapper,
is
being
retained
and
we'd
like
the
spec
to
reflect
the
shorter
lifetime.
That
implementations
will
actually
want
to
implement.
D
So
I
still
think
that
creating
a
wrapper
of
the
original
function,
but
using
the
name
and
length
from
the
wrapper
at
creation
time
is
still
something
we
should
transition
to.
B
So,
basically,
you
want
to
make
inspect
something
that
wasn't
unabsorbable
in
the
first
place
in
the
engines
would
have
been
able
to
do.
B
Because
the
realm
itself
is
never
observable
directly
true.
A
B
D
Whether
the
no
the
thing
is,
if
you
drop
the
rat,
if,
if
you,
if
you
have
function
f,
you
have
a
wrapping
of
it
called
wf,
then
you
have
a
wrapping
of
the
wrapping
of
it
called
wwf,
and
then
only
wwf
is
reachable
from
roots.
A
B
But
that
w
at
that
single
wf
only
exists
in
the
intermediate
realm.
It
cannot
be.
It
cannot
be
a
weak
rep
that
exists
in
another
shadow
realm
to
it.
D
I
don't
understand
what
the
significance
of
that
is
in
any
realm.
You
can
quit
create
weak
refs
right.
D
D
Wwf
is
reachable
from
roots
which,
which
weak
references
are
allowed
to
report
that
the
thing
has
been
collected.
I
would
argue
only
the
weak
reference
created
in
realm
b.
B
Yeah
you're
right
yeah.
I
miss
that.
A
C
Okay,
so
I
I
just
want
to
make
sure
we
also
have
time
for
the
next
topic.
Can
I
I
think
it's
pretty
clear,
we
we,
we
don't
want
the
prefix,
I
think
it.
I
think
this
is
a
consensus,
at
least
in
in
this
session.
Yes,.
C
Sure,
and
is
that,
okay
to
establish
the
the
wrapped
function,
name
we'll
just
copy
the
the
name
from
the
target
once
and
we're.
Gonna
have
another
another
topic
to
discuss
reusing
the
target
from
a
wrapped
function.
C
C
B
Not
just
any
others
actually
that
raised
the
area
for
issue
in
the
first
place,.
C
Yeah,
I
remember
you
as
one
of
the
people
who
I
early
advocated
for
for
that,
at
least
for
this
topic
to
be
discussed
and
caridian
wreck.
They
took
some
time
to
to
develop
about
ideas
and
we
discuss
internally.
We
we
have
some
similarities
as
well
in
the
web
with
like
web
workers,
you
can
actually
send
share
the
right
buffer.
You
you
get
a
new
shared
array
buffer
created
in
the
other,
in
the
worker
containing
the
same
target
internal,
the
same
the
same
buffer.
C
There
is
a
difference,
though,
one
of
the
things
that
I'm
not
strongly
compelled
about
what
they
have
for
workers
is
that
they
actually
do
the
whole
structure.
Cloning
that
shoe
wants
to
bring
well
see
so.
D
Yeah
on
structured
cloning,
let
me
just
say
that
I
I
there's
I
made
a
lot
of
comments
on
the.
I
think
it
was
on
a
github
thread
on
that.
In
any
case,
it
was
at
a
public
place,
I'm
pretty
sure
it
was
on
the
github
thread.
Structured
clone
as
it's
currently
specced
is
incompatible
with
javascript
and
cannot
and
can
never
enter
the
javascript
language
without
major
observable
changes
to
the
spec.
C
Yeah
and-
and
I
I
am
yet
finding
no
reasons
right
now
for
structural
planning,
because
that
would
require
a
lot
of
complexity
for
a
simple
thing
that
we
need
to
do
the
current
per
request.
The
current
proposal
for
this
change
is
having
shared
the
rate
buffer
like
a
special
treatment.
C
If
you
evaluate
a
code
from
from
a
shadow
realm
or
sending
like
using
a
wrap
function,
sending
a
shared
array
buffer,
like
sending
a
shadow
ray
bar
for
cross
realms,
you
observe
that
object
has
a
array
buffer
internal
and
then
you
confirm
that
array
buffer
is
a
shared
array
buffer.
C
You,
instead
of
doing
the
structure
cloning,
you
create
a
new
shared
array
buffer
in
the
other
realm
containing
the
same,
the
equivalent
or
the
respective
internals
of
the
shared
array
buffer.
That
way,
you
have
a
special
treatment,
but
for
some
native
javascript
functionality
you
could
not
do
otherwise
and
the
main
difference
from
workers
is
that
you
don't
have
structural
cloning,
so
you
don't
have
any
copy
of
the
the
actual
properties
of
the
object.
Instance,
you
just
have
a
new
shared
array
buffer.
You
don't
even
consider
subclassing
or
anything.
C
It's
currently
blocked
to
arraybuffer
for
workers.
There
is
more
functionality
for
for
workers,
because
you
kind
of
like
need
to
detach
the
array
buffer,
and
I'm
not
touching
that
point
yet
so
I'm
my
pro
request
is
currently
just
working
with
shared
array.
Buffers.
B
So
have
have
you
and
charity.
Looked
at
my
alternative
proposal.
C
B
Up
the
guest
I
wrote
on
on
this:
it's
it's
in
the
agenda,
I'll
post
it
here
again.
My
concern
with
your
approach
is
that
it
introduced
a
precedent
for
implicitly
allowing
some
non-primitive
and
non-callable
through
the
callable
bandari,
and
it's
also
a
precedent.
It's
also
a
solution
that
doesn't
solve
for
every
type
of
more
complex
object.
B
That
may
want
to
be
shared
array
buffer
being
an
explicit
an
explicit
example
where
array
buffer
has,
if
you
want
to
transfer
from
one
realm
to
another,
you
have
to
explicitly
express
your
intents
to
detach
it
and
and
no
longer
want
to
use
it.
So
this
simply
passing
as
an
argument
to
a
callball.
It
doesn't
leave
any
place
to
to
express
that
intent
and
that's
why
I
believe
an
implicit
which
is
basically
a
simple
clone
is
not
the
right
approach.
B
B
Issues
about
breaking
javascript,
current
javascript
and
variants,
so
I
it
also
allows
this
to
be
virtualizable
and
completely,
and
that
can
be
completely
extended
by
userland
to
add
new
clonable
types
if
it
wants
to
as
long
as
it
works
in
tangents
with
the
callable
boundary.
B
So
we
would
have
to
also
virtualize
the
shadow
role,
of
instance,
the
schedule
and
constructor
at
the
same
time,
to
make
sure
it
creates
a
shadow
realm
that
has
the
same
type
of
cloners.
That
can
be
recognized
on
the
other
side,
so
I
mean
this
is
not
unlike
what
a
membrane
on
top
of
a
callable
battery
would
do
in
any
way.
In
the
first
place,.
C
Yeah
okay,
so
we
discussed
that
I
I
brought
that
to
to
breaking
career's
attention.
I
think
they
had
a
conclusion
and-
and
they
observed
that
and
to
discuss
that
I
can
tell
you
that,
unfortunately,
I
cannot
bring
you
like
the
actual
conclusion
about
it,
because
I
I'm
sorry
I
don't
remember,
and
they
should
be
more
on
the
technical
details
of
that,
but
it's
unfortunate.
We
also
have
this
company-wide
event.
C
C
One
of
the
things
for
this
president
for
introducing
this
precedent.
It's
actually,
I
think
this
president
would
be
similar
to
what
mark
say
like
if
those
guys
have
a
special
treatment
for
for
any
kind
of
object.
You
do
the
same
treatment
for
rapt
like
if
you
just
reuse
the
target
of
a
wrapped
function.
Yeah
you
observe
the
internal
like.
Is
this
a
wrap?
Is
this
a
wrapped
function?
B
It's
not
quite
the
same,
though,
because
this
we're
talking
about
the
cobalt
battery
recognizing
other
things
where,
instead
of
the
global
boundary
recognizing
its
own
things,.
C
B
Where
the
collar
bolt
under
recognizing
its
own,
things
can
be
virtualized
again,
because
you
can
just
return
a
function
that
recognizes
its
own
wrap
things,
so
you
can
always
wrap
yourself,
you
cannot,
you
cannot
introduce
a
hook
that
would
wrap
the
recognition
of
something
else.
C
Funny
enough,
you
bring
I'm
starting
to
think
about
one
thing.
I
believe
this
per
request
is
actually
creating
a
newer
rate
buffer
in
the
other
realm,
and
this
new
array
buffer
is
actually
getting
the
intrinsic
shared
array
buffering
creating
a
new
instance.
So,
even
if
you
virtualize
everything,
you
get
an
instance
of
an
actual
shared
rebuffer.
So
if
you
don't
treat
that
you
could
probably
have
access,
so
you
already
have
that
with
wrap
functions
anyway,
so
the
main
brains
would
need
to
handle
those
too.
C
Okay,
sorry,
I
was
just
traveling,
letting
my
mind,
travel
here
through
yeah.
What
we
received
the
other
realm.
B
Are
you
saying
that
if
you
had
denied
the
shared
array
before
constructor
in
the
other
realm
you
would
that
introduces
a
way
to
reintroduce
it.
C
No,
it
doesn't
introduce
anything
when
you
create
a
wrapped
function.
You
already
have
some
sort
of
access
to
the
function
that
prototype
like
you
have
access
to
intrinsic.
So,
if
you
don't
treat
the
wrap
function,.
C
It's
kind
of
like
right:
you
already
have
this
with
wrap
function,
so
we're
having
a
shared
array
buffer
if
you
create
a
new
shared
array
buffer
using
the
36
which
you're
going
to
have
access
to
to
the
intrinsics
of
2036
in
the
other
realm.
The
other
realm
also
needs
to
to
give
some
treatment
to
that
received
shared
array
buffer
so
that
that's
not
I'm
sorry.
It
was
just
like
lovely
thinking
here.
D
C
C
I
was
just
thinking
like
in
my
case
in
my
current
proposal.
If
I
transfer
a
share
the
ring
buffer,
the
other
round
receives
an
actual
shared
array
buffer
and
not
something
that
I've
virtualized
on
top,
so
it
still
needs
treatment
in
the
other
realm.
C
D
Okay,
okay,
so
what
so?
What
did
you
mean
by
treatment.
C
My
treatment
is,
if
like,
if
I
have
a
virtualized
environment,
if
I
have
any
control,
if
I
replace
the
surgery
buffer,
I
need
to
account
like
for
these
received
values.
I
cannot
just
expose
to
the
user.
D
B
However,
a
function,
the
function
prototype
which
you
would
be
able
to
get
at
through
the
wrap
function
is
undeniable,
where
the
shared
array,
buffer,
constructor
and
prototype,
are
deniable.
C
Well,
the
wrap
function
yeah,
if
you
like,
still,
if
you're,
exposing
the
wrap
function
to
an
user,
you
cannot
expose
it
directly
because
they
they
still
have
access
to
to
function
prototype.
That's
the
thing
like
shared
array.
Buffer
is
not
creating
a
new
precedent
on
this
part,
only
actually
exposing
the
primordials,
because
wrapped
functions
already
has
access
to
the
promo
right.
B
But,
as
I
said,
wrapped
functions
are
like
the
function.
Prototype
is
undeniable.
You
can
always
get
at
it
through
syntax,
where
you
cannot
get
at
the
shared
array
buffer
prototype
through
syntax.
You
can
deny
the
the
global
constructor
and
then
that
problem
would
never
have
access
to
it,
and
now
you
you've,
you've
introduced
a
way
of
just
bypassing
that
object
as
an
argument
from
another
realm
intrusive
way.
B
To
show
that
again
I
mean
it's,
it
might
be
fine,
because
it's
the
action
of
another
realm
onto
onto
the
cold
ram
to
to.
Basically
it's
like
you
were
it.
It
might
problems
that
it's
somewhat
implicit
that
you're
giving
access
not
just
to
that
object,
but
also
to
its
prototype
and
constructor
and.
C
You're
not
you're,
not
giving
access.
I
think
in
both
cases,
like
both
in
your
proposal,
my
proposal,
you
you
receive
a
new
shared
array
buffer
from
that
brown,
so
you
don't
have
any
access
to
to
the
to
the
other
realm.
From
this
new
instance,
you
just
have
the
buffer
inside
as
a
target
yeah.
I.
B
Yes,
the
the
difference
is
that,
ultimately,
I
want
to
work
up
the
cloner
idea
to
a
place
where
it
would
be
extensible
so
that
if
someone
goes
in
and
virtualized
charitary
buffers,
they're
able
to.
B
A
virtualized
instance
on
the
other
side
so,
and-
and
this
is
this
is
this-
is
where
I'm
concerned
by
by
creating
an
implicit,
an
implicit.
D
So,
just
to
to
be
very
pedantic
about
the
term
undeniability
it
it
is
the
case
in
you
know
that
quite
often
your
one
internal
method
will
refer
to
intrinsics
and
therefore,
if
that
internal
method
were
to
be,
you
know,
observably
called
then
the
intrinsic
refers
to
might
be
undeniable,
but
we
don't,
but
but
then
whether
whether
the
undeniability
follows
depends
on
whether
that
internal
method
itself
is
undeniable
or
undeniably
called
so
the.
D
D
So
technically
it's
not
undeniable,
but
practically
you
know
whether
you
know
is
it
undeniable
enough
for
matthew's
point
to
be
a
practical
reason
to
avoid
doing
this,
and
I
don't
have
an
opinion
on
that.
Yet
the
I
will
also
say
by
the
way,
with
regard
to
matthew's
extensible,
cloner
matthew,
and
I
had
a
long,
long
discussion
on
this
last
night.
D
That
did
not
come
to
a
conclusion,
so
I
want
to
present
the
following
as
a
possible
alternative
to
be
discussed
as
opposed
to
a
position
that
I'm
convinced
of
or
anything
like
that,
which
is
that
the
cloner-
that's
that's
built
in
as
a
new
primitive
that
the
spec
provides
just
be
a
the
most
primitive
and
limited
cloner
to
do
the
things
that
you
can't
do
in
user
code
and
that
would
be
to
clone
array,
buffer,
shared
array,
buffer
and
possibly
some
very,
very
small
number
of
select
other
special
objects,
for
which
there's
a
compelling
case
that
you
can't
do
in
user
code.
D
What
I
have
in
mind
specifically
is
a
static
module
record
and
that
the
built-in
cloner
copy
clone
and
probably
re-rename
it
to
something
else,
but
if
not
clone
anything
else,
including
simple
objects
and
simple
arrays,
and
in
that
sense
the
built-in
mechanism
to
become
something
like
a
cloner
needs
to
be
extended
by
user
code.
So
everything
that
can
be
done
by
user
code
must
be
done
by
user
code
to
have
something
that
seems
to
be
a
cloner.
D
And
this
is
consistent
with
the
philosophy
we've
already
taken
in
shadow
realms,
that
the
coral
boundary
is
providing
almost
nothing
from
membrane
functionality,
but
it
provides
the
minimal
primitive
functionality
that
you
need
so
that
all
of
the
rest
of
the
membrane
can
be
built
in
user
code.
I
think
I
think
that
it's
at
least
plausible
that
we
should
follow
that
philosophy
with
regard
to
cloning
as
well.
C
So
mark
and
that
too
I'd
like
to
make
it
clear,
I'm
opposite
positive
and
my
my
goal
is
to
find
like
the
success
path
for
all
of
us
due
to
move
shadowhelm
I'll
show
rounds
four.
C
I
my
personal
note
is
just
that.
Matthew's
approach
is
a
little
bit
over
complex.
C
Please
take
it
with
a
grain
of
salt.
I
of
course,
like
I
have
some
preference
for
the
simplicity.
I
also
understand,
like
the
reasons
as
you're
putting
down
here
some.
Some
of
the
reasons,
although
my
personal
note
is,
doesn't
mean
anything
I
need
karidy
and
rick,
and
I'm
gonna
send
you
to
them
like
a
notice
like
I'm
gonna,
ask
them
to
reveal
again
and
try
to
to
capture
all
of
these
and
consider
like
how
is
that
option
also
like
workable
for
us?
What
what
we
want?
C
D
So
let
me
say
for
shared
array:
buffers
leo's
perspective,
I
think,
is
plausible.
If
you
take
shared
array
buffers
by
themselves
as
the
as
the
problem
case.
Likewise
for
shared
array,
buffers
plus
static
module
records,
the
the
one
that
creates
the
show
stopping
problem.
For
me,
that's
along
the
lines
of
matthew's
objection
is
array
buffer
and
the
reason
why
array
buffer
is
the
problem
case
is
that,
because
it's
an
ownership
transfer,
the
original
loses
its
functionality.
D
The
original
becomes
a
what
what's
what's
the
name
for
it,
a
not
truncated,
detached
thank
you.
The
original
becomes
detached,
whereas
for
shared
array,
buffers
or
anything
else,
just
going
through
the
call.
You
know
for
shared
array
buffers
and
all
the
things
that
currently
go
over
shared
array
buffers.
D
Let
me
sorry
to
go
over
the
column,
boundary
like
functions,
and
if
we
added
static
module
records
that
all
of
those
things
the
original
has
no
loss
of
functionality
so
having
it
simply
encounter
a
membrane
and
having
it
get
shared
on
the
other
side
does
not
cause
a
local
surprise.
Detaching
is
a
local
surprise
and
that's
where
matthew's
objection
that
there
has
to
be
some
expression
of
intent.
C
And
just
as
a
also
as
another
note,
shu
himself
asked
for
for
this
topic
to
be
a
follow-up
proposal
and
not
a
stage
three,
I
think
for
what
we
are
discussing
here
and
like
not
having
a
final
conclusion.
It's
like
we
continue
to
investigate.
I
think
it's
reasonable
to
have
this
as
a
follow-up
and
not
block
stage.
Four.
D
C
D
A
So
I
think
this
is
a
good
place
to
draw
the
this
meeting.
Does.
Does
anybody
object
to
closing
up
closing
on
this
note,
I'm
good
all
right,
awesome.
A
Yeah,
of
course,
awesome
thanks.
That's
that's
a
call.