- From: Alex Russell <slightlyoff@google.com>
- Date: Sun, 18 Aug 2013 09:53:44 -0700
- To: David Bruant <bruant.d@gmail.com>
- Cc: "public-script-coord@w3.org" <public-script-coord@w3.org>
- Message-ID: <CANr5HFXzqeFjO5F+q0+aqOg0Znkaihia0nRmpGe4iHjoek4veQ@mail.gmail.com>
On Saturday, August 17, 2013, David Bruant wrote: > Hi, > > [I'm not entirely sure "non-agression pact" is the best expression. What I > mean is "let's decide on a border and respect one another's border"] > > So, recently, there have been some collisions between methods added by a > library and ES6 planned Array#find, maybe endangering the addition of > Array#find to the platform. The details are unimportant; what is important > is that that'll happen again. > > I'm coming as a (totally illegitimate) web developer community > representative to ask if we can agree on some rules that would both enable > developers to create libraries and extend built-ins (because > myArray.newMethod() or "some string".whatever() or > document.querySelectorAll(s).**map are convenient) while not preventing > future growth of platform APIs. > > The reason is that currently, each library is trying over and over to > solve the namespacing problem. Some do fine. Others fail. We need a > platform-wide principle. We need commitment from web browsers and specs > that some parts of the namespaces are free for library authors to use > freely. > > Before my initial proposal, I'd like to address some points: > * A first limitation is that not all devs will get the memo. However, a > good thing about an agreement between browsers and webdevs is that tooling > can inform that the agreement has been violated and recommend what to do to > respect the agreement. > Also, people aware and caring of the agreement can have a reference point > on what to do and what not to do to share with an open source library > they'd have noticed not respecting the agreement. (For whatever reason, I > can already imagine Rick Waldron or Dominic Denicola filing such issues on > Github :-) ) > * This proposal also doesn't really help with existing deployed code > (browser devtools integration may raise alerts and trigger fixes though) > * unique strings [1] (eventually unique symbols) could be used to > guarantee avoiding collisions. The simplest form of cooperation between a > library and client code I have found is at https://gist.github.com/** > DavidBruant/6256883 <https://gist.github.com/DavidBruant/6256883> and I'm > not sure it's satisfactory > I believe that the forced bracket notation in client code and the sharing > through globals (for things that are supposed to be already reachable from > the global!) is the reason why web devs haven't come up with this solution > themselves. > > I think technical and language-based solutions have been explored enough > and shown to fail, so I believe an human-agreement-based solution (backed > by static+dynamic tooling) is worth a try. > > > The proposal I'm making here is in part documenting existing practice and > in part trying to introduce new rules. > > Initial Proposal (future-facing, but assuming backward compat, obviously): > * The global object is free for everyone (spec or webdevs) to write on it. > Creating a global property should never fail for JS code. > Among other things, this is supposed to prevent new APIs to define > immutable global properties [2]. > This rules allows for instance jQuery to define "$" and "jQuery" global > symbols without fearing that a spec may one day define immutable properties > with these names. > WebIDL tests may be able to enforce such a property. That may become a > hard requirement for a spec to move to Last Call state for instance. > > * Web browsers commit to never define methods or attributes (using WebIDL > terminology, but applies equally to the ECMA 262 spec) that starts with "_" > to built-ins (beyond the ones that may already exists for backward-compat > reasons of course) > WebIDL tests may be able to enforce such a property. That may become a > hard requirement for a spec to move to Last Call state for instance. > No? We're going to continue to extend the meta-protocol, and to the extent that double-underbar properties are a good way to do that, I think we'll continue. > * Web developers commit to never extend a built-in unless the property > name starts with '_'. > And you can't extract that concession from the "other side" as well. Polyfills and prollyfills put the lie to this immediately. > This can be enforced by developers themselves via static tooling and human > review or via browser devtools that can emit a warning in a webconsole > explaining that for the good of the long-term of their application, web > devs should change their code. > > > This is of course an initial proposal and only the beginning of a > discussion. > > David > > [1] https://mail.mozilla.org/**pipermail/es-discuss/2013-** > July/032228.html<https://mail.mozilla.org/pipermail/es-discuss/2013-July/032228.html> > [2] http://lists.w3.org/Archives/**Public/public-webapps/** > 2013JulSep/0224.html<http://lists.w3.org/Archives/Public/public-webapps/2013JulSep/0224.html> > >
Received on Sunday, 18 August 2013 16:54:12 UTC