Thanks for pointing me in the right direction. On Saturday, November 4, 2017 at 9:52:23 AM UTC-7, J Decker wrote: > > > > On Sat, Nov 4, 2017 at 9:29 AM, Bruce MacNaughton <[email protected] > <javascript:>> wrote: > >> I am new to Nan, V8, and C++ (so if I haven't put a big enough target on >> my back I don't know what else I can add). I've written a lot of JavaScript >> and, in the past, C, assembler, and kernel mode code, so hopefully the >> bulls-eye is a little smaller now. >> >> I'm working with an existing code base and am trying to understand why >> things were done the way they were. It uses Nan to create an addon for >> nodejs. I'm hoping someone here can help me understand some pieces that >> escape me. >> > > Nan is really a nodejs thing, and not V8... so this is sort of the wrong > place for these questions... > > >> >> 1. The code sets internal field count for each class - sometimes to 1 and >> sometimes to 2 - but never invokes "setInternalField()" or >> "getInternalField()". Is there some reason, possibly historical, that >> "setInternalFieldCount()" needed to be called to set a value? The way I >> have interpreted what I've read is that my code needs to set and get the >> value explicitly, so setting a value but never storing anything there makes >> no sense to me. >> >> // Prepare constructor template >> v8::Local<v8::FunctionTemplate> ctor = >> Nan::New<v8::FunctionTemplate>(New); >> ctor->InstanceTemplate()->SetInternalFieldCount(2); >> ctor->SetClassName(Nan::New("MyClass").ToLocalChecked()); >> >> > Does it use Wrap and/or as classes subclassed with ObjectWrap? Wrap uses > internal field 0 to store the class so it can be later unwrapped from the > V8 object. > https://github.com/nodejs/node/blob/master/src/node_object_wrap.h#L75 > (near that is also SetWeak reference) > > >> 2. Given that I'm storing something in internal fields, my understanding >> is that I need to free any resources (memory, etc.) that are used by the >> internal field if the object is GC'd. Doing that in the destructor seems to >> be the right way to handle that. Is that all there is to it? >> >> the destructor is really too late, at the point the destructor is called, > the Object holding it would have also disappeared.... If the destructor is > getting called, it's probably because of an ObjectWrapped thing > disappearing, which internally stores the object in the class as a > Persistent<> that is SetWeak()'d. SetWeak takes a callback which is called > when the object is GC'd. > > >> 3. What difference does it make to v8 if the internal field is an aligned >> pointer or not? Is the ability to set/get aligned pointers a consistency >> check so assumptions can be made? Does the interface check the alignment? >> (Not critical for me, I don't think, but I'd like to understand.) >> >> > I dooubt it matters... basically internal fields seem to be user-data > fields that store the value so your user code can later retrieve it. > Internally I wouldn't expect V8 to ever actually do anything with those > fields. Since they are usually pointers that are stored, aligned buffers > will be more optimal. > > >> >> >> >> >> -- >> -- >> v8-users mailing list >> [email protected] <javascript:> >> http://groups.google.com/group/v8-users >> --- >> You received this message because you are subscribed to the Google Groups >> "v8-users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > >
-- -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
