On Mar 23, 2011, at 1:06 AM, Juriy Zaytsev wrote:
> On Tue, Mar 22, 2011 at 12:07 PM, Joshua Bell <[email protected]> wrote:
> I was noodling with a (toy) compiler-to-JS for a (dead) language that
> supports error handlers for two boundary conditions - stack depth exceeded &
> out of memory - and noticed that the relevant behavior in JS is not standard
> across browsers. Has there been any discussion around standardization of
> errors thrown when limits of the script execution environment are hit?
> (Searching the archives didn't yield hits, but my search-fu may be weak
> today.)
>
> From briefly testing the boxes on my desk:
>
> stack depth:
> function a() { return a() + 1; } a();
>
> * IE9: Error, message: 'Out of stack space'
> * Firefox 4: InternalError, message: 'too much recursion'
> * Safari 5: RangeError, message 'Maximum call stack size exceeded'
> * Chrome 10: RangeError, message: 'Maximum call stack size exceeded', type:
> 'stack_overflow'
> * Opera 11: Error, message: 'Maximum recursion depth exceeded'
>
> RangeError makes most sense here, imo. It does after all "indicates a numeric
> value has exceeded the allowable range" (15.11.6.2) even if this "numeric
> value" is something internal. Standardizing (or agreeing upon) RangeError
> across implementations wouldn't solve much of course, since it could be
> RangeError caused any of the other cases where RangeError occurs. Parsing
> message for "stack" or "recursion" would help, but that's just ugly and
> fragile.
Disagree. RangeError might rather be called ValueError based on how it is used.
There is no over "value" in a recursively deep program, e.g. Ack(4,5) given
function Ack(m, n) {
if (m == 0)
return n + 1;
if (n == 0)
return Ack(m - 1, 1);
return Ack(m - 1, Ack(m, n - 1));
}
that can be cited by the error message. Think about the developer's point of
view. Which argument is to blame? Or is Ackermann's function to blame? The
engine won't know.
> Firefox's InternalError looks like something non-standard. I wonder why they
> don't just throw Error.
This is *all* non-standard! There is no normative spec.
Picking odd-Firefox-out when the other browsers split into pairs and disagree
between Error and RangeError just confirms that. It does not argue that we
should jump on one of *two* bandwagons.
This is a minor point, but I am strongly against RangeError being used for an
internal recursion limit that may be OS-dependent.
/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss