Interesting and impressive from a technological perspective but wouldn't sweet.js make your code harder to debug? Macros in C are hell. Have you seen functions with ifdef littered everywhere? Why would anyone want this in JavaScript? JavaScript is dynamic enough to not need a crutch like this in my opinion. At least with CoffeeScript you're not mixing contexts. Everything is either CoffeeScript or JavaScript.
Reading about Sweet.js made me really, really want such a thing in Python.
I recognise that such a thing would run completely counter to Python's 'no magic' cultural values, but structural search-and-replace seems such an intoxicatingly powerful tool, I'd like to at least have the option to abuse it.
The thing about Perl is that there is supposed to be more than one way to do it. Which enables you to mix-and-match different paradigms in a way that the Python philosophy doesn't seem to welcome.
If I recall correctly, there might be a macro system in the ECMAScript 6 specification (which should be implemented natively by Javascript engines eventually).
Not a ‘new JS’ with ‘better’ syntax, but convenient means for developers to define their own JS with the syntax most suitable for the problem at hand. Reminded me of “You're solving the wrong problem” post[0].
For good or bad, it appears to be limited, with macros you probably can't, for example, make curly braces optional.
But they are not solving the same problem at all! This should be a superset of TypeScript. Since TypeScript is a superset of JavaScript, you would not be forced to use TypeScript if you didn't want to. But how can I use this with TypeScript currently?
I was wondering about integrating the two. The only way I can think of is for sjs to sit on top of TypeScript. It would not have to specifically understand TypeScript, instead there could be a macro file for everything TypeScript. These macros would just pass things through.
Currently sjs doesn't support changing syntax, so this is probably not currently possible as described.
No. I never want to say TypeScript is bad or not. But I wan't to say is, Mozilla is trying to do something competitive with TypeScript or may be with CoffeScript.
A technical question: how do they get require()ing .sjs files to work, as opposed to compiling and require()ing the output? Is there some way to add hooks that change the behavior of require() to insert a compilation step?
Neat! With a little bit of googling, it seems CoffeeScript can do the same thing. That lowers the barrier-to-usage of compile-to-js languages enormously!
Now I'm looking at the sweet.js source where they register the extension, and there's some additional magic I don't recognize; is module._compile documented somewhere that I just can't find, or is that getting added somewhere in the sweet.js code?
I don't think it is. I seem to recall Isaac saying that he considers require.extensions to be a mistake, though I don't know if he meant the concept (extensibility) or implementation (register hooks under filename extensions). Either way, I think it's recognized that a lot of people enjoy and use the functionality so it's unlikely to go away.
Hygenic macros are limited to 'safe' operations. They let you extend the language without creating opportunities for incredibly complex and hard to debug stuff like you can do with un-hygenic macros, for example C macros.