►
From YouTube: Node.js N-API Team meeting - July 8 2019
Description
A
A
B
C
B
Got
to
figure
out
how
that
was
working
before
and
what
I
mean
it's
trivial.
It's
like
compared
to
everything
else,
it's
trivial,
so
I
want
to
get
that.
I
want
to
get
that
pushed
so
that
that's
out
in
public,
so
people
can
see
that
the
CI
will
run
the
CI
on
it
and
see
how
that
works
under
whether
it
works
under
all
of
the
CI
conditions.
B
A
B
Then
the
other
thing,
the
other
outstanding
things
I
have
are
the
note
comfy
you
I've
not
heard
back
from
them.
Their
deadline
for
notifications
is
July,
31st,
ok
and
then
I've
also
not
heard
from
the
node
J
sumit
or
that
nodejs
interactive
I've
not
heard
back
from
them.
I,
don't
know
if
any
of
you
guys
have
heard
back
from
them.
I
haven't.
A
B
E
E
A
E
E
F
D
C
E
D
G
C
D
F
H
A
D
There
have
been
a
few
other
suggestions
in
terms
of
an
API
there's,
the
the
module
thing
that
they're
lingering
around
I'm
happy
to
see
that
we've
had
some
push
back
from
Anna
as
well
and
from
Gus
you
guys
so
yeah
I'm
not
inclined
to
just
to
just
drop
that
and
then
there's
there's
a
proposal
from
Anna
to
to
to
add
something
called
like,
like
like
module
data,
basically
yeah.
So
basically,
currently
a
you
know,
avoiding
global
static
variables
is
possible,
but
but,
as
she
said,
it's
not
organ
Amish
because
you'd
have
to.
D
D
So
so
what
she's
proposing
is
that
we
we
have.
We
have
that
leased
or
module
data
directly
in
like
a
local
environment
that
that
is
unique
to
each
module
and
we
we
had
a
local
environment
before
like
when
we
started
an
API.
We
had
each
module
has
its
own
environment,
yes,
which
to
having
a
shared
environment,
because
we
had
object,
template
stored
in
the
environment,
and
so
the
object
templates
had
to
be
one
for
each
for
each
sort
of
JavaScript
world.
D
Otherwise,
you
know,
map
beans
themselves
would
fail
and
stuff
like
that
when
they
should
move.
But
now
we
don't
have
any
more
object
templates
there.
So
we
only
have
just
well.
We
have
one
persistent
reference
to
the
last
exception
on
the
environment,
but
that's
that's
it
that
that
doesn't
need
to
be
shared,
but
it
went
there
because
we
there
will
only
ever
be
one
single
JavaScript
environment
is
not
multi-threaded,
so
there
won't
be
multiples
of
those
right.
D
It's
good
to
share
that,
but
we
could
use
local
data
as
well
specifically
for
this
purpose,
and
so
the
proposal
is
to
is
to
split
the
environment
into
two
pieces.
So
so,
when
we
create
callback
data
for
for
wrapping
an
API
call
backs,
we
would
store
a
pointer
in
the
callback
data
that
would
be
unique
to
each
module
and
that
pointer
would
contain
a
pointer
to
the
shared
portion
of
the
environment.
And
so
so
so
so,
then,
basically,
you
could
add,
like
per
module
instance
data,
and
so
it
would
make
it
a
lot
easier.
D
You
instead
of
saying
that
to
get
CB
info
or
in
every
binding,
perhaps
unnecessarily,
because
if
the
binding
doesn't
take
any
parameters,
if
it's
just
a
0
parameter
function,
then
you
don't
want
to
call
nap
to
get
the
info
on
that.
You
could
call
like
nappy,
gets
instance
data
and
then
you
you
would
have.
Basically,
though
your
your
global
static
as
it
were,
so
it
really
would
actually
it
would
actually
be
kind
of
like
UVU
we
get
key.
D
C
D
A
D
Well
because
well,
yeah
II
did
it
just
yeah
I'm,
not
100%,
clear
on
that
I
have
to
see
how
the
implementation
goes,
but
basically,
basically
there
will
be
two
things:
there
will
be
a
map
en
than
that
below
:
right,
mappy,
local
and
will
be
instantiated
every
time
module
is
instantiated
right
and
and
then
the
nappy
local
M
will
end
up
being
stored
in
like
a
callback
bundle.
So.
D
D
D
D
Exactly
yeah
yeah,
it
would
be,
it
would
be
just
just
just
just
room
for
a
single
point
or
a
void
star
on
the
start
line,
and
that's
it
exactly
so
so
then
so
then.
Basically
the
only
difference
would
be
that
you
know
when,
when
when
v8
calls
the
the
central
callback
for
an
API,
we
retrieve
the
callback
bundle
and
it
contains
a
local
end
from
the
local
end.
D
A
D
A
note
they
can
no,
no
because
when
it
comes
back
into
our
API
like
when,
when
the
module
makes
an
API
call,
it
expects
an
a
PN,
not
something
else
right
and
then
a
PM
is
currently
shared
right,
but
it
doesn't
have
to
be.
Is
that?
But
if
we
don't,
if
we
don't,
then
then
now
we're
copying
all
the
callback
order,
all
all
the
scope
counters
we're
copying
the
persistent
we're
copying
all
that
stuff.
So
so,
basically,
what
we
can
do,
though,
is
is
inside
the
local.
D
We
can
point
to
the
share,
then
right,
and
so
we
dereference
that
we
pass
in
the
shared
end
right
and
then
only
those
api's
well,
okay,
actually
one
more
thing
needs
to
happen.
We
need
to.
We
need
to
be
four:
we
calling
to
the
module.
We
need
to
a
store.
The
local
lamp
on
the
share
then
write
temporarily,
but
why.
D
Get
it
from
the
local
one
because
most
calls
most
calls
need
to
share
them,
and
the
local
lamp
doesn't
have
any
information
on
it,
except
it
will
have
a
pointer
to
this
local
data,
which
is
not
useful
to
any
of
the
api's
except
those
dealing
with
the
local
data,
and
then
it
has
a
pointer
to
the
share
them.
That's
all
it
has
all
right
so
so
so
all
the
other
api's
cannot
use
that
right.
Yeah
they'd
have
to
do
another
interaction.
Exactly
exactly
you
think
performance
wise.
D
It
would
be
best
to
Japan
so
share
them
around
and
and
and
and
create
a
new
field
on
the
shared
end,
which
holds
the
local
ends,
and
that
field
would
only
be
of
interest
to
these
new
api's
right.
How
does
that
work?
If
there's
multiple
threads
running
workers
yeah?
If
there
are
multiple
workers,
then
there
are
multiple
global
objects.
In
fact,
you
don't
even
need
to
go
as
far
as
multiple
workers.
D
If
you
just
use
VM
context,
if
I
you
get
multiple
global
objects:
okay,
Oh
each
each
module,
there's
still
a
separate
em,
exactly
yes,
yes,
so
so
the
local
ends
would
be.
Would
be
per
module
instance,
which
which
not?
Which
means
perhaps
more
than
one
per
worker,
but
definitely
distinct
in
terms
of
the
local
context
and
distinguishable,
because
node
environment
makes
things
distinguishable
right.
Cuz.
A
D
Yeah
exactly
that's
right,
yeah
yeah!
So
so,
and
it
also
minimizes
the
diff,
because
nappy
hands
is
the
thing
that
holds
all
the
counters,
the
last
exception
and
and
so
forth
right.
So
so
you
know,
and-
and
there
is-
that
is
shared
right
now-
that's
how
we
made
it.
It
is
shared
so,
but
it
wasn't
at
one
point
right:
no,
no,
it
wasn't
but
but
but
that
that's
because
we
were
willing
to
to
to
sacrifice
or
we
were
willing
to
allow
duplication
of
all
these
counters
and
variables
and
suffering.
D
We
even
allowed
application
of
object
templates,
which
was
wrong,
but
now
that
we
don't
have
object
templates.
Yes,
there
isn't
that
the
motivation
to
have
it
shared,
isn't
as
great
as
it
once
was
right,
but
but
it's
still
good
to
have
it
shared,
because
eventually
we
may
need
a
shared
portion
for
other
reasons,
that
we
cannot
anticipate
and
we
will
certainly
need
a
local
portion
right.
But
it's
it's.
A
D
D
It's
either
gonna
be
a
pair
of
nappy
and
nappy
local
end
or
a
pair
of
nappy
and
vanetti
shared
end
and
we're
all
these
quarters
reside.
Yeah
will
be
determined
by
by
the
the
least
impact
on
the
core
yeah
okay
yeah.
So
this
is
this
is
one
proposal,
another
thing
also
coming
from
Ana,
and
actually
we
have
this
this.
D
This
whole
problem
with
with
with
environment,
cleanup
right,
which
is
sort
of
ongoing,
where
the
the
the
week,
the
week
callbacks,
aren't
getting
called
when
the
environment
is
getting
shut
down,
and
so
so
we
were
gonna
attach
those
we
were
going
to
attach
for
each
week
call
back
an
environment
cleanup
handler
there.
Oh,
so
there
are
two
things
going
on
with
that.
The
performance
is
definitely
one
thing
and
I'm
still
looking
for
a
package
where,
where
we
can,
where
we
can
test
this
and
Nicola
Nicolas,
you
suggested,
which
one
was
that.
Can
you
remind.
B
D
So
I
did
that
I
did
that
and
it
turns
out
that
neither
level
down
nor
rocks
TB
use
any
weak
references
at
all
at
run
time.
They
only
use
bindings
which,
which
now
at
which,
with
this
modification,
have
weak
reference
is
but,
and
they
are
being
tracked,
but
they
are
there.
They
and
and
III
commented
I
answered
your
comment.
There,
Michael
yeah,
they
don't
like
the
way.
We
retrieve
the
data
for
for
a
call
into
any
into
the
add-on
that
hasn't
changed.
With
this
change.
It's
only
yeah.
A
Part
of
was
mostly
worried
about
was
the
internal
mechanics
where
we
use
them,
because
more
people
would
get
those
than
people
who
use
wheat
graphs
right.
What
having
more
people
would
get
those
well
any
anybody
who's.
Anybody
who
is
basically
using
creating
functions,
which,
I
think
is
everybody
yeah
having
some
of
those
references
behind
the
scenes
right,
yeah
now,
I
guess
since
we've
since
we've
changed
it,
so
that
it's
only
on
worker
threads.
D
A
A
A
Too,
because
of
that,
it's
you
know
to
find
something
that
would
actually
be
affected.
We
other
than
the
you
know
the
checking,
if
we're
the
main
threat
or
not,
if
that's
somehow,
really
expensive
other
than
that
check,
you'd
actually
need
something
which
does
a
lot
of
that,
like
as
a
function
Factory
and
doesn't.
D
D
Yeah
yeah,
yeah
and-
and
it's
not
just
it's
not
just
for
bindings
right
I
mean
if
I
can
find
a
module
somewhere
that
is
very,
very
popular
and
that
uses
weak
references.
Then
then
we
have
a
then
we
have
a
case
study
yeah,
but
the
funny
thing
is
I
haven't
found
any,
but
I
did
find
a
couple
and
I
posted
them
on
the
on
the
avoid
future
breakage
issue
that
that
are
super
popular
on
the
order
of
thousands
of
downloads
a
week
and
and
which
were
not
listed
there.
D
A
Came
to
mind
is
remember:
you
pointed
out
there
was
the
one
person
who
repeated
reported
an
issue.
Memory
leak
do
to
find
doodles
I
mean
basically
due
to
the
the
different
finalization
I
wonder
if
that's
one
to
reach
out
to
him
and
drop
yes.
Yes,
yes,
excellent!
That's
that
that's
a
good
idea!
Yeah
I'll
have
to
find
that
issue
with
with
them.
A
Issue
were
like
I.
Basically,
when
I
looked
at
it
again
said:
okay,
wait
a
sec,
we're
actually
doing
this
more
often
than
we
need
to,
and
we
basically
just
do
a
direct
delete
instead
of
a
deferred
delete
in
those
cases.
Yep
I
think
that
would
be
a
good
one
to
try
it,
because
obviously
he
had
a
lot
of
references
coming
and
going.
Yes.
D
Yes,
that's
a
good
point
yeah.
If
I
can,
if
I
can
find
a
module
in
that
issue,
then
I'll
definitely
well
a
module
and
a
benchmarking
suite
for
the
module
yeah
yeah.
Then
I'll
have
a
look
at
that.
That's
that's
a
good
pointer
yeah.
So
the
other
thing
with
with
this
issue
is
that,
and
this
this
is
potentially
a
no
op
for
us.
D
You
know
so
by
defining
these
agents
and
and
and
Anna's
arguing
that,
because
of
that,
the
the
the
environment
clean
up
hook
should
be
part
of
of
j/s
native
API,
rather
than
node
API
right
those
there,
because
any
and
all
implementers
of
any
API
should
address
this.
Given
that
now
agents
are
part
of
the
spec,
so
what
the
agents,
let
you
do
well
as
far
as
I
can
tell
agent,
is
defined
as
as,
basically
everything
that
is
necessary
to
to
run
JavaScript
it
may
have,
it
may
have
more
than
one
global
and
so
forth.
D
I
H
A
D
D
A
D
D
C
I
D
So
so
so
then,
so
then
notifying
the
native
side
of
all
these
cleanups
is
super
important
yeah.
Otherwise,
otherwise,
if
you
have
I
mean,
if
you
have
a
threat,
prove
it
threads
that
not
acquit,
then
you
don't
have
a
problem
but
not
like
a
threat
factory.
Then
you're
gonna
have
a
memory
leak
right.
So
is
there
a
case.
A
D
Potentially,
but
but
in
a
browser,
all
the
code
is
under
one
roof
and
it's
controlled
centrally.
So
sorry,
so
you
know
that
they
could
have
our
registry
of
native
things
that
they
need
to
clean
up.
They
could
already
be
doing
this.
Essentially
you
know
so,
but
but
with
node
right,
we
need
to.
We
need
to
come
up
with
sort
of
an
open
standard
for
this,
rather
than
just
rather
than
just
having
an
internal
specification.
D
A
D
A
I'm,
just
lookin
cuz
I
thought
there
would
there
I.
Think
of
this
was
the
repo
where
little
Dan
opened
a
issue
saying
afterlife.
There
was
discussion
at
the
collaborator
summit
when
I
asked
that
he
opened
initiator
to
discuss
it,
but
basically
the
the
conclusion
was:
wouldn't
do
it
until
there
was
some
actually
motivating
factor.
D
A
I
asked
cuz
I'm,
pretty
sure
there
was
an
option
to
do
that
in
Java
mm-hmm,
but
I'm
just
wondering
if
somehow
this
like
in
Java,
there
ends
up
only
being
one
heap.
So
there's
really
only
one
place.
You
know
you
you'll
get.
Your
final
is
a
ssin
of
all
objects
as
long
as
you're
still
running,
but
it
but
it
in
our
case.
It's
like.
A
We
have
multiple
JavaScript,
exactly
that's
right,
armen's
in
the
same
process
and
therefore
one
of
those
can
exit
and
it's
using
its
own
heap,
and
you
don't
get
your
final
answers
run
there.
That's
a
different
thing
right.
Exactly
yes,
yes,
I
mean
little
C's
as
soon
as
you
can
handle
that
you
could
handle
the
X
that
exit
now
an
exit
case
too
right.
Well,.
A
D
Exactly
but
but
that's
that's,
that's
the
environment
clean
up
hook,
right
now,
right
so
so,
I
mean
given,
given
that
there
seems
to
be
an
explicit
choice
on
the
on
the
part
of
the
of
the
spec
to
not
run
these
finalizer
than
if
we
run
these
finalized
errs,
because
we
have
to
because
we
have
this
multiple
heap
situation
going
on
right,
then
this
is
not
part
of
the
spec
right,
and
so,
where
we
put,
these
cleanup
handlers
is
just
right,
which
is
no.
They
P
I,
rather
than
J
S
native
API
right.
A
D
C
D
A
D
Right
right,
yeah,
but
all
you
can
do
inside
worker
threads
is
raw
JavaScript
or
wasn't
right.
So
so
then
you
know
that
the
entire
JavaScript
engine
is
one
heap.
If
they
have
some
native
bindings,
then
it's
the
JavaScript
or
if
the
browser's
responsibility
to
clean
those
up
right.
But
but
again
the
browser
is
is,
is
is
maintained
by
a
single
team
of
people
who
can
all
agree
on
a
strategy
right.
D
Is
kind
of
what
we're
doing
in
this
case
right,
yeah
except
except
we
don't
control
the
code
and
we
don't
know
what's
gonna
happen
in
the
finalized
errs.
All
we
know
is
that
we
need
to
provide
the
means
to
to
to
clean
this
stuff
up,
because
we're
gonna
have
a
leak,
yeah
right.
So
so
so
you
know
our
our
and
API
is
in.
It
is
kind
of
a
de-facto
standard,
and
so
we
need
to.
We
need
to
think
in
terms
of
standards
rather
than
in
terms
of
actual
performing
the
work.
A
D
A
A
D
I'm
kind
of
pushing
for
that
honestly,
because
I
I
just
wanted
to
see
I
just
wanted
to
see
what
other
people
think,
but
but
I
think
the
consensus
is
that
it
is
not
really
a
normal
thing
to
do
to
expose
a
native
add-on
directly.
It
is
supposed
to
be
fronted
by
a
JavaScript
module.
You
know
so
you
know,
and
and
as
far
as
I
can
tell
you
know,
99.99999%
of
the
time
it
is
fronted
by
by
via
JavaScript
modules.
So
if
it's
not
then
well,
you
know,
please
inform
your
users
that
henceforth
it
will
be.
A
D
A
D
Even
even
in
the
even
in
the
the
most
compelling
case
for
for
doing
this,
which
which
was
that
that
one
issue
we
had
where
yeah
module
needed
to
retrieve
the
configuration
file
from
the
same
directory
as
the
module
and
and
that
there
was
no
fronting
JavaScript
yeah
module,
even
in
that
case
there
was
a
solution.
Okay,
it
was
costly,
but
it
was
there.
So
so
it
is
possible
to
retrieve
the
pass
if
you
really
really
really
really
really
really
really
want
to
yeah.
D
So
you
know
and
and
we're
talking
about
we're
talking
about
an
ongoing
project
in
the
case
of
the
native
add-on,
and
so
so
you
know
requesting
buying
from
from
the
consumers
of
the
project
to
change
the
way
they
load
the
module.
Yes,
it's
it's
it's
suboptimal,
but
once
done
it,
you
know
it
frees
you
up
for
the
rest
of
time,
essentially,
as
we
can
tell
so,
yeah
basically
I
think
I'm,
just
gonna
comment
to
that
effect
and
close
the
issue.
D
A
A
D
F
D
H
D
Which
was
good
data
yeah
yeah
I
was
happy
to
see
that
I
mean
Louie
Gingka
has
has
has
has
two
of
them
that
are
super
popular
and
and
they're
they're,
both
using
an
API
now
excellent
and
those
ones
use
an
API
directly
or
use.
No
doubt
on
idea.
I,
don't
remember.
One
of
I
saw
one
that
was
like
super
short
like
the
whole
binding
was
only
like
15
lines
or
so
okay,
that
one
was
using
no,
that
on
API
but
I
think
the
other
ones
are
using
an
API
directly.
Okay,.
A
D
I'm
aware
of
I
haven't
checked
recently,
but
I
think
there's
a
few
PRS
and
know
that
on
API
that
are
ready
to
land
all
yeah
yeah
I
was
trying
to
land
some
of
them,
but
I
was
having
trouble
with
the
with
the
CI.
So
I
need
to
ask
like
we
have
this
no
tests,
no
dad
on
API
new
and
or
can
I
go
back
to
using
the
old
one.
The
old
one
No.
D
Yeah,
so
one
thing
I
noticed
was
that
if,
when
I
was
submitting
jobs
in
in
in
quick
succession
for
four
different
for
different
PRS,
it
seemed
to
be
building
the
code
for,
for
an
old
like,
like
I,
did
I
submitted
the
code
for
for
the
thread-safe
function
and
then,
when
I
submitted
the
code
for
something
else,
it
was
still
failing
with
with
messages
from
the
thread-safe
function.
I
mean
maybe
I
read
it
wrong,
but
that's
what
it
looked
like
it.
Okay,
so
one
thing
that.
D
A
A
A
I
do
have
problems
yeah,
like
the
old
one
actually
probably
will
now
fail,
because
we've
added
in
CentOS-
and
there
was
a
smart
off
thing,
but
the
new
one
is
that
I
should
probably
delete
the
old
one.
Okay,
the
and
is
it
still
in
the
list
of
let's
see
here,
did
I
take
it
out
of
here,
I
think
I
took
it
at
least
took
it
out
of
the
list,
yeah
yeah.
What
was
I
think.