simple modules

David Herman dherman at mozilla.com
Wed Feb 3 12:38:13 PST 2010


[including the list, which got inadvertently cut]

> Yes, I understand that short import  is not "with", it just "smells"
> like "with" and like "global". Your reasons are correct for language
> implementers and I am telling about language users.

To be clear: this is not for implementers, it's for users. The point is that you can always know *statically* what is in scope. When you say

    function f() { ... }
    var x = ...
    with(obj) {
        f(x);
    }

you don't know whether the references to f and x are captured by `obj' properties or not. When you say

    import * from Foo;
    f(x);

you know statically that f and x came from Foo. It doesn't depend on the runtime behavior of the program.

> This is exactly about promoting good style. And when I proposed some
> shortcut for "function" 2-3 years ago in this list, it was discarded
> for good-style and readability reasons.

IIRC, it was discarded because a) we couldn't agree on a color for the bikeshed, b) it was determined that it didn't add enough utility to the language that wasn't already there.

My point is that it's kind of a deal-breaker for every script on the web to have to write e.g.:

    <script type="harmony">
        import alert, document, window from DOM;
        ...
    </script>

People have not had much problem writing `function' since the mesozoic era of JavaScript. But if we want to get them to use a new module system, we can't impose undue burdens simply for the sake of "promoting good style." Especially when the downsides of ignoring that good style are not all that grave.

> About burden - I see it - new item "Never use default import" will be
> added to books and code style guides after "Never use global and
> with".  And every user will need to remember one more JS quirk.

And if *I* were writing a style book, I would not say "never use default import." I would say, "if you are writing a module of a reasonable size, or with a reasonable number of imports, or if it's not particularly clear, then don't use default import. Otherwise, go to town. It's your language, do what you see fit."

It's not a JS quirk, it's actually an important feature.

Dave



More information about the es-discuss mailing list