On Jun 5, 2010, at 2:17 PM, Kris Kowal wrote:

On Sat, Jun 5, 2010 at 3:40 AM, Sam Tobin-Hochstadt <sa...@ccs.neu.edu> wrote:
On Fri, Jun 4, 2010 at 9:48 PM, Kris Kowal <kris.ko...@cixar.com> wrote:
On Fri, Jun 4, 2010 at 5:17 PM, David Herman <dher...@mozilla.com> wrote:
By keeping modules second class, we get a number of benefits, not
just handling cyclic dependencies. (In fact, cyclic dependencies can
be handled nicely in a first-class module system as well.) One of
the benefits of second-class modules is the ability to manage static
bindings; for example, import m.*; is statically manageable. Allen
has made some good points about how second-class modules are a good
fit for the programmer's mental model of statically delineated
portions of code. At any rate, cyclic dependencies are not the
central point.

As far as I can tell, Simple Modules only changes the composition
hazard introduced by "imoprt m.*" from a run-time hazard to a
link-time hazard.

In your example, certainly the earlier error is a benefit of our
proposal.

I strongly disagree.

Whoa -- I don't see how anyone can disagree that early error is better than a runtime error, if there is an error case at all. It seems to me you're instead arguing that no such error should be possible because import m.* should not be supported -- that you're arguing against any import-everything-that's-exported feature. Right?


 Either Alice is at fault for using "import m.*",
Charlie is at fault for altering her API, or neither Alice and Charlie
are at fault because they were merely and earnestly using the features
of the underlying system, in which case the system is at fault.  Alice
should be able to trust the features of her module system.  Charlie
should be able to *augment* her API without breaking her dependents.

The only reason import m.* is in the proposal is that when one is using modules in one's *own* (definitely including the single-author case, but also the single-curator and same-origin-hosted case) larger program, where the hazard of new names can be controlled by testing and auditing, then lack of import m.* is a royal pain. This is especially true during rapid prototyping.

If * imports were considered too dangerous because they might be abused at scale and across administrative boundaries, then they could be dropped. This is a sideshow -- it doesn't get at the essential issue of second- vs. first-class module system, or other seeming bones of contention.

But I don't think there's a consensus to drop * imports. Lots of things in JS can be abused, but are not so hazardous they should be removed. True,'with' is gone in ES5 strict, eval is tamed somewhat. Perhaps there's a case for a future stricter strict mode forbidding * imports, but it's not obviously worth the added modal complexity.


But the really key benefit is this:

module M {
 export x = 7;
}

module N {
 M.y + 3; // an error - just like an unbound variable in ES5 strict
}

This feature does not preclude the omission of the import * syntax
variant.

Right -- no one is saying * imports must be part of the system to keep other aspects of the design working. And singling out * imports does not argue against the whole design.


This can be an early error because we statically know a lot about
modules.  This is good for programmers, because it supports early
errors, and also good for compiler writers, since it supports
optimization.

I agree.  I do not think that any of my objections preclude statically
linking name spaces.

Ok, then it seems you did agree earlier too, that an early error is better than a runtime error. Whew!

/be
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to