I agree with that a new pragma decision being a bad idea. Sometimes it's hard to have a full picture on the benefits, I just hope that everybody understand even if they never used a transpiler of any kind before that tooling gets complicated. If for example a typescript document can get evaluated by a browser by just ignoring the typings that doesn't introduce any new functionality to Ecma262 itself, tooling would be made much easier. No copying into new files, no livereload problems, no source maps, no bundling needed etc. It will just giving the freedom for supersets like typescript or any other language superset to keep a clean syntax and share transparent information with other developers without the need for all the extra tools required. Note that I am using typescript just as a example because it is one of does languages that tries very hard to just be a superset, it will always compile plain javascript just fine. We just have to define or set the rules what syntax can be a superset.
On Fri, Oct 21, 2016 at 3:35 AM, Isiah Meadows <[email protected]> wrote: > Please, let's not add a new pragma to the language. `"use strict"` was a > hack to enable some sanity while still remaining back-compatible, but it's > not something we should repeat IMHO. (TC39 unanimously > > I would, on the other hand, strongly support dropping most of the > restriction in section 16, third paragraph [1] and moving the remaining bits > to Annex B, namely that conforming implementations are not allowed to report > early errors beyond what's specified as such in the spec. (This is why > TypeScript emits code by default even in the presence of static type errors. > It remains a superset this way.) That would make it much easier to > experiment with typed JavaScript at the engine level, and it would give much > more freedom to type checkers. > > [1]: > https://tc39.github.io/ecma262/#sec-error-handling-and-language-extensions > > On Thu, Oct 20, 2016, 13:38 Gert Cuykens <[email protected]> wrote: >> >> Ok, what about a "use strict comments"; solution to prevent web breaking? >> >> On Thu, Oct 20, 2016 at 7:33 PM, Rick Waldron <[email protected]> >> wrote: >> > Overloading comments is not likely to be accepted as a new feature; >> > doing so >> > could be dramatically "web breaking". >> > >> > You may be interested in this: >> > >> > https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#types >> > >> > >> > Rick >> > >> > On Thu, Oct 20, 2016 at 1:14 PM Gert Cuykens <[email protected]> >> > wrote: >> >> >> >> Currently there are two ways to make comments `//` and `/**/` in >> >> Ecma262. I think if Ecma262 has a broader way of implementing comments >> >> it can open up the door for third party type checkers and leave the >> >> burden onto others without the need for transpiling. >> >> >> >> I am looking into how close ES20XX syntax for example compares to >> >> typescript syntax. A Ecma262 compiler doesn't need to look at the >> >> typings at all, just be smart enough to ignore typings. Is the Ecma262 >> >> community willing to look at a few syntax notations that a Ecma262 >> >> parser should ignore? >> >> >> >> If there is no objection at first look I am going to put in the effort >> >> to try to cover a complete syntax that extends `//` and `/**/` so >> >> others can use that to implement for example a type checker? Notice >> >> that I am not asking for type checking itself, just expanding `//` and >> >> `/**/` that makes it possible for others to do for example type >> >> checking and maintain a clean syntax look of their code. >> >> >> >> ## Example ES2015 code >> >> >> >> ```html >> >> <!DOCTYPE html> >> >> <html > >> >> >> >> <head> >> >> <title>Test</title> >> >> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> >> >> <meta name="viewport" content="width=device-width, >> >> initial-scale=1.0, minimum-scale=1.0" /> >> >> </head> >> >> >> >> <body> >> >> <template> >> >> <style> >> >> :host { >> >> display: block; >> >> box-sizing: border-box; >> >> border: 1px solid red; >> >> margin: 13px 0; >> >> padding: 0 17px; >> >> } >> >> </style> >> >> <p>Test <slot></slot></p> >> >> </template> >> >> <script> >> >> class HelloWorld extends HTMLElement { >> >> constructor() { >> >> super() >> >> const t = document.querySelector('template') >> >> const instance = t.content.cloneNode(true) >> >> const shadowRoot = this.attachShadow({ mode: 'open' }) >> >> shadowRoot.appendChild(instance) >> >> } >> >> } >> >> customElements.define('hello-world', HelloWorld) >> >> </script> >> >> <hello-world>Hello World</hello-world> >> >> </body> >> >> </html> >> >> ``` >> >> >> >> ## Example typescript code >> >> >> >> ```html >> >> <!DOCTYPE html> >> >> <html > >> >> >> >> <head> >> >> <title>Test</title> >> >> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> >> >> <meta name="viewport" content="width=device-width, >> >> initial-scale=1.0, minimum-scale=1.0" /> >> >> </head> >> >> >> >> <body> >> >> <template> >> >> <style> >> >> :host { >> >> display: block; >> >> box-sizing: border-box; >> >> border: 1px solid red; >> >> margin: 13px 0; >> >> padding: 0 17px; >> >> } >> >> </style> >> >> <p>Test <slot></slot></p> >> >> </template> >> >> <script type="ts/module"> >> >> class HelloWorld extends HTMLElement { >> >> constructor() { >> >> super() >> >> const t:type1 = document.querySelector('template') >> >> const instance:type2 = t.content.cloneNode(true) >> >> const shadowRoot:type3 = this.attachShadow({ mode: 'open' }) >> >> shadowRoot.appendChild(instance) >> >> } >> >> } >> >> customElements.define('hello-world', HelloWorld) >> >> </script> >> >> <hello-world>Hello World</hello-world> >> >> </body> >> >> </html> >> >> ``` >> >> _______________________________________________ >> >> es-discuss mailing list >> >> [email protected] >> >> https://mail.mozilla.org/listinfo/es-discuss >> _______________________________________________ >> es-discuss mailing list >> [email protected] >> https://mail.mozilla.org/listinfo/es-discuss _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

