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.

Reply via email to