Show HN: EmberScript - Ember.js Infused JavaScript
emberscript.com
emberscript.com
(Yes, we could always do the same thing, and often have, but not in web-world.)
I'm personally looking forward to stuff like "CoffeScript, a 5 year retrospective" etc, to show how safe all that stuff ended up being long term
Languages with a more flexible syntax probably don't need it as much, of course (lisp, forth, SmallTalk, tcl etc.).
If the aim is to bake in syntactic sugar for different constructs within Ember that are awkward in plain CoffeeScript (and there are a few), wouldn't creating a CoffeeScript version of sweet.js[1] not be a better idea (I have no idea if such a thing exists already)?
http://github.com/shaunxcode/jsedn and http://github.com/shaunxcode/swedn also work currently. Right now they are naive e.g they just emit a call to parse at runtime, when I get the time they will actually be more clever and, well, actually compile at compile time hah.
Recently I have been toying with adding type annotations so I can easily port a code base to typescript but have them be entirely ignored by coffee.
One side note is that we have discussed adding support for sweetjs as right now these are definitely DSL hooks and not hygenic macros. In fact I would go so far as to call these toothless macros e.g. it is up to you to chew the food (parse) and swallow it (emit valid js).
It used the `class` construct instead of building its own Object.extend class system like most libraries do. Not only is that simpler, its much more powerful than the standard 'prototype = object literal' approach as CofeeScript classes have executable class bodies, so you can build macro-like class-level methods similar to ruby:
class Alfred.Todo extends Batman.Model
@persist Batman.LocalStorage
@encode 'body', 'isDone'
@validate 'body', present: true
From my brief glance at Ember it seems like the pattern to add macro behavior is to wrap property values in calls to things like `Ember.computed` which looks pretty clunky.In general, however, from the end user's perspective, why is using something like sweet.js better?
# mycode.coffee:
"use parse_transform('observers.coffee')"
class Gradebook
+observe scores
gpa: ->
sum(@scores)/@nGrades
Imagine the interesting (or perhaps chaotic) ecosystem that would develop if this kind of thing was encouraged?