RE: Why does Symbol.for and Symbol.keyFor are limited to strings?
Why not? Symbol's [[Description]] internal slot is string > Date: Fri, 2 Jan 2015 18:18:55 +0100 > Subject: Why does Symbol.for and Symbol.keyFor are limited to strings? > From: michalwa...@gmail.com > To: es-discuss@mozilla.org > > What is reason behind restricting entries in global symbol registry to > be indexed only by strings? > ___ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Re: Implicit coercion of Symbols
On 1/2/15 9:40 PM, Axel Rauschmayer wrote: Can you give an example? get: function( num ) { return num != null ? // Return just the one element from the set ( num < 0 ? this[ num + this.length ] : this[ num ] ) : // Return all the elements in a clean array slice.call( this ); }, That's from jQuery 2.1.3. And from the same place: function cache( key, value ) { // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) if ( keys.push( key + " " ) > Expr.cacheLength ) { // Only keep the most recent entries delete cache[ keys.shift() ]; } return (cache[ key + " " ] = value); } That's after looking through about 1/10 of the library. I'll bet there are more. I'll also bet this sort of thing appears in every single major library out there. -Boris ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Re: Implicit coercion of Symbols
Can you give an example? > On 03 Jan 2015, at 03:34, Boris Zbarsky wrote: > > On 1/2/15 9:33 PM, Axel Rauschmayer wrote: >> Do people ever >> compose a property key for an object out of several pieces? > > On the web? All the time. > > -Boris > ___ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss -- Dr. Axel Rauschmayer a...@rauschma.de rauschma.de ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Re: Implicit coercion of Symbols
On 1/2/15 9:33 PM, Axel Rauschmayer wrote: Do people ever compose a property key for an object out of several pieces? On the web? All the time. -Boris ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Re: Implicit coercion of Symbols
>> One reason it might make sense to throw, is people converting values to >> string names for use as object properties. Reason you'd want to throw would >> be to prevent accidentally making the key useless (different from its >> original Symbol value). > > This is exactly the reason. > > Of course, having String(x) and '' + x diverge is funky, but not novel: > > js> o = {valueOf(){return 42}, toString(){return 'haha'}} > ({valueOf:function valueOf(){return 42}, toString:function toString(){return > 'haha'}}) > js> String(o) > "haha" > js> ''+o > "42" Playing devil’s advocate: How realistic a danger is this? Do people ever compose a property key for an object out of several pieces? It does add a fair amount of complexity for something that doesn’t seem that common. -- Dr. Axel Rauschmayer a...@rauschma.de rauschma.de ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Re: Implicit coercion of Symbols
On Fri Jan 02 2015 at 7:53:22 PM Brendan Eich wrote: > Caitlin Potter wrote: > > One reason it might make sense to throw, is people converting values > > to string names for use as object properties. Reason you'd want to > > throw would be to prevent accidentally making the key useless > > (different from its original Symbol value). > > This is exactly the reason. > Yep, I just wanted to make sure the subject got some last minute airtime to make sure this is _really_ the way to go. I'll play the opposition here: is the hazard as compelling now as it was when it was first discussed? Now that implementors have had some time to work with Symbol, do proponents of "throw" still feel strongly? > > Of course, having String(x) and '' + x diverge is funky, but not novel: > Sure, but the argument was re: the implicit coercion of built-ins. Rick > > js> o = {valueOf(){return 42}, toString(){return 'haha'}} > ({valueOf:function valueOf(){return 42}, toString:function > toString(){return 'haha'}}) > js> String(o) > "haha" > js> ''+o > "42" > > /be > ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Re: Implicit coercion of Symbols
Caitlin Potter wrote: One reason it might make sense to throw, is people converting values to string names for use as object properties. Reason you'd want to throw would be to prevent accidentally making the key useless (different from its original Symbol value). This is exactly the reason. Of course, having String(x) and '' + x diverge is funky, but not novel: js> o = {valueOf(){return 42}, toString(){return 'haha'}} ({valueOf:function valueOf(){return 42}, toString:function toString(){return 'haha'}}) js> String(o) "haha" js> ''+o "42" /be ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Re: Implicit coercion of Symbols
One reason it might make sense to throw, is people converting values to string names for use as object properties. Reason you'd want to throw would be to prevent accidentally making the key useless (different from its original Symbol value). Haven't paid attention to the rationale, but that doesn't seem like a bad one. > On Jan 2, 2015, at 6:26 PM, Rick Waldron wrote: > > Kyle Simpson brought this up on Twitter today and I think it deserves one > last look. Here's an example of the issue: > > var sym = Symbol("description"); > sym + ""; // Throws > > Meanwhile... > > var sym = Symbol("description"); > String(sym); // "Symbol(description)" * > > > (* appears to be the convention that implementors have converged on) > > This is the only time that a "thing" in JavaScript throws when it encounters > an implicit coercion operation. This detail appears to be problematic in that > it's an unnecessary divergence from the language's normal behaviour. > > Ref: > https://people.mozilla.org/~jorendorff/es6-draft.html#sec-addition-operator-plus-runtime-semantics-evaluation > 11.a > > > Rick > ___ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Implicit coercion of Symbols
Kyle Simpson brought this up on Twitter today and I think it deserves one last look. Here's an example of the issue: var sym = Symbol("description"); sym + ""; // Throws Meanwhile... var sym = Symbol("description"); String(sym); // "Symbol(description)" * (* appears to be the convention that implementors have converged on) This is the only time that a "thing" in JavaScript throws when it encounters an implicit coercion operation. This detail appears to be problematic in that it's an unnecessary divergence from the language's normal behaviour. Ref: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-addition-operator-plus-runtime-semantics-evaluation 11.a Rick ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Re: Octal escape sequences in string and regexp literals
> Le 2 janv. 2015 à 22:08, Caitlin Potter a écrit : > > (...) > More important, octal escape sequences are a bit liberal, in that they > can be of several lengths, with a pretty wide range of delimiters. > This, I think, results in many cases where octal escape sequences are > used by accident, rather than intentionally. It's a footgun, and > ideally that footgun should not be there. Concretely, the danger is that someone could write "\07" when they mean "\0" + "7". This is a good point. (Were you thinking of other cases when you wrote "many cases"?) > > I feel like the "refactoring pain" argument is not very compelling, > because I am not convinced beginners are likely to use octal literals > on purpose (or even by accident). I agree on that point, and therefore I didn't make any refactoring argument. —Claude ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Re: Re: Octal escape sequences in string and regexp literals
I think there are a few reasons why you wouldn't want these. First and foremost, octal escapes (\nnn) are just an alternative equivalent to hex escapes (\xnn). Most software developers spend a lot more time dealing with hex when it comes to byte values, and very little time with octal literals outside of things like unix file permissions. The most useful octal literal would be \0, and this is already explicitly permitted in strict mode. So, I don't think there's any real compelling use case for the alternative representation of byte values. So to summarize, supporting these in strict mode would be adding another way to accomplish the same given task (which grows the language for no real reason and with no benefit), does not make string literals easier to read and understand, and does not enable software developers to perform any compelling task which was not more easily accomplished using hex literals. Finally, the most common use-case for this feature is already supported in strict mode. More important, octal escape sequences are a bit liberal, in that they can be of several lengths, with a pretty wide range of delimiters. This, I think, results in many cases where octal escape sequences are used by accident, rather than intentionally. It's a footgun, and ideally that footgun should not be there. I feel like the "refactoring pain" argument is not very compelling, because I am not convinced beginners are likely to use octal literals on purpose (or even by accident). ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Octal escape sequences in string and regexp literals
Hi, Current web browsers implement octal escape sequences of the form \52, representing the character of code 0o52, in string literals in sloppy mode only, and in regexps (at the condition there is less than 52 capturing groups) in both sloppy and strict mode. (In order to avoid confusion: I am *not* concerned with legacy octal integer literals of the form: 052, representing the number 0o52.) As far as I can infer from archives of es-discuss, these escape sequences was an undesired feature that was not standardised (in ES3), but that everyone implemented and was needed for web compatibility. So, it was decided to exclude it from ES5 strict mode, and therefore from Harmony which was thought to be built on strict mode, for 1JS wasn't invented back then. Now, times have changed, and, in the sake of 1JS, new features are implemented in both sloppy and strict mode; or otherwise said, the difference between the two modes is kept as small as possible. From that new perspective, is there still a strong enough reason to exclude these escape sequences from string literals in strict mode, that would justify the discrepency between strict and sloppy modes? And if so, what to do with regexps? —Claude ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Re: Why does Symbol.for and Symbol.keyFor are limited to strings?
On Jan 2, 2015, at 9:18 AM, Michał Wadas wrote: > What is reason behind restricting entries in global symbol registry to > be indexed only by strings? What are the use cases for anything other strings? Allen ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Why does Symbol.for and Symbol.keyFor are limited to strings?
What is reason behind restricting entries in global symbol registry to be indexed only by strings? ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Re: Can `let`, `static` and `yield` still be used as Identifier?
Gary is right: `let` is disabled for web content in Firefox because our version isn't spec-compatible enough yet. In the shell or chrome code, where it is enabled, our behavior matches traceur's in that we treat the given examples as errors, too. On Fri, Jan 2, 2015 at 4:40 PM, Gary Guo wrote: > Thanks for your note, I'm not testing it under Nightly. Did you test that > the 'let' declaration is working properly in JSFiddle? It may not be > enabled in web pages by default if the script doesn't declare to be > javascript 1.7. > > -- > From: waldron.r...@gmail.com > Date: Fri, 2 Jan 2015 14:23:31 + > Subject: Re: Can `let`, `static` and `yield` still be used as Identifier? > To: nbdd0...@hotmail.com > CC: es-discuss@mozilla.org > > > > On Thu Jan 01 2015 at 9:47:47 PM Gary Guo wrote: > > It seems that in JSFiddle running on Firefox, let declaration is disabled. > So this cannot explain. > > > I don't know why you'd say that, considering the fiddle works just fine. > Open your developer console and you'll see the output. Note that I'm > referring to Nightly. > > Rick > > ___ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss > > ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
RE: Can `let`, `static` and `yield` still be used as Identifier?
Thanks for your note, I'm not testing it under Nightly. Did you test that the 'let' declaration is working properly in JSFiddle? It may not be enabled in web pages by default if the script doesn't declare to be javascript 1.7. From: waldron.r...@gmail.com Date: Fri, 2 Jan 2015 14:23:31 + Subject: Re: Can `let`, `static` and `yield` still be used as Identifier? To: nbdd0...@hotmail.com CC: es-discuss@mozilla.org On Thu Jan 01 2015 at 9:47:47 PM Gary Guo wrote: It seems that in JSFiddle running on Firefox, let declaration is disabled. So this cannot explain. I don't know why you'd say that, considering the fiddle works just fine. Open your developer console and you'll see the output. Note that I'm referring to Nightly. Rick ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss
Re: Can `let`, `static` and `yield` still be used as Identifier?
On Thu Jan 01 2015 at 9:47:47 PM Gary Guo wrote: > It seems that in JSFiddle running on Firefox, let declaration is disabled. > So this cannot explain. > I don't know why you'd say that, considering the fiddle works just fine. Open your developer console and you'll see the output. Note that I'm referring to Nightly. Rick > -- > From: waldron.r...@gmail.com > Date: Wed, 31 Dec 2014 21:36:46 + > Subject: Re: Can `let`, `static` and `yield` still be used as Identifier? > To: a...@kocharin.ru; erik.arvids...@gmail.com; nbdd0...@hotmail.com; > es-discuss@mozilla.org > > let = 1; > console.log(let); // 1 > > var let = 1; > console.log(let); // 1 > > let let = 1; // SyntaxError > ___ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss