On Sep 27, 2009, at 4:15 PM, Maciej Stachowiak wrote:

On Sep 27, 2009, at 11:28 AM, Brendan Eich wrote:
But there's no point pretending the Web (ES, DOM, etc.) is an example of a well-designed toolkit for building user-facing distributed apps!

But we're not really free to discard compatibility. So I'm not that excited about the exciting opportunities we could have if we did. The Web is a duct tape design but it works. Dropping compatibility would kill one of its biggest advantages.

Sure. You didn't see me proposing dropping Web compatibility (suicide for browser vendors) -- rather, I'm talking about doing end-to-end design as we go, and meeting in the middle.

Too many short hops via a standard body incurs high costs in the spec process (some essential, some not) while tending to enshrine mistakes over time due to compatibility. Whereas taking big hops risks mission creep, or mission cliff-dive into second-system death-beach ;-), or even the old mistake of targeting a market foreseen five years out that never arrives (the real world zigged instead of zagging).

We've all seen these problems, I think, over our careers. And it's not as if the proprietary languages and stacks can break compatibility excessively (search for "Visual Fred"). But they can and do provide new and more coherent API-sets that help deprecate old ones.

To avoid proprietary stack examples, consider Python's from __future__ import mechanism:

http://www.python.org/dev/peps/pep-0236/

This precedent is attractive if one can push out new versions of the language implementation, with carrots to induce people to upgrade, as well as the stick of unsupported ancient versions. It helps that C- Python is source-as-spec, but let's say that is a non-issue with good- enough ES specs.

The "carrots instead of sticks" idea is more critical from what I have seen, for Python and for JavaScript -- we can't get people to stop doing what worked if there's no new and better way (the recent arguments.callee in strict mode thread highlighted this point).

Of course, the web is too big to try to get away with deprecation/ obsolescence cycles on any predictable near-term release schedule. Never mind coordination among browser vendors on their next versions -- IE6 is still Out There.

But perhaps once past IE6, though, with modern browsers auto-updating, we'll see the downrev implementations go away faster. There's a chance, anyway, from what I see of IE8 replacing IE7, and of course faster updating for other, "fresher" browsers ;-).

If we do see a world where browser version uptake is faster, and the downrev problem shrinks or becomes more tractable somehow, then we will want shinier duct tape without bits of lint and trash stuck to the edges of the tape roll, over time. Every compatibility constraint costs non-linearly when refracted through the whole-language design process.

So part of ECMAScript "Harmony" is not just "ES6", a prematurely- triaged, shortest-path evolutionary jump, but longer-term "end to end" design that ultimately puts the TC39 committee out of the language- extension business by empowering developers to bootstrap new language versions by themselves.


Systems that discard compatibility can also deliver an unusable Second System, especially when designed by committee. I would point to certain W3C specs that chose to break compatibility with existing practice. They are often not only undeployable but also not very compelling on their own terms.

Agreed.


I think compatibility constraints, even though they impose messy and illogical quirks, can also act as a healthy counterweight to flights of design fancy. Constraints make for good art.

We seem to have some unnecessary constraints, which are bad for art and science. Let's try to get rid of the foo(i) for foo[i] or foo.item[i] non-mandatory compatibility cruft and see how that goes.

/be

Reply via email to