Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

doc: update description of External #31255

Closed
wants to merge 3 commits into from
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions doc/api/util.md
Original file line number Diff line number Diff line change
Expand Up @@ -1392,11 +1392,10 @@ added: v10.0.0
* Returns: {boolean}

Returns `true` if the value is a native `External` value.
A native `External` value is a special type of object whose
data is not stored within the JavaScript managed heap
and does not conform to standard JavaScript types. Such
objects are created either by Node.js internals or native
addons and are wrapped by a JavaScript object.

A native `External` value is a special type of object that contains a
C++ `void*` pointer for access from native code, and has no other properties.
Such objects are created either by Node.js internals or native addons.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@addaleax - while this is more specific definition of external types, the existing text is more consumable by end users IMO. For easy consumption while being accurate, shall I suggest to retain data is not stored within the JavaScript managed heap and does not conform to standard JavaScript types.. phrase?

Copy link
Member Author

@addaleax addaleax Jan 8, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gireeshpunathil Sorry, but I have to disagree. The previous text was far from ideal, imo:

  1. Externals are not concerned with where data is stored, or whether data is associated with the External at all. They could even be used to store a single machine-word-sized value (which would mean that the External’s data is actually fully stored on the JS heap).
  2. Saying that an object “does not conform to standard JavaScript types” without describing in what way it doesn’t conform is just not helpful, and worse, External objects do conform to standard JS behaviour – in JS, they’re indistinguishable from Object.freeze(Object.create(null)).

I’m happy to take updates here, but I’d like to keep things helpful and accurate.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Such objects are created either by Node.js internals or native addons.
Such objects are created either by Node.js internals or native addons.
In JS, they’re indistinguishable from `Object.freeze(Object.create(null))`.

Would it be possible to reword the ...contains a C++ `void*` pointer part? A pure JS developers might not be able to follow the part otherwise.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@BridgeAR I’ve reworded the text a bit along the lines of your suggestions, but I’m not quite sure what you had in mind for the second one?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did not think of anything specific. I guess it's fine as it is.


### `util.types.isFloat32Array(value)`
<!-- YAML
Expand Down