5 ms·
CoffeeScript - JavaScript the Good Parts
- drats 16y ago"The first person to create a pleasant end-to-end system for programming JavaScript web applications wins the next five years of web development, period." That's the point which always got me going the first few times this language appeared on HN. A future developer with HTML5, video and audio, a library like sproutcore(note the recent news about Katz) in coffeescript matched up to a Sinatra-like base in CS running on node.js is going to be able to work like grease lightning. That world would be quite profitable in terms of the hosting opportunities (herokuish?), consulting and book deals. Much of it applies already to the node.js stuff I suppose. It's a pity Ruby or Python isn't in the browser as it would have the same multiplying effect (and add Python's vast libraries in other domains, at least on the server-side).
- deleted 16y ago[deleted]
- craigts 16y agoIronPython is in the browser at least... http://ironpython.net/browser/ http://ironpython.net/browser/
- chc 16y agoAnd it apparently doesn't require Silverlight. Interesting.
- icey 16y agoIt does require Silverlight (as do all DLR languages if you want them to run in the browser). Take a look at the js: http://gestalt.ironpython.net/dlr-latest.js http://gestalt.ironpython.net/dlr-latest.js
- chc 16y agoAh, thanks for the clarification. The way the page phrased it made me think you just needed to include that Javascript and it would work. There are language implementations like that, so it seemed plausible. That's too bad.
- deleted 16y ago[deleted]
- deleted 16y ago[deleted]
- steilpass 16y ago"cleaning up the semantics of broken JavaScript constructs" I actually like JavaScript. So what does CoffeeScript fix?
- jashkenas 16y agoLeaving features off the table and just talking about semantic cleanups, here's a few: * Switch statement doesn't fall-through by default. * Variables don't need to be declared with "var", and can't ever become global accidentally. * Equality is strict, using `===`, if you want coercive equality, you coerce the object yourself. * Loops that are used to generate functions close over their index variables, so that all inner functions don't share the final value of the index. This is the same problem that ECMAScript Harmony introduces "let" to solve. * Splats largely replace use of the "arguments" object, so you don't get bit by "arguments" only being a faux-array. * Comparisons can be chained, as in Python -- so you can write: "100 > x > 25", and have the answer be correct. * Multiline strings are valid without having to escape the newline. * And the big one: everything in CoffeeScript is an expression. Without having to use temporary variables, you can return the result of an if/else from a function, pass a comprehension (loop) directly into a function call, assign the result of a try/catch, and so on. I love JavaScript semantics as well. I think it has the cleanest object/function model out there, in terms of scripting languages -- but that's not to say there aren't parts that can use a little touch-up.
- steilpass 16y agoDon't get me wrong. As I am learning JavaScript right now I am only interested in the real fixes and not the nice to have features. Chaining comparisons, multiline strings, everything is an expression are IMHO "just" nice features.