You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I don't think it's worth breaking compatibility with a new major for this drivel yet. I'd like to keep NAN 2 working for at least a year (given no major overhauls of V8), so I propose aliasing Nan::ForceSet to v8::DefineOwnProperty, ignoring v8::CreateDataProperty, and un-maybefying v8::Function::New and v8::Object::SetAccessor.
However, what is the actual Node release policy now after 5 has been released? My understanding is that it will be around for half a year or so, but won't be an LTS release, which 4 is. Will there be a 6, 7, 8, and 9 (given V8's six week cycle) in those six months, or are future major versions (and thereby V8 upgrades) off the table until six months have passed?
If Node 6 won't be out for six months, the best option is probably to wait for more breaking V8 changes to accumulate in the meantime and then to break the API if more changes have accumulated, or to keep compatibility if these are the only offenders or they can be reasonably covered with only additive changes.
As mentioned elsewhere, there will be a major overhaul the day we can finally stop supporting 0.8 and 0.10, either voluntarily, or because it simply is not feasible to keep it working any longer.
Alright, if that schedule will be held, it seems like we could even drop 0.8, 0.10, 0.12 and all of io.js in a year from now, moving on to the regular schedule of supporting two LTSs after that. However, it is still hard to determine such things in advance. It should at least not be necessary to do a new major of NAN until April next year.
so I propose aliasing Nan::ForceSet to v8::DefineOwnProperty
From includes.v8.h:
// Defines a configurable, writable, enumerable property with the given value// on the object unless the property already exists and is not configurable// or the object is not extensible.
Which leads me to believe that CreateDataProperty/DefineOwnProperty will not forcefully override the propety, unlike ForceSet.
so I propose aliasing Nan::ForceSet to v8::DefineOwnProperty
From includes.v8.h:
// Defines a configurable, writable, enumerable property with the given
value
// on the object unless the property already exists and is not
configurable
// or the object is not extensible.
Which leads me to believe that CreateDataProperty/DefineOwnProperty
will not forcefully override the propety, unlike ForceSet.
Reply to this email directly or view it on GitHub: #504 (comment)
@trevnorris The way I interpret that sentence is: if (property.Exists() && (!property.Configurable() || !object.Extensible())) v8::ForceSet is now a soon to be deprecated wrapper around v8::DefineObjectProperty.
Hmm, maybe we should check what's what with the V8 team. The sooner the better, as they are more likely to take requests into account on the current development branch. Is the intention not to have any way of forcing a property override? Is this something people need?
Alright, guess that's the way it has to be then. New proposal: Backport one or both of those APIs on top of Set and ForceSet, making sure that things cannot be wrongly overridden.
And now for a round of "no member named" for all the now-obsolete interfaces, thanks to distributions that jumped on v10 the instant it was released. I'm looking at you, Arch.
Reacted by Vincent Stakenburg, William Gathoye, Dan Svyatovets and Ilya Yarkavets
@kode54 We also provides lts version of nodejs, but I think it’s good some people update it asap so that all bugs get fixed by the time it lands in other distros.
Do you think we can close this issue now 2.10 fixes (AFAIK) the problem? For packages failing, you just need to force the use of at least nan 2.10 to make it work. A bit like I did with Mattermost on Arch Linux.
Activity
rvagg commentedon Oct 28, 2015
will be a breaking change no?
kkoopa commentedon Oct 28, 2015
No, the idea is to keep them working the current way, without maybes.
kkoopa commentedon Oct 29, 2015
However, what is the actual Node release policy now after 5 has been released? My understanding is that it will be around for half a year or so, but won't be an LTS release, which 4 is. Will there be a 6, 7, 8, and 9 (given V8's six week cycle) in those six months, or are future major versions (and thereby V8 upgrades) off the table until six months have passed?
If Node 6 won't be out for six months, the best option is probably to wait for more breaking V8 changes to accumulate in the meantime and then to break the API if more changes have accumulated, or to keep compatibility if these are the only offenders or they can be reasonably covered with only additive changes.
As mentioned elsewhere, there will be a major overhaul the day we can finally stop supporting 0.8 and 0.10, either voluntarily, or because it simply is not feasible to keep it working any longer.
fivdi commentedon Nov 1, 2015
@kkoopa the Node.js LTS release schedule at the bottom of this page should provide some of the information you're looking for.
kkoopa commentedon Nov 1, 2015
Alright, if that schedule will be held, it seems like we could even drop 0.8, 0.10, 0.12 and all of io.js in a year from now, moving on to the regular schedule of supporting two LTSs after that. However, it is still hard to determine such things in advance. It should at least not be necessary to do a new major of NAN until April next year.
trevnorris commentedon Nov 2, 2015
From
includes.v8.h:Which leads me to believe that
CreateDataProperty/DefineOwnPropertywill not forcefully override the propety, unlikeForceSet.kkoopa commentedon Nov 3, 2015
Ish... Need to take a closer look at it. The deprecation notice said to use one of those.
On November 3, 2015 1:49:08 AM GMT+02:00, Trevor Norris notifications@github.com wrote:
kkoopa commentedon Nov 3, 2015
@trevnorris The way I interpret that sentence is:
if (property.Exists() && (!property.Configurable() || !object.Extensible()))v8::ForceSetis now a soon to be deprecated wrapper aroundv8::DefineObjectProperty.kkoopa commentedon Nov 3, 2015
Although
DefineObjectPropertydoes not seem to be an exported function. I guess the only way to make sure is to write regression / unit tests.trevnorris commentedon Nov 3, 2015
Wrote quick script to check, and it appears to not forcefully override a property. Here's the C++:
and the JS:
kkoopa commentedon Nov 3, 2015
Hmm, maybe we should check what's what with the V8 team. The sooner the better, as they are more likely to take requests into account on the current development branch. Is the intention not to have any way of forcing a property override? Is this something people need?
On November 3, 2015 8:27:54 PM GMT+02:00, Trevor Norris notifications@github.com wrote:
trevnorris commentedon Nov 4, 2015
@kkoopa Has been confirmed that this will not be backwards compatible: https://code.google.com/p/v8/issues/detail?id=3485#c8
kkoopa commentedon Nov 4, 2015
Alright, guess that's the way it has to be then. New proposal: Backport one or both of those APIs on top of Set and ForceSet, making sure that things cannot be wrongly overridden.
On November 4, 2015 7:47:27 PM GMT+02:00, Trevor Norris notifications@github.com wrote:
kkoopa commentedon Nov 9, 2015
And the problem with that suggestion is that I can't find a way of checking if a
v8::Objectis extendable.paixaop commentedon Oct 19, 2016
Any solutions or workarounds in sight for this? I'm getting deprecated messages when using ForceSet.
kode54 commentedon Apr 30, 2018
And now for a round of "no member named" for all the now-obsolete interfaces, thanks to distributions that jumped on v10 the instant it was released. I'm looking at you, Arch.
ArchangeGabriel commentedon May 3, 2018
@kode54 We also provides lts version of nodejs, but I think it’s good some people update it asap so that all bugs get fixed by the time it lands in other distros.
wget commentedon May 14, 2018
Do you think we can close this issue now 2.10 fixes (AFAIK) the problem? For packages failing, you just need to force the use of at least nan 2.10 to make it work. A bit like I did with Mattermost on Arch Linux.