Hacker News new | comments | show | ask | jobs | submit login

ES6 has eliminated most (though not all) of the pain Coffeescript solved. I work on a large code base that went from Coffeescript -> Typescript (mostly manual, some decadfeinate), and typesafety has been a huge boon for our developers. For smaller teams/codebases, you might be happy sticking with Coffeescript.



I see ES6 or especially Typescript as essentially a recreation of ES4/Flash AS3, with some renaissance-era Javascript footguns attached. You've got classes, various class based OO features, optional typing major industry support, probably improved performance coming soon, etc...

Coffeescript was a bit different. It meant fewer lines of code, not more. It had significant whitespace and some other Python-inspired idioms like array comprehensions and object comprehensions. Most importantly, Coffeescript was a new language and didn't have to re-implement deleterious Javascript features like the == vs === distinction, undeclared vars leaking to global scope, baroque keywords like "with", etc...

That said as others have pointed out, ES6 did borrow many good features from CS and CS is slowly dying. Fortunately other languages like Elm and, to a lesser degree, Reason have offered even more compelling "footgun free" alternatives.


> It had significant whitespace and some other Python-inspired idioms like array comprehensions and object comprehensions.

Modern JS has standard HoFs (on arrays) and an iteration protocol.

> undeclared vars leaking to global scope

Strict mode (which syntactic ES6 features enable by default e.g. class contents are in strict mode always).

> baroque keywords like "with"

Which can trivially be linted away.

> ES6 did borrow many good features from CS

Not really from CS, rather from similar (much older) sources CS got them from.


HoFs are not array comprehensions and array comprehensions aren't supported in ES6.

https://gist.github.com/sleepyfox/1879845

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...


> HoFs are not array comprehensions and array comprehensions aren't supported in ES6.

Neither of these is a claim I made so I'm not sure why you feel the need to point these out.

However native HoF obviate much of the need for comprehensions, especially combined with terser "arrow functions". Languages like Smalltalk or Ruby do just fine without comprehensions for instance.


If you quote the fact that coffeescript has significant whitespace, list comprehension and then in response say that javascript has HoF and iteration protocol, it does sound like youre trying to counter the point, so it seems like for someone to bring up the fact that they are not identical is fair game.


I inherited a coffeescript codebase a few years ago and found that it had footguns of its own due to a weak transpiler.


You're looking at the wrong bits. ES6 has delivered vast FP improvements and awesome async support.


The only async support in ES6 were standardised promise objects and arrow functions (which cleanup the callback-heavy promise-based code). As well as extensive promisification of browser API but that's not directly ES6.


Uh, did you notice the "async"/"await" keywords?

EDIT: My mistake. I learned something today.


That's not ES6. It's ES2017, aka ES8.


It's a bit presumptuous to tell me what bits to look at and then tell me about FP improvements when I just recommended Elm :D


So want typing support in CoffeeScript...


That was a big part of my motivation in building http://LightScript.org as it was clear that was never going to happen with coffee.

Currently works with Flow syntax, but not yet the actual flow checker - would love help making that happen!


That'd be particularly difficult as CoffeeScript doesn't have var declarations.


Partly. You can define them if you want it. You can even add type support with FB Flow.

CS developers sometimes define variables because of hoisting.

Obviously, variables are defined. In CS they are simply defined for you automatically. That said, you can obviously do it yourself if you want. But you will not be able to use additional tooling around `let` and `const`


Can one use FB flow with CoffeeScript? Comments I saw on github indicated that the CS compiler mangled it, I think due to how functions are named and stripping comments?


I personally don't really like types, but I've successfully used FB Flow with CS and it was fine.


Got any docs/writeup for this? Any tips/tricks/hacks?




Applications are open for YC Winter 2018

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact

Search: