►
From YouTube: Node.js N-API Team meeting - Aug 23 2018
Description
A
A
No
okay,
so,
let's
start
with
the
first
issue,
is
the
sequel,
light
and
API
port
issue
number
288
I
did
do
some
work
with
that
on
Anisha
this
week,
she'd
figured
out.
One
of
the
remaining
issues
were
trying
to
figure
out
was
why
the
test
suite
would
hang
in
particular
cases
if
there
was
an
error
and
it
turns
out
it
has,
it
has
to
do
had
to
do
with
some
of
the
ways
that
when
an
exception
was
thrown,
we
were
returning
like
so
I
guess.
A
One
of
the
methods
basically
was
defined
as
returning
in
an
API
value,
and
so
returning
the
the
code
that
was
there
was
trying
to
return
the
global
null
returning.
Just
a
generic
false
value
seemed
to
work.
Okay,
I
was
thinking
of
even
better.
If
we
actually
could
just
return
null
cause
like
we
were
not
returning
a
value.
There
is
no
return
value,
but
we're
still
trying
to
figure
out
if
that's
gonna
work
or
not.
A
D
B
But
but
when
you're,
when
you're,
defining
a
class
or
when
you
have
like
property
descriptors
and
the
way
the
code
is
organized,
is
that
you
just
declare
the
property
descriptors
and
it
creates
the
data
at
the
point
of
declaration,
and
then
it
returned
the
property
descriptor.
And
so
so,
when
you
go
to
actually
create
the
function,
which
means
you
take
the
list
of
property
descriptors
and
you
create
the
function.
B
You
don't
know
if
that
list
of
property
descriptors
is
is
coming
from
from
user
code
or
if
it's
coming
from
another
part
of
know
that
on
API
itself.
So
so
then,
so
then
there
are
some
cases
when
you
should
be
attaching
a
finalizar
and
then
there
are
other
cases
when
you
should
not
be
attaching
a
finalizer
and
and
right
now
you
can't
distinguish
between
the
two,
and
so
I
haven't
had
a
chance
to
try
to
try
to
fix
that.
A
B
A
B
B
It's
not
so
simple,
because
because
it
takes
a
list
of
property,
descriptor
objects
which
are
basically
rappers
around
the
the
nappy
property,
descriptor
structure
and
and
it
and
when,
when
one
of
those
objects
is
a
function,
then
it
it
adds
the
data
into
the
structure,
but
that
data
has
to
be
has
to
be
freed.
So
so
we
need
to
set
a
flag
somewhere
saying
this
structure
is
different
from
the
other
structure,
because
this
structure
was
created
by
know
that
on
API
rather.
A
B
That's
that's
what
we
would
have
to
do.
Yeah
it's
like
yeah.
Basically,
we
need
to
be
able
to
distinguish
between
property
descriptor
objects
which
we
instantiate
ourselves
and
versus
those
which
the
user
instantiate
it,
since
it's
all
inline
what
this
amounts
to
is
basically
setting
a
flag
in
the
user's
method
which
says
you
know
when
you
call
nappy
defined
properties
with
this
list,
then
you
know
attach
attach
destructors
versus
don't
right,
because
it
ends
up
being
like
a
boolean
variable
in
the
in
the
in
the
function.
A
Is
it
is
it
that
I
mean
so?
I'd
have
to
go
back
and
look
at
our
descript
property
descriptor,
but
like
is
it
so
you
create,
but
I
guess
the
and
a
number
part
of
the
advantages
you
can
create
those
through
like
initializer
lists
right.
Yes,
exactly
yeah,
so
you'd
want
a
case
where
you
can
provide
an
initializer
list
with
an
extra
value
which
is
like
two
or
false
yeah
yeah.
B
B
C
B
B
No,
but
does
not
need
to
be
exactly
cases
where
it's
non
null,
but
user-provided
versus
cases
where
it's
non
null
and
generated
by
no
that
on
API,
right
and
and
we
need
to
somehow
distinguish
yep.
Okay,
it
should
be
solvable
just
tough
to
come
up.
Yeah
yeah,
yeah
yeah.
We
need
to
use
some
some
some
C++
template,
magic
and
I.
Think
I.
Think
right.
A
B
F
A
C
B
A
Be
getting
it
to
land
insects,
but
yeah
yeah
I
think
we'll
need
to
argue
that
it
was
that,
like
it's,
not
really
cember
minor,
it's
kind
of
a
it's
a
bug
that
we
didn't
that
it's
not
there
yeah
true
yeah
the
ways
it's
like
the
two
ways
this
could
have
happened
is
well
the
one
we
did
it
where
we
accidentally
added
it
afterwards
and
didn't
do
it.
So
it
really
is
a
new
thing,
but
the
other
way
to
look
at
it
is.
D
A
A
A
E
H
B
So,
okay
yeah
sure,
then
I'll
have
another
look.
Okay,
I
thought
that
was
the
look
that
I
already
had,
but
then
I'll
have
another
one.
Well,
you
made
a
bunch
of
comments
and
then
I
think
Nick
fix
those
up
right
right
right
right
right
here
it
is
okay,
yeah
no
worries.
Okay,
I'll
get
on
that
as
soon
as
we're
done
with
the
meeting.
A
A
A
So
I,
maybe
just
include
that
so
I
think
I
I
wasn't
a
meeting
where
they
basically
said
the
tool
is
still
open
for
submissions
all
right
and
I.
Don't
think
that
there's
so
many
that
they
aren't
still
looking
for
new
one,
so
I
think
if
we
can
go
and
submit
that
you
know
in
the
next
day
or
so
that
would
get
us
a
good
chance
of
being
in
okay.
A
Okay,
I
will
do
that
yeah
and
if
you
just
want
to
make
a
suggestion
that
hey
if
this
could
happen
after
this
other
particular
talk,
that
would
be
be
good
and
I.
Think
it's.
You
know
we
can
all
of
us
who
are
there.
You
know
we
can
show
up
and
have
like
a
I,
don't
know
if
we
want
to
have
a
bit
of
a
presentation
but
or
like
just
a
Q&A
and
stuff,
but
that
you
know
we
should
all.
Oh
all
of
us
were
there
and
we're
willing.
We
should
just
show
up
and
participate.
C
C
A
B
B
A
C
A
It's
really
yeah,
okay,
it's
a
I
think
we
should
just
then,
if
it's
that
simple
it's
basically,
we
should
just
open
an
issue.
I
think
in
the
admin
area.
B
Does
that
make
sense?
True,
yeah
I
mean
yeah
I
mean
if
we
make
it
part
of
the
documentation
that
people
can
add
a
badge
like
this,
then
yeah.
Then
there
were
sort
of
endorsing
the
presence
of
such
badges
yeah,
but
we,
while
we
may
endorse
the
presence,
we
are
likely
not
able
to
influence
their
content.
People
can.
A
No,
no,
it's
we're
not
we're,
not
saying
anything
about
it
being
certified,
and
we
should
you
know
in
our
Doc's
we'll
make
that
clear.
You
know
this
isn't,
but
this
is
something
that
you
can
do
to
identify
that
you
know
you've
used
any
API,
you've
implemented
it
and
I
think
we
can
come
up
with
some
good
wording,
but
I
think.
But
my
comment
about
like
opening
an
administer
prize
to
the
project
right,
yeah,
yeah
and
people
may
have
some
other
suggestions
or
whatever
but
I
I.
A
A
So
I
don't
think
we
really
need
to
do
too
much
other
than
to
raise
the
awareness
that
you
know
by
having
the
issue,
in
the
admit,
if
we
don't
get
any
sort
of
concerns
or
negatives
after
a
week,
just
update
our
you
know,
do
it
in
update
our
documentation.
It
might
be.
You
know
if
you
have
ideas
of
how
we
would
update
our
documentation
to
reference
it.
That
would
probably
be
good
too,
including
the
issue.
A
I
think
that's
good,
and
then
you
know
basically
it'll
be
a
yeah
I.
Think
we'll
do
that.
I,
don't
expect
any
opposition,
and
then
we
can
just
update
our
readme.
To
do
that
sounds
good.
Okay,
yep
got
that
so
I
guess
the
other
thing
too
might
be,
since
if
you
can
open
an
issue
under
the
a
bi-stable
node
repo
as
well
that
we
can
put
into
milestone
12
cuz,
sorry
milestone,
11
I'm
gonna
create
the
milestone.
A
G
A
C
D
A
D
C
A
F
B
Doesn't
really
make
a
difference
in
terms
of
performance,
so
so
so
that
doesn't
hurt
the
performance
pretty
good
back
in.
We
want
this
API
or
not.
That's
a
different
story.
Right
right,
I
mean
it
will
help.
It
already
will
only
help
the
n64
case,
because
the
other
ones
aren't
pretty
they're
pretty
slim
the
way
they
are.
We
can't
swim
them
down
any
further
right.
It
doesn't
make
sense
for
any
other
data
types.
Okay
does.
A
B
A
B
This
is
what
library
that
this
person
was
working
on.
He
said
so
at
the
top
I
think,
maybe
right
but
yeah.
So
so
he
did
make
a
difference.
Cuz,
like
with,
with
with
him
moving
to
array
buffer
and
with
us,
giving
giving
this
this
faster
API
it's
pretty
much
up
to
its
pretty
much
up
to
what
what
he
had
at
that
point
using
v8
so
right,
because
no
no
buffer
adds
adds
some
some
overhead
and
and
then
in
64,
was
more
optimal
than
it
is
with
an
API
because,
obviously
straight
to.
B
A
A
B
E
B
C
A
B
A
B
Wouldn't
duplicate
a
lot
of
code?
No,
definitely
not!
No
yeah
and
I
mean
I'm
kind
of
I'm
kind
of
starting
this.
This
pattern
inside
an
API
where,
where
I
do
this,
this
templating
plus
inlining,
whenever
we
would
code
and
then
yes,
the
code
gets
duplicated,
but
only
by
the
compiler,
and
only
when
it's
on
its
way
to
becoming
you
know,
machine
go
right.
B
You
don't
we
don't
really
have
we
don't
really
have
a
concern
about
about
size
right
I
mean
you
know.
Are
we
going
into
any
sort
of
constrained
environment
where
you're
optimizing
for
size
and
I?
Guess?
If
you
are,
then
you
can
in
the
compiler
can
accommodate
that
than
just
not
inline
things
right.
So
I
think.
E
A
B
A
E
A
A
B
B
B
Yeah
actually
I
I
have
I
have
like.
You
know
that
that
thread-safe
function
cleaner.
D
B
B
A
B
B
E
B
Can
be
done
without
it,
but
not
without
using
libuv
directly
so
so
that
could
be
a
point
of
discussion
as
to
whether
we
want
to
modify
threats,
a
function
it
being
experimental.
We
can
again
plea
to
to
sort
of
to
sort
of
add
this
concept
of
an
in-flight
call.
You
know
that
the
state
for
which
is
stored.
G
E
E
B
For
the
call
into
JavaScript
and
and
the
call
gets
removed
from
the
queue
when
the
loop
thread
wakes
up,
but
then,
if
we're
going
to
have,
if
we're
going
to
have
a
pass
back,
then
what
do
we
do?
Do
we
create
another
queue
or
you
would
just
use
like
synchronization
primitives
on
the
object
itself,
and
if
we
do,
then
we
can
potentially
have
more
objects
in
flight
than
there
are
places
in
the
queue
right.
B
So,
basically,
you
you
can
call
into
JavaScript
from
another
thread
but
important.
It
has
to
be
asynchronous
and-
and
we've
got
that
right.
But
now,
if
you
want
to
see
the
value
back
to
the
original
thread,
you
know
which,
which
represents
the
return
value
of
the
function,
but
in
reality
it
could
be
like
five
loops
of
the
event
loop,
because
it's
asynchronous
then
like
for
his
his
example
was
was
it
was
a
promise.
You
know
when
the
promise
gets
resolved,
passed
the
resolution
back
to
the
original
thread
right
no.
A
And
when
that
queue
gets
invoked,
so
when
the
time
when
that,
when
the
time
for
that
queue
gets
invoked,
there
is
a
will
automatically
run
a
JavaScript
function
right,
yeah
yeah.
Now,
if
we,
if
we
allowed,
if
there
was
a
call
out
that,
let
you
define
a
c
function
that
would
get
run
before
that
and
generate
the
value
to
be
passed
back
well.
E
A
A
B
Missing
what
you
can't
do,
then?
Well,
you
can
do
everything
you
want.
I
mean
you
know.
The
only
thing
that
happens
when
when
when
they
work
all
in
JavaScript
gets
invoked,
is
that
this
particular
data
item
is
removed
from
the
queue
right
and
so
so
nappy
thread-safe
function
is
no
longer
aware
of
it,
but
that
doesn't
mean
that
that
item
has
to
be
destroyed
right
right.
B
If
the
semantics
of
the
application
are
such
that
it
is
the
thread
that
creates
the
data
item,
and
it
is
the
thread
that
destroys
a
data
item,
then
the
data
item
must
must
contain
thread.
Synchronization
primitives,
for
for
for
safely,
asking
okay
can
I
delete
this
and
and
chances
are
that
after
the
JavaScript
call
completes
and
a
value
gets
assigned.
B
That
represents
the
return
value
from
JavaScript,
but
then
the
thread
can
say
even
have
been
destroyed,
but
but
currently
this
this
part
of
destroying
it
in
the
thread
and
adding
the
synchronization
primitive,
has
to
be
done
by
the
add-on
maintainer.
The
question
is:
shall
we
take
on
the
responsibility
of
providing
a
standard
implementation
or
for
checking
whether
the
return
value
has
been
set
in
JavaScript
or
not,
and
if
we
do
take
on
that
responsibility,
then
then
how
shall
we
manage
these
objects?
You.
B
F
B
G
G
A
A
What
what
means
that
we
should
do
like
if
it's
the
case
where,
like
ninety
percent
of
people
are
going
to
do
it
and
their
only
other
choice,
is
to
use
libuv,
which
means
they
can't
use
any
bi,
then,
like
I,
think
it's
you
know,
I'd
be
in
favor.
If
it's
like
well,
you
can
do
it
without
you
can
already
do
it
and
you
know
it
makes
their
life
slightly
easier.
A
B
Only
the
only
reason
we've
had
so
far
even
for
an
epi
thread
safe
function
is
that
is
that,
yes,
it's
not
it's
not.
It
doesn't
expose
any
special
engine
API,
but
it's
a
very
common
use
case
and-
and
you
know,
we
want
to
avoid
having
a
million
implementations
which
differently
and
so
we've
landed.
That
yeah.
But
now
you
know,
is
the
remainder
worth
the
the
continued
effort,
or
shall
we
try
to
sort
of
drag
our
heels
intentionally
and
in
a
good
way
to
see?
B
A
A
A
E
E
B
It
is
the
the
example
it
doesn't
go
like
it's
not
code.
It's
just
basically
saying
like
if
you
want.
If
you
want
to
answer
the
call
asynchronously,
then
in
the
front
in
the
Marshall
er
rap
the
rap
the
data
coming
in
from
the
thread
a
passed,
the
wrapped
object
into
JavaScript
and
and
add
a
binding
which
receives
it
back
and
then
and
then,
when
it
is
seated
back,
you
set
the
flag
and,
in
the
meantime
the
other
thread
occasionally
checks
the
object,
but
but
I
didn't
elaborate
on
what
it
means
to
occasionally
check
the
object.
B
A
That's
where
I
was
that
like
if
it,
if
it's
a
guarantee
just
say
I'm,
just
gonna,
go
back
and
use
the
PV
and
not
use
an
API
yeah,
and
then
it
makes
sense
right
like
we
want
to
wrap
the
meaningful
parts.
Yes,
just
until
we
that
it
really
is
one
of
those
I
shy
from
it:
yeah,
okay,
okay,
all
right,
cool,
okay
and
I,
guess
I
know:
you'd
open
an
issue
to
discuss
the
API
stability
of
the
view.
Anything
interesting
on
that
front.
That's.
B
E
B
C
B
B
A
B
Exactly
yeah,
so
so
I
mean
now
we
have
now
we
have.
We
found
a
use
case
for
for
for
thread,
say
yeah.
You
know
that
that
that
meaningfully
wraps
quite
a
few
parts
of
it
brings
together
quite
a
few
parts
of
libuv.
So
I
don't
know,
maybe
for
nodejs.
You
know
that's
enough,
but
then
again
I.
You
know.
If
people,
if
people
use
libuv
in
addition
to
an
API,
then
then
you
know
that's.
A
A
A
B
C
A
F
B
This
is
correct
me
if
I'm
wrong.
This
is
at
the
top
of
an
API
dot,
nd.
A
I
think
there's
probably
a
few
places
we'd
want
like
I.
Think
we'd
want
to
go
through,
like
our
readme
we'd
want
to
look
at
the
DPI
docs.