nodejs / node-addon-api

Module for using Node-API from C++
MIT License
2.09k stars 456 forks source link

Discussion: Naming of envs #1527

Open gabrielschulhof opened 6 days ago

gabrielschulhof commented 6 days ago

Following up on our discussion during the meeting, let's jot down the possible names we'd like to use instead of env and nogc_env. Here are the scenarios I can think of so far:

napi_status napi_get_instance_data(_____ env, void** data); // currently node_api_nogc_env
void my_sync_finalizer(_____ env, void* data, void* hint); // currently node_api_nogc_env
void my_regular_finalizer(_____ env, void* data, void* hint); // currently napi_env
typedef void (*_____)(_____ env, void* data, void* hint); // currently napi_finalizer
typedef void (*_____)(_____ env, void* data, void* hint); // currently node_api_nogc_finalizer
napi_status napi_create_object(_____ env, napi_value* result); // currently napi_env

Inspired my Michael's emphasis that we're dealing with a base class - subclass relationship, I was thinking,

napi_status napi_get_instance_data(node_api_basic_env env, void** data);
void my_sync_finalizer(node_api_basic_env env, void* data, void* hint);
void my_regular_finalizer(napi_env env, void* data, void* hint);
typedef void (*napi_finalizer)(napi_env env, void* data, void* hint);
typedef void (*node_api_basic_finalizer)(node_api_basic_env, void* data, void* hint);
napi_status napi_create_object(napi_env env, napi_value* result);

since basic conveys the idea that fewer things can be done when you only have a "basic" environment, and since folks might be familiar with the base class/subclass relationship, whereby if a function accepts a base class then one can pass either, whereas if the function accepts a subclass and one only has a base class handy, then the function is off-limits.

We also need not necessarily elaborate on why an environment is basic. The fact that the context of being in a sync finalizer and therefore unable to manipulate engine heap is the reason why some APIs are off-limits is something we can document, but not absolutely necessarily.

WDYT?

gabrielschulhof commented 6 days ago

Re #1514

KevinEady commented 3 days ago

@gabrielschulhof ,

I really like the qualifier of "basic" for the env.

... basic conveys the idea that fewer things can be done when you only have a "basic" environment ...

Makes sense to me!

... since folks might be familiar with the base class/subclass relationship ...

And this paradigm goes well with the work we'll do in node-addon-api to incorporate the sync finalizers.

KevinEady commented 2 days ago

@gabrielschulhof , regarding finalizers:

void my_sync_finalizer(node_api_basic_env env, void* data, void* hint);
void my_regular_finalizer(napi_env env, void* data, void* hint);

eg. for documentation, would you say that a finalizer can be categorized as either a "synchronous" finalizer or a "regular" finalizer? Perhaps it's better for "synchronous" or "asynchronous"?