5 ms·
I was looking at some of my old repos today. Enjoyed the nostalgia. Lots of CoffeeScript there. I had to switch to ES and then TypeScript because CoffeeScript w
by AriaMinaei 7y ago
I was looking at some of my old repos today. Enjoyed the nostalgia. Lots of CoffeeScript there. I had to switch to ES and then TypeScript because CoffeeScript was abandoned at the time and I was stretched over other projects to be able to help maintain it.
Reading my old code, I was surprised by how clean it looks. How easy it is to digest. There is a certain sense of calm when your brain doesn't have to process all the visual clutter of a C-style syntax. I miss that.
I wish I didn't have to choose between CoffeeScript and TypeScript.
TypeScript first and foremost is about type safety and tooling. Its architecture is largely syntax-agnostic. It operates on the AST, so the parser and code generator can be swapped for a different syntax.
CoffeeScript is all about syntax and does not (and should not) concern itself with most of the semantics.
They could theoretically be used together if TypeScript simply allowed custom parsers/generators/formatters to be plugged in.
This would work with ESLint and other JS tooling as well. I did a POC on that a few years ago [0].
[0] https://github.com/gkz/LiveScript/issues/821#issuecomment-183640299 https://github.com/gkz/LiveScript/issues/821#issuecomment-18...
- switz 7y agoYou just gave me an idea.. because we've shared a similar experience. I really miss the elegance of Coffeescript. ES6 is great, Typescript is great, but sometimes I feel like I have to visually parse a lot of static cruft to read the essence of the program. What if one's editor had a toggle hotkey to hide typescript typings. Maybe you could turn it off to visually parse the program real quick, before turning it back on to edit it. Hmm...
- AriaMinaei 7y agoYou're getting in the realm of "projectional editing." It's a fascinating idea: https://news.ycombinator.com/item?id=15534555 https://news.ycombinator.com/item?id=15534555
- minxomat 7y agoYep. You can take MPS today and implement an AST projection that looks like whatever you want. No parsing involved, impossible to even write syntactically invalid code (since it is not code you're writing, but an AST projection).
- switz 7y agoI love reading about stuff like this, thanks for sharing. Developer UX still has a lot of room to grow.
- gherkinnn 7y agoInteresting. I sometimes wish to only see the types and get rid of the rest.
- droidist2 7y agoWhat about instead maintaining the type definitions in a separate file, and then having the editor add in the type hinting?
- sa46 7y ago> How easy it is to digest I’ve not had this experience. I’ve found the ambiguity in coffeescript a maddening adventure in syntax confusion. - function call syntax doesn’t need parens except if a 0 parameter method - commas are largely optional both in arrays and function parameters. How do you parse: [f, f(), f a b c] - implicit returns are a terrible idea. - the @ syntax refers to either a ‘static’ method or an instance variable depending on the context. - I have to do a double take for the object literal syntax every time
- AriaMinaei 7y agoDon't want to invalidate your experience. For me though, I rarely struggled with ambiguity. > function call syntax doesn’t need parens except if a 0 parameter method Function call syntax doesn't require parens so to make multi-line calls punctuation-free. Especially if some args are objects. > commas are largely optional both in arrays and function parameters. How do you parse: [f, f(), f a b c] Well commas are not optional. > implicit returns are a terrible idea They're especially elegant in writing declarative code. It takes some getting used to though. > the @ syntax refers to either a ‘static’ method or an instance variable depending on the context. Agreed. These are all tradeoffs though. For me, they struck the right balance between ambiguity (very little) and expressiveness. LiveScript in comparison was much more sugary (which I preferred): https://livescript.net/ https://livescript.net/
- k__ 7y agoHaha, yes. LiveScript should have won. It were awesome times. Well, guess it's Reason for me now :D
- Jare 7y agoI was very excited about CS when I learned about it, and in my initial tests found it really pleasant to write. However, before committing to using it more, I went and read some other projects written in it. At that point I decided that the reading experience was confusing, and the lack of "visible" syntax elements to guide me drove me nuts.
- dagw 7y ago
- zachrose 7y agoIf you want the quiet syntax of CoffeeScript and even better type safety than TypeScript, you might be interested in Elm. https://guide.elm-lang.org/ https://guide.elm-lang.org/
- AriaMinaei 7y agoI love Elm. Never got to use it in production though. Can't afford to get even further from the metal :)
- The_rationalist 7y agoElm is not compatible with js library or at least it's not seamless.
- zachrose 7y agoYeah well, sometimes js library isn’t compatible with js library either
- k__ 7y agoCS is what happens when you let Ruby devs write JS. TS is what happens when you let .net devs write JS. Let's see how that turns out in the long run.
- Waterluvian 7y agoTypeScript is so syntax heavy. But my perspective is that there are costs incurred at time of development and maintenance in return for stability at runtime. And I think the latter is far more important if you're writing production code. When it comes to experimentation, I love Javascript and Python because of how fast they are to write when you're not thinking hard about types. Then it's just discipline to know how to promote experiments to production code. TypeScript is beautiful because you can just turn it on and add them in. Same with Python type hints.
- pointerpointer 7y ago> Reading my old code, I was surprised by how clean it looks. How easy it is to digest. There is a certain sense of calm when your brain doesn't have to process all the visual clutter of a C-style syntax. I miss that. Indeed, Coffeescript is one of the finest languages I wrote in. Consider that 95% of the time we are reading code, what is the win of TS with a linter? The TS codebases I've worked on really hurt my eyes and brain, and that for some stupid website where type safety hardly makes any difference at all. And all those average web developers I've worked with bragging about type safety while the code they are producing is full of wrong constructs, bad naming, dependent on heavy tooling, etc..