►
From YouTube: SES Meeting: Records, Tuples, and JSON
Description
Nicolò and Mathieu hash out interactions with JSON.
A
Good
morning-
and
I
am
hosting
in
place
of
chris
today
or
says,
meeting
on
the
agenda,
I
believe
we
have
interactions
between
box
and
json
and
two-string
and
the
interactions
with
virtualization
and
compartments
nicolo.
You
put
the
item
on
the
engine
that
so
I'll.
Let
you
go.
B
Okay,
so,
yes,
we
were
discussing
this
on
gita
with
matthew,
so
the
like,
we
found
a
problem
that
we
didn't
consider
before.
B
So
we
moved
the
unbox
method
from
the
box
prototype
to
the
to
the
box,
constructor
the
static
method,
so
that
compartments
can
replace
the
box
constructor
and
the
unbox
static
method
per
compartment
and
provide
a
different
unbox
function.
B
However,
we
found
two
other
ways
that
would
observe
the
contents
of
a
box
and
one
is
passing
a
box
to
the
string
function,
because
that
function
like
currently
invokes
to
string
on
the
box
content,
and
so
we
might
need
to
change
that
and
the
other
one
is
json.stringify
which
currently
like
unwraps
boxes
and
stringifies
their
contents.
B
However,
this
gives
away
first
of
all
to
observe
the
contents
of
the
box
in
the
resulting
string
and,
most
importantly,
if
you
pass
a
replacer
to
the
json.stringify
function,
you
could
like
steal
the
the
contents
of
the
box
without
relying
on
the
box.unbox
function,
and
so
we
also
need
to
to
change
that.
Okay,.
C
So
nicola,
let
me
just
matthew,
explain
this
to
me
and
I
feel
very
confused.
The
rationale
for
introducing
boxes
is
we
didn't
want
to
just
have
a
transparent
transition
from
records
and
tuples
to
objects.
We
wanted
to
put
a
barrier
in
there
that
was
explicitly
non-transparent
and
then,
furthermore,
we
decided
that
it
would
not
work
across
realms,
so
it
was
not
just
explicitly
non-transparent.
C
Just
trying
to
pretend,
like
things
are
transparent
again,
the
other
side
I
mean
the
the
the
other.
I
mean
extremes
are
simple
things
between
extremes
generally
tend
to
get
messy
and
confusing.
The
other
extreme
is.
If
we
want
things
to
be
transparent,
let's
say
to
two
string
or
json
stringify,
then
why
not?
C
Just
have
them
be
transparent
and
get
rid
of
the
box
concept
completely,
and
the
only
intermediate
thing
that
I
can
think
of
that's
coherent
is
that
we've
got
box
there
as
a
as
a
non-transparency,
but
not
as
a
barrier,
in
which
case
it
should
it
should
work
across
realms.
Not
just
within
a
realm
which
it
should
work
unconditionally,
and
you
know,
and
and
for
each
of
these
things
there
are
objections,
but
the
point.
So
I'm
not
saying
that
I'm
advocating
any
particular
one
of
these.
C
B
Yeah,
so
I
agree
with
your
like
with
your
point
of
view,
I
personally
see
boxes
as
something
that
should
be
fully
like
opaque,
like
non-transparent.
B
The
reason
that
we
currently
on
wrap
boxes
in
jazz
stringify
is
that
we
found
is
that
it
makes
it
way
easier
to
like
often,
for
example,
you
might
stringify
something
to
send
that
to
another
program,
and
that
program
does
not
really
care
about
the
difference
between,
like
the
immutable
part
and
not
mutable
part
or,
for
example,.
C
So
I'm
sorry
I'm
just
I'm
sorry
to
interrupt
it.
Just
if
the
other
program
doesn't
care
about
the
transition,
then
probably
it
doesn't
care
about
the
difference
between
records
and
tuples
on
the
one
hand
and
frozen
objects
and
arrays.
On
the
other
hand,
in
which
case
simply
the
imposition
of
a
box
at
the
boundary
is
already
an
impediment
to
that
program.
B
I
mean
the
program
that
has
the
record
and
travel
with
books
inside
might
care
about.
This
difference
is
just
that
the
like,
when
sending
this
to
somewhere
that
somewhere
might
not
care
about
this.
C
So
I'm
saying
the
receiver
the
receipt:
if
the
receiver
doesn't
care
about
it,
then
the
receiver
probably
doesn't
want
to
see
a
box
in
the
way
either.
A
So
the
way
that
jason's
stringify
unwrapping
boxes
works
currently
is
that
it
is
fully
transparent.
It's
like
the
box
was
never
there
same
for
the
way
records
and
tuples
are
stringified.
It's
like
they
are
the
equivalent
object
or
array.
I
believe
the
I
think
one
question
to
ask
is:
usually
you
don't
send
data
one
way
or
just
one
way.
You
also
receive
it.
A
If,
if
a
program
is
able
is
receiving
data
that
doesn't
have
this
information
about
records,
box
and
tuple
and
then
somehow
constructs
it,
it
should
be
able
to
also
explicitly
deconstruct
it
if
you
need
to
send
it
back.
So
I
I
agree
like
it
might
be
a
little
bit
less
ergonomic
to
have
to
explicitly
unbox
boxes
in
a
serializer
or
or
something
like
that.
A
But
I
can't
really
imagine
a
program
except
something
I
just
want
to
be
able
to
accept
anything
regardless
of
what
it
is
and
somehow
make
a
stringified
version.
Any
program
that
handles
boxes
in
the
first
place
will
want
to
be
explicit
in
the
serialization.
C
Yeah,
the
whole
point
of
boxes
is
to
make
things
non-transparent,
is
to
provide
an
ex
is
to
enforce
that
there's
an
explicit
step
needed
to
get
from
the
from
the
box
to
the
box
content.
So
I
think
I
mean
my
main
concern
here
is
simply
that
we
have
a
clear
conceptual
notion
of
what
a
box
is
and
what
purpose
it's
supposed
to
serve,
and
then
we
stay
true
to
whatever
that
abstract
notion
is
throughout
all
the
details
of
the
design.
B
Okay,
so
I
guess
what
the
proposal
like
the
what
the
proposal
is
currently
like
direction
where
country
moving
it
is
that
boxes
are
just
like,
non-transparent
things
put
in
the
structure
like
as
if
they
were
just
symbols,
and
so
they
should
not
be
unwrapped
by
jesus
stringify
and
they
should
not
be
like
stringified
nicely
by
the
string
function.
Constructor.
C
Correct
and
then
with
and
with
json.stringify
there's
a
way
for
somebody
to
get
the
effect
if
they
want
it,
which
is
a
replacer
that,
where
the
replacer
the
replacer
can
use
the
box
constructor
if
it
wants
to
unwrap
a
box
when
it
encounters
it,
but
it
should,
but
it
should
definitely
not
be
the
default.
D
E
I
I
think
ara
may,
when
we
first
talked
about
jason
stringify.
I
think
the
the
main
use
case
was
around
just
the
common
thing
of
developers
doing
json
stringify
if
they're
debugging
in
a
place
without
like
an
interactive
console,
so
it
was
like.
I
don't
think
we
had
great
use
cases
for
it,
apart
from
it
just
being
a
really
quick
shorthand
for
debugging,
something
you
know
rather
than
making
them
also
have
to
pass
in
to
replace
her
just
in
terms
of
their
like
art
box
is
supposed
to
be
this
explicit
boundary.
E
It's
like
their
explicit
boundary,
if
someone's
debugging.
Maybe
it
would
be
nice
that
they
can,
just
if
they've
got
a
little
debug
function
that
just
dump
something
to
the
console
that
will
still
work.
So
I
think
that
that
was
the
reasoning
behind
it.
Rather
than
thinking
boxes
of
this
explicit
boundary,
except
then,
in
this
case
there
for
some
reason
not.
C
Okay
for
the
node
console
there
is
this
weird
util
thing
that
peers
into
the
insides
of
objects
in
magic
ways,
and
it's
you
know
it's
outside
the
javascript
spec.
It's
actually
something
that
that
is
a
little
offensive,
because
it's
doing
things
that
can't
be
done
in
javascript,
it's
not,
but
it,
but
it's
there
and
having
it
peer
into
boxes
is
no
is
is
no
more
of
a
problem
than
having
you
know.
An
interactive
debugger
appear
into
boxes.
F
Right
I
mean
we
actually
talked
about
this
recently
like,
for
example,
you
can
observe
the
set
of
things
in
a
weak
map
in
the
chrome
console
right,
like
there's.
No
reason
why
debug
tools
cannot
reach
past
that
member,
like
through
that
barrier
right
and
in
terms
of
like
making
it
easy,
like.
I
think,
the
the
argument
against
it
might
be
that
people
will
end
up
writing
lots
of
code
that,
like
lots
of
revivers,
that
will
like
put
things
in
earth.
F
Sorry
replacers
that
take
things
out
of
boxes,
but
I
could
easily
see
popular
user
lane.
Libraries
that
implement
like
a
very
simple
replacer
function
that
people
use
those
don't
have
to
be
like
that's
easily
implementable
user
land,
and
it
could
be
a
simple.
C
Package
also,
we
should
be
not.
We
should
not
be
under
any
illusions
that
imposing
the
box
non-transparency
step
whether
we
made
a
special
case
for
two
string
or
j
and
jason
or
not.
What
we're
saying
is
for
everything
other
than
the
the
special
places
we
made
an
exception.
We're
going
to
cause
developers
to
write
a
lot
of
code
to
get
through
a
purposely,
non-transparent
boundary
that
that,
where
we're
currently
with
with
frozen
objects
and
arrays
containing
things,
there
is
no
such
boundary.
D
Plus
one
yeah,
I
was
going
to
say
at
the
risk
of
opening
a
can
of
worms
in
perhaps
making
mark
scream.
If,
if
the
issue
is
that
you
need
a
special
replacer,
perhaps
the
box
class
itself
could
provide
that
replacer
as
a
thing
you
would
just
toss
in
when
you
call
jason
that
stream.
F
We
certainly
can.
I
would
be
interested
to
see
how
much
demand
there
is
for
it,
especially
if
there's
like
you
know
a
popular
npm
package
that
comes
out
of
this,
that,
like
people
like
to
use
and
then
the
community
effect
takes
over,
but
that
could
also.
I
think
that
it
would
be
certainly
easy
to
add
later,
as
well,
just
as
a
new
property
on
the
constructor.
E
The
other
place
that
function
might
be
useful
is
the
other
thing
we
were
talking
about
with.
If
the
unbox
isn't
on
the
prototype,
it
means
you
can't
just
chain.
Oh
I'm
accessing
some
deep
record.
Oh
now,
I've
got
to
a
box.
I
need.
I
just
need
to
unbox.
If
it's
a
static
thing
I
have
to
do,
I
even
have
to
extract
the
box
out
first
and
now
do
box
dot
unbox.
You
know
I
can't
just
inline
it
in
one
expression
as
easily
right.
E
I
say
if
you
you
can
like:
if
the
pipeline
proposal
goes
forwards,
you
can
kind
of
still
get
a
similar
thing
right.
I
can
have
record
dot
this
dot,
this
dot,
this
dot,
this
right,
the
way
deep
down.
Oh
and
now,
I've
got
to
a
box
pipe
that
into
box
on
box,
but
then
that
can
be
annoying
if
box
is
sometimes
not
undefined,
so
it'd
be
another
like
a
function
that
takes
a
value
checks.
If
it's
a
box,
if
it
is
a
box,
it
unboxes
it.
E
A
I
I
think,
no
matter
what
you're
not
never
going
to
be
able
to
have
a
prototype
method
that
that
works,
because
if
you
want
for
a
replacer
to
do
it
properly,
if
you
want
to
do,
if
you
want
to
restore
transparency
with
a
replacer,
you
have
to
actually
deeply
unbox
because
you
might
have
a
box
of
blocks
of
box
of
box.
So
if
you
return
another
box,
that's
just
not
gonna
help.
Your
replacer
has
to
remove
every
box
on
on
the
path
to
something
useful.
A
E
E
You
know
it
it
unboxes
n
boxes.
So
if
you
give
it
something
that
isn't
a
box,
then
it's
already
unboxed.
If
you
give
it
a
box
of
a
box
for
a
box
for
box,
you
know
it
just
unboxes
all
the
way
through.
I
can
see
that
being
something
that,
if
there's
high
enough
demand,
you
could
add
in
the
future,
and
it
would
be
like
a
useful
thing
that
people
would
probably
want
a
lot.
A
E
A
Is
only
useful
if
people
want
to
transparently
unbox
the
box
and
and
and
not
and
remove
them
from
serialization,
for
example.
That
is
clearly
something
we
personally
wouldn't
want
to
do
at
all.
We
want
to
want.
We
would
want
to
attack
them
specifically,
and
in
that
case
recursively,
is
it
doesn't
help?
You
don't
need
it,
so
it's
really
dependent
on
the
use
case,
and-
and
that's
why,
like,
I
don't
think,
we
should
try
to
add
that
to
the
language
right
away.
F
B
By
the
way
like
because
of
how
compartments
clone
the
box
function,
we
will
be
able
to
add
new
static
function
later
without
introducing
like
communication
channeling
like
compartments
implementation,
that
will
support
blocks,
but
not
disney
functions
right.
Yes,
okay,
every.
B
Okay,
so
guess
this
is
all
for
this
topic.
The
the
conclusion
is
to
not
transparently
support
it,
and
we
will
figure
out
something
similar
to
how
to
stringify
a
firebox
like
what
is
the
exact
string
that
will
return
it,
but
it
will
not
depend
on
the
box
contents.
A
Excellent,
should
it
be
silently
ignored
or
treated
through
a
typo
like
begins.
I
prefer.
C
C
If
you
try
to
stringify
something
which
some
of
the
you
know
in
which
there
are
symbol
named
properties
or
non-innumerable
properties
or
inherited
properties,
all
of
the
functions.
C
And
functions
are
ignored,
that's
right!
So
there's
a
tremendous
number
of
things
that
you
know,
sort
of
the
general
style
of
json
stringify
is
to
just
ignore
anything
that
it's
not
happy
with,
and
bigint
is
really
an
exception
to
the
general
rule.
That
said,
I,
like
the
exception
better
than
the
general
rules,
I'm
happy
either
way.
D
D
B
A
And-
and
I
believe
that
would
be
the
same
as
attaching
something
to
a
box
version
of
a
primitive,
so
a
number
instance,
I
believe,
that's
dropped
as
well,
because
it's
automatically
unwrapped.
A
B
D
B
C
A
My
problem
was
not
actually
with
any
concept
in
javascript,
it
came
from
c
sharp
and
things
like
that,
where
other
languages
have
the
concept
of
boxed
primitives.
C
Yeah
and
it's
an
and
and
because
I'll
go
ahead
and
say
I'm
confused
by
it
as
well,
because
it's
not
just
a
common
concept
in
programming,
it's
a
concept
that
already
exists
in
javascript
right.
If
you
have
a
a
box
and
you
say:
object
open
paren
the
box
close
paren,
then
what
you've
got
is
a
boxed
box.
C
You
know
the
the
object
wrap
for
all
the
primitives.
We've
got
object,
wrappers
already
in
javascript
the
universal
term,
for
that
across
programming
languages
is
boxing.
So
I
will
say
I
don't
want
to
bike
shed
it
here,
but
I
do
want
to
encourage
this
proposal
to
bike
shed
it
and
hopefully
choose
a
different
name
before
this
goes
forward.
A
Okay,
sorry
for
the
interlude.
I
also
assume
that
two
string
would
just
return
a
box
open,
close.
A
Great
is
there
anything
else
that
anyone
wants
to
discuss.
E
I
had
a
curiosity,
as
I
think
you
might
have
talked
about
it
last
week,
but
I
was
struggling
to
keep
up
as
usual
just
that
the
use
case
around
wanting
if
boxes
can
pass
callable
boundaries
and
they
can't
be
unboxed
cross-realm,
but
they
can
if
they
and
boxes
can
contain
primitives.
E
So
if
all
of
those
things
are
given
why
we
would
then
still
allow
a
box
containing
a
primitive
to
be
unwrapped,
I
can
see
that
it
doesn't
carry
the
security
implications
yeah,
but
I
couldn't
see
like
in
my
mind.
You
could
still
implement
a
membrane
if,
if
you
couldn't
unwrap
it,
but
I
was
also
struggling
to
keep
up.
A
Yeah
I
mark,
I
that's
something
I
realize,
and
I
I
need
to
think
about
this
again.
So
actually
here's
here's
the
problem.
So
what
I,
what
I
said
is
if
you
have
a
box
of
primitive.
A
C
I'm
sorry,
I'm
sorry,
objects,
don't
carry
it
around
either.
There's
no
realm
internal
slot
in
an
object.
A
D
A
A
Yeah
exactly
so
the
box
remember:
the
box
remembers
the
realm
and
checks
that
the
realm
is
the
same.
If
the
content
of
the
box
is
an
object,
only
the
it's,
it's
it's
a
bit
obscure,
but
I
believe
there
is
no
other
way
to
make
to
make
it
really
work.
If
you
check
the
realm,
regardless
of
the
content,
that
means
you
cannot.
A
A
A
So
that
means,
if
you
have
a
a
record
tuple
that
contains
boxes,
but
that
those
boxes,
none
of
them,
contain
an
object.
You
have
to
do
an
extensive
mapping
and-
and
you
can't
remember,
you
can
memorize
the
result
of
that
that
operation.
So
every
time
you
see
that
record
again,
you
have
to
redo
that
mapping
over
and
over
and
over
again.
Similarly,
in
going
both
directions.
C
I
see
so
that
I
I
I
see
that's
a
problem.
The
the
security
problem
with
the
current
suggestion
is
that
as
soon
as
you
get
used
to
boxes
hide
their
contents
from
those
who
don't
have
the
box
constructor,
then
you
put
a
secret
string
in
the
box.
Thinking
that
the
box
will
hide
it
from
those
who
don't
have
that
box
constructor
and
then
you're
surprised
that
the
secret
got
revealed.
So
as
soon
as
you
introduce
a
a
hiding
mechanism
to
have
it
only
hide
some
things
is
quite
hazardous.
E
E
So
if
I'm
passing
a
record
to
the
other
side
of
the
realm
as
soon
as
someone
does
a
quality
check
on
that
that
quality
check's,
possibly
going
to
have
to
like
deeply
traverse
that
whole
thing,
so
the
general
expectation
of
if
you're,
dealing
with
deep
records
is
that
some
operations
are
costly.
So
the
fact
that
the
membrane
thing
would
potentially
be
costly
if
you
you're
having
to
traverse
it.
It's
like
that
traversal
is
something
you're
probably
going
to
have
to
do
at
some
point
anyway
in
your
program,
but.
A
It's
a
lot
more
expensive,
it's
traverse
it
take
every
box
you
encounter
and
and
and
send
information
about
how
to
recreate
another
box.
With
the
same
with
that
content
on
the
other
side,
and
so
you
have
to
do
that
mapping
over
and
over
every
time
you
cross.
A
You
need
for
the
boxes
and
then
you
need
to
send
over
the
the
record
and
then,
when
you
get
it
on
the
other
side,
you
need
to
reconstruct
a
new
record
with
different
boxes.
A
I
I
don't
want
to,
but
people
do
that.
That's
one
of
the
reason
I
it's
a
it
makes
boxes
a
lot
harder
to
to
deal
with
again
that
that's
a
problem
that
would
go
away
if,
if
we
only
allowed
objects
in
in
boxes.
E
This
is
not
me
saying
I'm
just
repeating
what
I've
read
online,
the
rather
than
purely
seeing
them
as
the
thing
that
gives
you
an
escape
hatch
in
records
and
tuples,
where
in
that
case
it
the
only
reason
you
would
possibly
really
want
it
is
because
you're
storing
a
non-primitive.
E
B
Yes,
so,
for
example,
jordan
suggested
a
array.find
like
function
which
can
differentiate
the
result
between
like
not
found
and
found
undefined
by
using
box,
as
if
it
was
like
a
maybe
type
and
you're
torn
on
the
fine.
If
you
didn't
find
anything
and
box
of
undefined,
if
you
found
undefined
there
and
other
use
cases
that
have.
C
Yeah,
but
I
mean
there's,
there's
there,
given
the
the
non-transparency
of
boxes
there's
you
know,
we've
got
a
zillion
different
ways
to
to
build
a
non-transparent
container
around
something
in
order
to
differentiate
it.
The
the
fact
that
we
can't
have
a
promise
for
a
promise
is
the
the
classic
case
of
that
promises
are
only
promises
for
non-venables.
C
So
if
you
want
to
effectively
get
a
promise
for
t
where
t
is
anything,
then
you
instead
have
a
promise
for
a
container
of
t
with
many
different
kinds
of
containers
having
been
used,
such
as
a
singleton
array.
You
just
say:
here's
a
promise
for
a
singleton
array
of
tea.
Singleton
arrays
are
never
promises.
So
now
you
effectively
have
a
you
know.
You
you've
got
an
encoding.
E
A
C
Because
if
you're
always
going
to
take
the
result
and
put
a
singleton
array
around
it,
then
if
the
actual
result
was
a
singleton
array,
you'd
have
a
singleton
array,
wrapping
a
singleton
array
and
if
you're
not
happy
with
that,
then
you
shouldn't
be
happy
with
the
box
containing
a
box.
D
B
B
Another
use
case,
which
was
brought
up,
which
I
found
more
like
convincing,
was
that
whenever
you
use
records
records
and
tuples
to
build
a
like
a
structure
that
potentially
accepts
parts
from
the
outside,
for
example,
if
you
have
a
virtual
dom
library
based
on
records
and
tuples,
where
you
have
like
props
coming
from
the
outside,
you,
you
probably
would
want
to
just
put
the
box
to
contain
the
those
properties
without
really
caring
about
what
those
properties
are
and
so
like.
If
box
accept
anything,
it
will
just
work.
A
Yeah
semantic
separation
between
system
data
and
user
data.
B
C
A
C
So
if
it
does
it
so,
if
the
data
are
objects,
then
they
have
unique
identity.
So
we
don't
care
that
we're
not
doing
a
deep
equality
by
structure
of
the
user
data
if
user
data
is
objects,
so
in
that
case
we're
still
not
breaking
anything.
We
put
it
inside
a
singleton
array
inside
box.
A
But
if
you're
getting
that
same
identity
now,
if,
if
you
create
a
new
singleton
array,
every
time,
you've
lost
that
identity,
that
equality.
C
The
and
there's
a
lot
of
assumptions
here
about
you're
you're
handling,
user
data,
opaquely
you're,
putting
it
inside
a
record
or
tuple,
and
you
care
about
the
identities
inside
the
user
data.
E
E
If,
if
it's
a
box,
then
it's
because
the
person
gave
them
something
that
couldn't
be
stored
in
a
box
or
if
it's
not
a
box,
then
it's
a
primitive
because
they
gave
us
a
primitive
or
you
know
that
they
can
still
get
around
it.
It
just
means
they're
gonna
have
to
write
more
code
to
make
sure
they're
tracking.
What's
going
there,
the
advantage
of
it
box
destroying
anything
means
that
code
is,
is
one
line.
So
it's
not
it's
not
like
a
capability.
It's
a
an
ergonomics
thing.
F
This
all
comes,
this
all
seems
like
it
comes
back
immediately
to
wanting
to
use
boxes,
generic
single
item
container,
because
if
you
want
like
in
that
case,
like
you
just
mentioned,
it
seems
possible
to
just
not
use
boxes.
But
if
you
care
about
using
boxes
as
a
generic
delineation
of
like
of
a
container
then,
but
that
it
just
seems
it
seems
counter
to
the
now
more
solidified
principles
behind
lack
of
transparency
through
a
box,
because
a
container
doesn't
explicitly
mean
that
it's
like
opaque
right.
It
just
means
that
it's
a
container
right.
F
Ultimately,
I
I
don't
really
care
whether
they
soar,
primitives
or
not,
but
it
seems
kind
of
gross
in
my
head,
like
a
box,
is
a
reference
to
an
odd
like
it's
more
of
like
a
in
my
head.
A
box
is
like
a
reification
of
the
pointer
to
the
object,
so
it
doesn't
make
sense
in
my
head
to
have
a
revocation
to
a
pointer
to
a
string
that
doesn't
exist
like
it
doesn't,
but
I
get
it.
I
guess.
C
Okay,
so
so
I'll
just
contribute
that
my
feedback
on
the
other
side
so
now
you've
got
feedback
on
both
sides.
A
The
generic
delineation
between
system
data
and
user
data,
that
example,
did
somewhat
convince
me
as
a
making
box
a
a
container
that
you
have
to
have
the
you
have
to
unbox
to
look
at
what
it
is,
but
you
you
just
don't
care
about.
What's
in
there
and-
and
I
agree
thinking
about
it
now-
it
does
completely
go
against
being
able
to
pass
that
box
and
being
able
to
unbox
it
in
another
realm.
A
F
An
argument
could
be
made
that
we
could
disallow
well,
it
depends
on
how
the
patterns
end
up
peeking
out,
but
an
argument
could
be
made
that
you
could
disallow
primitives
now
and
come
to
conclusion
later,
but
if
people
start
deciding
to
throw
things
in
boxes
to
find
out
if
they're
primitives
and
that
becomes
a
problem
also
just
don't
do
that.
Don't
stop.
C
The
the
shortest
code-
wise
is
capital
object
of
x,
triple
equal
x
and
the
quickest
is
type
of
x,
is
either
object
or
function.
G
E
F
C
F
C
And
on
some
engines
I
think,
maybe
today
all
engines
a
try
catch,
even
if
the
tripod
doesn't
throw
is
not
free.
D
B
B
So
like,
I
believe
that
primitives
in
boxes
would
still
not
be
that
common,
mostly
because,
like
the
main
reason
for
boxes,
is
to
put
objects
there
like
to
put
objects
in
records
and
tuples
and
that's
how
they,
I
think
that
will
be
used
the
most,
and
so
even
if
the
primitive
case
is
lower.
A
G
E
I
still
don't
fully
get
this
the
slow
down
so
like
if
engines
have
so
I'm
constructing
a
record,
as
I
construct
that
record,
you
know
I'm
putting
my
key
values
in
every
time.
Every
time
I
see
a
value,
I
can
tell
it
creation
time
if
I'm,
that
value
is
primitive
or
not
and
effectively.
You
know,
like
then
have
a
flag
on
my
resulting
object,
which
is
just
the
you
know,
the
bitwise
or
flag
of
my
contents.
E
A
Across
that's
the
main
issue,
if
you,
if
we
don't
allow
boxes
of
primitives
to
be
unboxed
on
the
other
side,
you
have
to
look
find
all
the
boxes
in
the
sending
realm,
send
the
content
of
the
boxes
to
the
other
realm
and
then
send
the
record.
And
then,
when
you
get
the
record
on
the
other
side,
you
have
to
identify
all
those
places
where
you
have
those
boxes
and
replace
them
by
other
boxes.
With
the
content
that
you
received,
yeah.
A
Because
you
can't,
if
you,
if
you
receive
a
record
that
has
a
box
in
it
with
a
primitive,
you
can't
unbox
it,
which
is,
which
means
you
can't
use
it
if
you
can't
use
it
on
the
other
side,
it's
well,
it's
useless!
You
have
to
provide
a
record
to
the
program
that
the
program
can
actually
use,
for.
That
means
a
record
that
that
has
a
box
of
the
original
contents,
but
it's
a
different
box,
but
because
now
that
box
is
flagged
by
attacked
by
the
realm
okay.
C
A
G
And
so
so
much
just
just
so
I
maybe
maybe
I
can
help
to
clarify
here
so
more
so.
The
approach
that
you're
describing
is
the
same
that
you
describe
it,
the
in
the
in
the
in
the
gist,
which
is
a.
G
The
work
of
transferring
the
boxes
to
the
other
side
needs
to
happen
ahead
of
time,
so
it's
ahead
of
time,
transferring
of
values
that
then,
once
you
receive
the
record,
you
can
replace
the
the
one
that
we're
using
right
now
or
experimenting
with
is
a
lit
more
just
in
time.
The
decision
making
on
the
boxes.
Basically
one
side
of
the
membrane,
give
you
a
record.
G
The
other
side
received
the
record
and
says:
do
you
have
boxes?
Let
me
look
through
them.
When
I
find
one
of
those
boxes,
I
ask
the
other
side
hey.
I
got
this
record
that
I
cannot
open.
Can
you
help
me
to
provide
the
proxy
of
the
content
of
this
box,
because
I
cannot
open
it?
You
can
open
it.
You
can
open
it
and
send
me
back
the
the
thing
that
I
need
in
order
for
me
to
create
a
new
box
and
replace
it.
So
it's
a
kind
of
a
single
loop.
G
So
if
we,
if
we
get
to
have
some
something
like
a
replace
like
it,
imagine
that
you
have
a
method
that
you
given
a
record.
You
have
a
a
a
replace
or
map.
It's
basically
a
map,
so
you
do
a
map.
So
it's
a
single
it's
a
single
traversal,
because
you
just
go
one
by
one:
every
record
that
you
find
that
it
happens
to
be
a
box.
You
ask
the
other
side.
Give
me
the
thing.
G
I
create
a
new
box
on
my
side
with
the
proxy
of
the
thing
that
is
in
the
box
and
replace
the
existing
one,
and
the
result
of
that
is
a
new
record.
So
so
it
seems
a
little
bit
more
simple,
but
also
a
faster,
because
you
only
do
one
one
pass.
A
But
it's
it's
basically
the
same
problem
you
have,
I
mean,
that's
why
I
posited
you
need
a
helper
like
a
map,
but
regardless,
whether
you
do
it,
whether
you
push
the
content
of
the
box
ahead
of
time
or
you
query
it
when
you
get
it,
get
it
on
the
other
side,
no
matter
what
you
have
to
do,
that
deep
mapping
before
you
can
give
the
record
to
the
program
because
of
the
identity
that
that
record
at
that
point,
carries
you
it's
not
records.
A
Unlike
objects,
you
can't
you
can't
build
a
lazy
proxy
on
top
of
it,
you
have
to
deeply
fill
the
holes
and
even
if
the
program
is
not
going
to
actually
use
the
content
of
the
boxes,
even
if
they're
never
going
to
reach
for
those
boxes,
you
have
to
eagerly
do
that
and
if
you
can't
remember
that
results
the
fact
that
you
created
a
new
box
with
another
with
a
map
content.
A
If
you
can't
remember
that
you
have
to
do
it
every
time
and
every
time
you
have
to
go
through
the
callable
boundary
to
ask
for
hey
what
is
the
content
of
this
box?
So
it's
extremely
expensive
to
do
it.
If.
E
B
E
E
A
Is
actually
a
very
good
point
that
you
brought
up?
The
membrane
could
potentially
provide
its
own
box
unbox
that
you
have
to
use
to
reach
inside
the
box
so
that
you
can
just
pass
the
records
and
tuples
without
mapping
them,
and
you
only
map
at
the
unboxing
time
yeah,
because.
E
E
As
in
so
I'm
not
using
a
membrane,
I'm
just
using
realms
through
either,
you
know
iframes
or
node
vm,
like
I'm,
I'm
using
realms
that
aren't
anything
to
do
with
membranes.
I
need
to
learn
as
a
javascript
developer.
If
that
other
side
unboxes,
I
have
to
give
them
either
they
had
to
give
me
their
box
constructor,
so
I'm
constructing
boxes
they
can
use.
So
we
now
share
the
same
the
same
box,
constructor
and
box
unbox,
or
vice
versa.
I
have
to
get
yeah.
A
You
can
build
a
box
that
goes
to
the
membrane.
At
that
point,
the
problem
is
actually
figuring
out
which
realm
you
need
to
go
through.
So
if
you,
if
you
replace
box
and
box
or
provide
a
new
one,
the
membrane
does
that
with
an
implementation.
That
would
ask
the
original
realm
what
the
content
is
and
at
that
point
create
the
proxy
lazily
that
that
would
actually
would
work
nicely.
The
problem
is
that
works
great.
A
If
you
only
have
two
realms,
if
you
have
multiple
rounds,
you
the
same
with
an
object
with
something
that
you
can
put
in
weak
map.
You
can
remember
where
that
box
comes
from
with
something
that
you
can't
put
in
a
weak
map.
You
don't
know
which
realm
that
thing
came
from,
so
you
somehow
have
to
try
all
of
them
before
you
find
the
right.
E
But
this
is,
I
guess
the
point
I'm
trying
to
make
is
that's
what
everyone
else
is
gonna
have
to
do
anyway,
like
that
is,
if
I'm
not
using
a
membrane.
So
if
I'm
using
node
vm
to
create
my
realms,
I
have
to
even
make
sure
everyone
uses
the
same
box
and
keep
or
keep
a
list
of
boxes.
So
my
I
fake
the
box
constructor,
it
has
an
internal
list
of
boxes
that
it
tries.
E
A
C
I
want
to
introduce
an
important
distinction
in
the
conversation
there's
two
forms
of
transparency
that
mem
that
different
member
you
know,
there's
there's
the
normal
membrane,
the
historical
membrane.
Well,
the
transparency
that
membranes
were
designed
to
provide
is
exactly
what
ashley
was
talking
about,
which
is
that
realms,
separated
by
a
membrane
are
very
similar
to
re,
to
realms,
separate,
not
separated
by
a
membrane
that
the
the
membrane
is
a
very
you
know.
C
Membrane
between
realms
is
a
very
good
emulation
of
a
round
boundary
without
the
membrane
there
and
then
there's
the
new
invention,
which
is
you
know,
very
intriguing
that
that
I
think
this
group
has
spent
more
time
lately
on
which
is
coridi's
near
membrane,
which,
where
you
place
it
between
realms
and
it's
able
to
mask
the
round
boundary
and
make
it
appear
that
the
objects
from
the
other
realm
are
actually
objects
locally.
Here
within
this
realm,
which
is
where
the
term
near
comes
from.
C
E
G
Because
that
that
remember
that
the
identity
thing
the
identity
aspect
of
it,
which
is,
are
you
an
object
from
this
rom
or
from
the
other
realm
that
happens
when
you're,
interacting
with
the
proxy,
which
is
the
content
of
the
box,
but
not
how
you
access
the
content
of
the
box?
So
that's
why
I
I
feel
that
the
the
box
conversation
doesn't
have
much
of
is,
is
orthogonal
to
what
kind
of
membrane
you're
using.
C
I
don't
understand
if,
in
the,
if
we're
just
going
between
realms,
not
not
shadow
realm,
but
just
you
know
the
the
same
same
origin,
iframe
realms,
then
a
box
I
received
from
the
other
realm
is
just
opaque.
I
don't
see,
I
don't
see
a
proxy
for
the
oh.
C
G
C
Yeah
and
for
the
near
membrane,
the
the
there's
you
know
with
this
conversation,
we
should
now
distinguish
two
degrees
of
near
there's
with
making
it
appear
like
it's
within
the
same
realm,
but
but
different
compartments
versus
making.
A
Okay,
fair,
we
can
membrane,
can
provide
a
box
and
box
that
is
that
can
unbox
from
using
the
unbox
from
the
other
realm
or
compartment.
A
If
it
wants
to,
however,
it's
still
incredibly
efficient
to
implement,
because
for
primitives
you
have
to
go
in
and
ask
every
other
unbox
that
you
know
about
and
try
them
one
by
one.
Until
you
find
the
right
one.
G
G
C
G
I
feel
that
we're
talking
about
different
things.
Let
me
let
me
see
so
I'm
talking
about
the
the
the
implementation
of
the
membrane
and
whether
or
not
you
will
be
able
to
have
an
implementation
that
serves
well
both
purposes
with
some
configurations,
obviously
some
tweaking
but
the
same
implementation,
the
same
mechanics
that
I
need
to
get
this
object
from
this
side
to
the
other
side.
I
need
to
get
this
record
from
this
side
to
the
other
side.
G
If
it
happens
to
be
a
record
and
it
has
boxes
on
it,
I
need
to
do
some
work
before
I
hand
it
over
to
the
other
side
or,
and
part
of
that
work
is
to
replace
the
boxes
with
boxes
that
I
can
control
in
some
degree,
and
so,
when
you
try
to
interact
with
those
boxes,
they
will
do
one
thing
or
the
other
for
any
membrane.
When
you
interact
with
the
boxes,
they
should
be
able
to
allow
you
to
unbox
them,
because
you
don't
see
you
don't
know
that
there
is
another
realm.
C
G
C
You
know
it
might,
but
what
I
was
suggesting
is
that,
if
the
ambition
we
have
for
near
near
membrane
is
it's
only
trying
to
act
like
same
realm
different
compartment,
if
it's
not
trying
to
act
like
same
realm
same
compartment,
and
I
think
that's
a
reasonable
level
of
ambition.
In
that
case,
we
don't
need
to
replace
the
box.
There
are
plots
the
box
would
be
opaque
in
a
different
compartment.
G
Okay,
I
get
that
I
I
need
to
think
more
about
these,
because
we
don't
use
multiple
compartments
in
the
membrane
that
we
use.
G
Yeah
and
that's
what
we
have,
because
I
think
about
what
component
composition.
I
have
a
pattern
and
a
child
component
both
of
them
running
in
different
compartments
kind
of
thing,
like
basically
different,
sandboxes
and
and
the
pattern
is
giving
the
child
a
a
record.
That
has
a
box
and
the
child
will
receive
that
record
and
will
be
able
to
access
the
content
of
the
box,
because
it's
handed
over
to
the
child
to
use.
C
C
Now
you
send
through
a
box
that
has
been
boxed
with
the
box
constructor
of
one
of
the
three
compartments
on
one
side
of
the
membrane,
on
the
other
side
of
the
membrane
which
of
the
three
compartments
should
be
able
to
unbox,
it.
C
That,
within
a
realm,
you
already
have
multiple
compartments
and
you
can
have
multiple
compartments
on
each
side
of
the
near
membrane
and
there's
no
necessary
correspondence
between
them.
So
if
on,
let's
say
the
blue
side
of
the
membrane,
everything
from
the
red
side
of
the
membrane,
you
know
acts
like
it
is
from
as
many
different
compartments
on
the
red
side
as
there
actually
were
different
compartments
on
the
red
side.
C
That's
the
proper
emulation
of
the
absence
of
the
membrane
is
that
if
you
had
three
three
three
compartments
on
one
side
and
three
compartments
on
the
other
side,
then
the
in
the
absence
of
the
membrane,
you
still
have
six
compartments.
C
C
C
G
C
A
I
I
think
my
concern
is
that
this
is
this
is
the
use
case
of
a
one-to-one
mapping
between
two
realms,
where
I'm
a
little
bit
more
concerned?
Is
that
if
you
have
more
like
a,
if
you
have
more
like
a
star
topology
for
your
realms,
which.
G
Is
what
we
have
we
have?
We
have
multiple
sandboxes
that
reflects
the
blue
side.
So
basically
you
have
one
blue,
multiple
reds
and
they
in
the
inter
interact
with
blue
through
the
membrane,
and
if
you
want
two
of
these
reds
to
interact
between
them,
that
happens
through
the
blue,
so
you
interact
with
blue
and
then
back
to
red,
so
the
marshall
is
in
place
there.
So
in
that,
in
that
particular
case
for
blue,
it
only
sees
one
box
constructor
one
way
of
unboxing
things.
C
C
G
So
what
I
think
well,
we
have
to
dig
in
into
this
because
this
so
what
what
we
have.
C
G
Yeah
and
then
on
the
other
side,
you
create
the
actual
box
with
the
proxy
of
the
thing
on
the
on
the
red
side,
and
then
you
return
back
a
record
that
has
a
replacement
for
that
box
to
a
thing
on
the
other
side.
So
I'm
so
fussy
about
what
the
problem
is
but
or
what
the
incoherence
that
you
mentioned
is.
But
I
had
to
put
some
some
time
on
thinking
about
this.
A
Yeah,
I
I
think
we're
not
gonna
solve
that
now
and
we
are
quite
a
bit
over
time.
So
I
think
our
next
step
is
just
to
think
hard
about
how
multiple
realms
and
boxes
interact
and
whether
the
cement
takes
there.
A
And
multiple
compartments
in
the
meantime,
I
think
the
resolution
here
was
we.
The
realm
should
be
checked
regardless
of
the
contents,
whether
it
is
a
an
object
or
a
primitive
to
keep
these
semantics
of
a
box.
That
is
completely
opaque
and
you
need
permission
to
unbox.
A
So
my
apologies
for
pushing
in
in
the
wrong
direction
earlier
this
week,
and
I
think
that
is
it.
I
will
now
stop
the
recording.