<font face="times new roman,serif">In view of the schedule, I suggest that we make your first, minimal change right now, and plan to correct it along one of the other lines in the next edition.</font><div><font face="times new roman,serif"><br>
</font></div><div><font face="times new roman,serif">#1 is much weaker than we want, so we should correct it, but we can do that in edition 2.<br clear="all"></font><font face="'times new roman', serif"><div style="background-color:transparent;margin-top:0px;margin-left:0px;margin-bottom:0px;margin-right:0px">
<div></div></div><div style="background-color:transparent;margin-top:0px;margin-left:0px;margin-bottom:0px;margin-right:0px"><br></div><div style="background-color:transparent;margin-top:0px;margin-left:0px;margin-bottom:0px;margin-right:0px">
<a href="https://plus.google.com/114199149796022210033" target="_blank">Mark</a></div><div style="background-color:transparent;margin-top:0px;margin-left:0px;margin-bottom:0px;margin-right:0px"><i><br></i></div><div style="background-color:transparent;margin-top:0px;margin-left:0px;margin-bottom:0px;margin-right:0px">
<i>— Il meglio è l’inimico del bene —</i></div></font><div><div><font face="'times new roman', serif"><i><span style="font-style:normal"><i></i></span><i></i></i></font></div></div><br>
<br><br><div class="gmail_quote">On Tue, Sep 4, 2012 at 12:35 PM, Norbert Lindenberg <span dir="ltr"><<a href="mailto:ecmascript@norbertlindenberg.com" target="_blank">ecmascript@norbertlindenberg.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Seeing that the final draft of the spec is due today, here's a breakdown of possible changes around normalization in Collator:<br>

<br>
1) Change the description of Intl.Collator.prototype.compare to say: "The method is required to return 0 when comparing Strings that are considered canonically equivalent by the Unicode standard, unless collator has a [[normalization]] internal property whose value is false."<br>

<br>
This is the smallest possible change to the spec that's needed to make its canonical equivalence and normalization requirements consistent, and I've made it.<br>
<br>
2) Require support for the normalization property and the kk key.<br>
<br>
The way I phrased the spec in 1), this isn't necessary anymore, and we can make this change in the second edition if needed.<br>
<br>
3) Add "locale" to the set of acceptable input values for the normalization property of options. Implementations that support the normalization property would use the selected locale's default for the "kk" key. The normalization property of the object returned by resolvedOptions remains a boolean.<br>

<br>
This change could be made today or in the second edition. If we make it in the second edition, implementations of the first edition would interpret "locale" as true because "locale" is truthy. The conformance clause does not allow implementations to add support for this value on their own.<br>

<br>
4) Add "locale" to the set of acceptable values of the kk key of BCP 47. The Internationalization API would use this, if the normalization property of options is undefined, to map to the appropriate boolean value.<br>

<br>
This can't happen today, and I'm not sure it's really required. Turning off normalization is primarily an optimization and so should be under application control.<br>
<br>
Comments?<br>
<span class="HOEnZb"><font color="#888888"><br>
Norbert<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
On Sep 1, 2012, at 16:19 , Mark Davis ☕ wrote:<br>
<br>
> > Support for the normalization property in options and the kk key would become mandatory.<br>
><br>
> The options that ICU offers are to observe full canonical equivalence:<br>
>       • For all locales<br>
>               • kk=true<br>
>       • For key locales (where it is necessary); otherwise partial (FCD)<br>
>               • kk=<not present><br>
>       • For no locales; always partial (FCD)<br>
>               • kk=false<br>
> Your proposal looks reasonable, except I'm not sure how someone would use the kk value to get #2.<br>
><br>
> Mark<br>
><br>
> — Il meglio è l’inimico del bene —<br>
><br>
><br>
><br>
> On Fri, Aug 31, 2012 at 3:30 PM, Norbert Lindenberg <<a href="mailto:ecmascript@norbertlindenberg.com">ecmascript@norbertlindenberg.com</a>> wrote:<br>
> I think #2 is far more common for ECMAScript - typical use would be to re-sort a list of a few dozen or at most a few hundred entries and then redisplay that list. #1 might become more common though as JavaScript use on the server progresses.<br>

><br>
> So here's an alternative spec approach:<br>
><br>
> - Leave the specification of String.prototype.localeCompare as is. That is, if it's not based on Collator, canonical equivalence -> 0 is required.<br>
><br>
> - For Collator.prototype.compare, require that canonical equivalence -> 0 unless the client explicitly turns off normalization (i.e., normalization is on by default, independent of locale). Support for the normalization property in options and the kk key would become mandatory.<br>

><br>
> Norbert<br>
><br>
><br>
> On Aug 31, 2012, at 10:12 , Mark Davis ☕ wrote:<br>
><br>
> > I think we could go either way. It depends on the usage mode.<br>
> >       • The case where performance is crucial is where you are comparing gazillions of strings, such as records in a database.<br>
> >       • If the number of strings to be compared is relatively small, and/or there is enough overhead anyway, the performance win by turning off full normalization would be lost in the noise.<br>
> > So if #2 is the expected use case, we could require full normalization.<br>
> ><br>
> ><br>
> > Mark<br>
> ><br>
> > — Il meglio è l’inimico del bene —<br>
> ><br>
> ><br>
> ><br>
> > On Fri, Aug 31, 2012 at 9:56 AM, Norbert Lindenberg <<a href="mailto:ecmascript@norbertlindenberg.com">ecmascript@norbertlindenberg.com</a>> wrote:<br>
> > The question for ECMAScript then is whether we should stick with "must do" (the current state of the specifications) or change to "must be able to do".<br>
> ><br>
> > The changes for "must be able to do" would be:<br>
> ><br>
> > - In the Language specification, remove the description of String.prototype.localeCompare, and require implementations to follow the Internationalization API specification at least for this method, or better provide the complete Internationalization API. That way, localeCompare acquires support for the normalization property in options, and the -kk- key in the Unicode locale extensions.<br>

> ><br>
><br>
><br>
<br>
</div></div></blockquote></div><br></div>