Interesting. I agree it's "nice to have" in a debugging sort of way, both for embedders and v8 itself (no weird crashes due to people forgetting to enter a Context). But I wonder if we're now in a sort of inconsistent state, where some APIs require entering a Context before calling and others take this as an argument. Are we planning to move more of the API towards _always_ passing a Context?
On Thu, Apr 9, 2015 at 10:06 AM, Jochen Eisinger <[email protected]> wrote: > In C++ you can't overload a method with just a different return type. > Since making the context explicit instead of hoping that the right one is > entered is nice to have, it was a handy way to change the return type. > > On Thu, Apr 9, 2015 at 6:25 PM Adam Klein <[email protected]> wrote: > >> On Fri, Feb 27, 2015 at 2:43 AM, Michael Hablich <[email protected]> >> wrote: >> >>> Hey v8-users, >>> >>> we're making big changes to the api (again). We've found that our api makes >>> it extremely difficult to write exception safe code. >>> >>> *Reference issue* >>> https://code.google.com/p/v8/issues/detail?id=3929 >>> >>> *Further description* >>> Consider the following: >>> >>> Local<Value> x = some_value; >>> s = x.ToString(); >>> // in the current context, ToString might throw an exception, run out >>> of stack space, whatever... >>> // if that happens we just return an empty Local<String> >>> s->Anything() // Crash! >>> >>> There's too much implicit stuff happening here, and it's bad. It's >>> especially >>> bad if you use threads and rely on TerminateExecution(), which causes >>> lots of v8 function to return empty handles unexpectedly. >>> >>> To fix this, we will begin adding functions whose signature makes it >>> impossible >>> to make this mistake and we will deprecate and eventually remove all >>> old functions. The new functions will in general come in >>> two flavours: >>> >>> functions like: >>> Local<String> ToString(Isolate*); >>> >>> will become: >>> MaybeLocal<String> ToString(Local<Context>); >>> >>> and functions like: >>> double NumberValue(); >>> >>> will become: >>> Maybe<bool> NumberValue(Local<Context>); >>> >>> The Maybe values ensure at compilation time that the value returned is >>> checked >>> by the embedder, and the explicit Context makes it clear that a context >>> is actually required and that javascript may be executed in that >>> context. >>> >> >> I'm curious about this bit of the design: why was it decided to add an >> argument here rather than require a Context to be entered (via >> Context::Scope)? >> >> Rather late to the discussion, I know. Apologies >> >> - Adam >> >> >>> *Timeline* >>> We will add the new API parts gradually to the codebase. When this is >>> finished there will be approx. 6 weeks of time where the old and the new >>> API will exist side-by-side. This is a good time to make the adjustments in >>> your embedding code. After this period the old API will get removed. >>> >>> We apologize in advance for any trouble this may cause, but we're positive >>> that this change will reduce crash rates for practically all v8 >>> embedders. >>> >>> Cheers, >>> Michael Hablich >>> >>> -- >>> -- >>> 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. >>> >> -- >> -- >> 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. >> > -- > -- > 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. > -- -- 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.
