Pragmas (ignorable source hints to an implementation) have become fairly wide-spread in Javascript, but their look and usage differs widely, and with an increasing number of tools defining their own pragma conventions, it is only a matter of time before they start stepping on each others toes.
This seems to call for some guidelines from the language standard (not to define individual pragmas, but to define a framework and namespacing for using and defining pragmas). There is a strawman for this http://wiki.ecmascript.org/doku.php?id=strawman:pragmas but it doesn't seem to be part of Harmony yet, and it doesn't mention that pragmas are alread used in the wild, not just in ES5. Some examples: 1. ES5 "use strict" ignoreable expression statement 2. IE conditional compilation @-prefixed, suggested in, but not limited to comments 3. jslint options (partial overlaps with forks like jshint) in-comment /*jslint /*members .. 4. google for javascript pragma for more examples (sometimes pragmas for embedded javascript in applications, sometimes options in comments for JS processors) Apart from standardizing pragma syntax for options, it would be nice to annotate code with language extensions in use (rather than language versions): this is similar to feature- versus browser-version-testing. There are also some standard pragmas I would like to see, to warn me when I am using features I do not like to use, something like //OPTIONS: warn-asi // trace ASI semicolons, to simplify verification //OPTIONS: warn-hoisting // warn if bindings are lifted out of their block //OPTIONS: warn-non-standard // warn if browser-specific features are used Below I add some references to examples from another language, Haskell. Claus Haskell has pragmas both for declarative optimization hints and for language extensions http://www.haskell.org/onlinereport/haskell2010/haskellch12.html#x19-18800012 on top of this, Haskell packages specify the language extensions they use http://haskell.org/cabal/release/cabal-latest/doc/users-guide/authors.html#pkg-descr The currently known language extensions are listed here, for Cabal (package manager) and GHC (compiler) http://haskell.org/cabal/release/cabal-latest/doc/API/Cabal/Language-Haskell-Extension.html#t:Extension http://www.haskell.org/ghc/docs/7.0-latest/html/users_guide/flag-reference.html#id568865 In addition to language pragmas, there is an inofficial standard for compiler options, eg, GHC understands OPTIONS_GHC pragmas, which make most of GHC's options available in source files (those that make sense on a per-module basis): http://www.haskell.org/ghc/docs/7.0-latest/html/users_guide/pragmas.html The list of options useable in source pragmas includes many warning options http://www.haskell.org/ghc/docs/7.0-latest/html/users_guide/flag-reference.html#id570580 _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

