FWIW this is what we have been doing at Facebook for a while now (over a year), and it's worked pretty well for us.

We use a require() function for pulling in dependencies. We then statically extract all require() callsites for a given module during our build step, and use that to identify the dependency-graph of a file (for packaging, etc).

-Jeff

On 6/4/13 9:37 AM, Jeff Morrison wrote:
I still kinda like the idea of allowing ImportDeclarations to be expressed anywhere inside a ScriptElement (including in its children), and then hoisting the declaration for compilation/linking, but only executing the dependency when the statement is reached at runtime. It is then a parse error if an ImportDeclaration is outside of a ScriptElement context.

The System.get() paradigm is kind of awkward and indistinguishable from the import syntax in terms of its expressive relation.
If its all we can get, so be it -- but it feels pretty unpolished.

-Jeff

On 6/4/13 8:11 AM, Jason Orendorff wrote:
On Mon, Jun 3, 2013 at 11:33 AM, Yehuda Katz <wyc...@gmail.com <mailto:wyc...@gmail.com>> wrote:

    I've advocated for this in the past. I believe it should be allowed.

    Separately, I would like this form to be specified as deferring
    execution until bindings are explicitly imported (from another
    module), or a synchronous `System.get` call is made.


It makes the static import language a bit more expressive, but why is it necessary?

For performance? The alternative, if a module has expensive initialization, would be to have it initialize itself more lazily.

    This would make it possible to guarantee that a synchronous
    `System.get` will succeed, without being forced to execute the
    module first.


It would definitely make that possible, but what `System.get()` use case are you looking to support? To my mind `System.get()` is like examining `$LOADED_FEATURES` in Ruby or `sys.modules` in Python; those use cases exist, but the kind of code you're writing when you touch those is typically either an egregious hack or it's generic across all modules, right? They don't need or merit syntactic support.

I want to understand the motivation, because Domenic asked for syntax that just loads and runs a module, without bindings. It seems like we could support that feature with a tweak of the grammar, but you're proposing taking that exact syntax and using it for something else. I expect people trying to load and run a module will greatly outnumber people trying to load and *not* run a module. Wouldn't we be astonishing more people by doing it your way?

-j



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


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

Reply via email to