-
Notifications
You must be signed in to change notification settings - Fork 4
CS2 Discussion: Project: Progress as of May 2017: 2.0.0-beta2! #83
Comments
Congrats on another release. It really seems to be getting close. I've been trying out each new version evaluating the changes in my personal projects. Also since I am technical lead at a company where we are heavily invested in Coffeescript using it exclusively on all our ongoing servers, web applications, and mobile apps in production for the past 5 years, including 120+ shared modules. To be fair I've considered myself pretty lucky up til now. However, the compiler error on bound fat arrow class methods is going to be felt as its widespread and not backwards compatible. This is the first change that will require maintaining multiple versions through the course of migrating making it no longer trivial. On the positive I don't need to concerned(watching like a hawk) for other breaking changes anymore as, for example, if it was decided the spread operator should only work in the ES direction it wouldn't be any more disruptive than this. I understand the necessity of these changes and if anything I think this is actually freeing in it's gotten to a point where maybe it's ok to be less concerned with breaking existing coffeescript if it's better for the language. Just food for thought. Edit: Above was my initial reaction. Having converted a simple/trivial project I have a new perspective: #84 |
@ryansolid thanks. Yeah, it always sucks to remove a feature, and removing this one doesn’t improve the language. It was basically done because fat arrow class methods don’t exist in ES, and any invisible machinations we could do to support them (the way we still support executable class bodies) led to varying differences from the 1.x behavior, such that there would be subtle bugs that would be difficult to troubleshoot. It seemed safer to remove them entirely and throw an error, rather than having your code execute in unexpected ways. See http://coffeescript.org/v2/#breaking-changes-classes. It advises refactoring to put such methods in the constructor: class B extends A
method: => # Throws a compiler error
constructor: ->
super()
@method = => # This works |
Just wanna pop in and say that both these announcements and their contents are amazing. Applauding from the peanut gallery, thanks so much for all your incredible, hard work @GeoffreyBooth ! |
Yeah. If you move all the code inside the constructor it should work. Actually does that support inheritance like the following?
Besides being really awkward having to refactor thousands of classes (and mean every single one of them and pretty much every method), I do wish there was a better solution since to me this actually changes what Coffeescript is. It's more than a syntax change. Basically it's up to the caller instead of the declarer to bind this in general. If I had written back when @rattrayalex first posted about what Coffeescript and what should/couldn't change etc, before the current leadership really got in full swing I would have said:
Personally for me it was my 2nd most appealing Coffeescript feature. Obviously the whole list is pretty breaking. But out of these this affects projects most on a macro level (besides obviously white space being a requirement to compile any of it). Especially conceptually, I've been training developers for years not having to worry about the this context at call time. Variable declarations/returns are contained with the routines that leverage them and are localized. Wherease syntax changes often will keep semantic meaning. I will have to kill the pattern eventually or be forced to forever have classes completely nested in their constructors. Right now picture trying to sell a new developer on Coffeescript and you show them that. Obviously EcmaScript is no better in that regard, but I suspect I will hit several more gotchas as I explore this change since all the existing code assumes it works a certain way. I will continue for the time being evaluating this, but I do fear this will be a non-starter. The effort to update and refactor over time would actually be more complex than introducing ES6 since I'm not sure it's possible to be running multiple coffeescripts at the same time and if the effort to migrate is sufficiently large enough that it couldn't be done over a short enough period to realistically manage the code the split. This is no longer a find/replace or a localized one over in every file. It will require considerations spanning multiple modules. |
Yes! I have to give lots of kudos to @GeoffreyBooth for stepping up to drive CoffeeScript forward!
I personally appreciate the constant focus and follow through. It takes a lot of patience to make everything happen while still being open to (and championing) useful changes.
I always find the status updates super helpful!
|
Thanks @rattrayalex and @mrmowgli 😄 I’m a technical lead/project manager in my day job, and that feels a lot like this 😄 Speaking of which, @ryansolid I feel your pain. We should probably move this discussion to #84. If I could just ask one more general question here though, what percentage of your problematic bound class methods need to be bound, i.e. what percentage reference Anyway I ask because obviously, if the method doesn’t reference |
I’m hoping that there might be only one more beta before we release 2.0.0. I’m also considering trying to improve our support for comments, allowing block comments anywhere and preserving end-of-line comments. This would potentially also be a breaking change, although also minor, because the currently-preserved block comments might not be preserved in the same places in the new version as before. I could use some help on this (see jashkenas/coffeescript#4541) if anyone is interested. In particular, I’m trying to figure out how to preserve extra properties attached to a token in |
I'm probably opening a can of worms by asking this, but I mean well. From an aesthetics point of view, what are the chances of being able to omit
|
@objectkit That would cause ambiguous syntax. |
Compilation issue. Got it. Thanks for the clarification! You're doing a great job btw @GeoffreyBooth. |
Closed via #86 |
Migrated to jashkenas/coffeescript#4976 |
Hey everyone,
CoffeeScript 2.0.0-beta2 is released! Install it via:
npm install coffeescript@next
Since the last update, as of 2017-05-16 the following has been merged into the jashkenas/coffeescript
2
branch and released in 2.0.0-beta2:require
d in builds intended for non-Node environments such as those created by Webpack or Browserify, thanks to @akfish.coffee
command prefers the locally-installed version of CoffeeScript over the global one, allowing you to have separate versions installed in a project versus globally, thanks to @GeoffreyBooth.return
andexport default
can now accept implicit objects, thanks to @GeoffreyBooth.I’ve moved the full honor roll to a wiki page.
I went through all 300+ open issues and whittled them down. Over a hundred were closeable thanks to the updates of CS2 🎉 and any proposals more than a year old I simply closed for lack of interest. In one PR I managed to close all ten outstanding issues related to documentation. Many other issues had simply been overlooked, and led to several quick one-commit PRs for fixing simple bugs. Many more concerned using the
coffee
command to run scripts and things not working as expected, which I closed because I think expectingcoffee
to be as full-featured as thenode
command is too much to ask of us. Issues like those, that I consider to be out of scope but could be fixed if someone wants to take the time, I tagged aspatches welcome!
.This has reduced our open issues count to 68 at the time of writing, which was a worthy effort IMO because the more manageable we can keep that number the more likely bugs are to get fixed (and the less abandoned the project looks to others). I also prefixed each issue with common keywords like “Invalid JS” or “Lexer” so that bugfixers can search for related issues more easily. In particular I used “Lexer,” “Grammar,” “Nodes” and similar because those relate to
lexer.coffee
,grammar.coffee
etc. in the CoffeeScript codebase, so if you’re fixing one bug in one of those files you should look for any other open bugs that might be nearby. Once you have an understanding of how a file works, you’re in a good position to be able to fix multiple bugs in it.I also tagged a handful of issues
priority
. If people can help fix these, your efforts would be greatly appreciated!And please try 2.0.0-beta2 in your projects! And let us know if you encounter any issues, after first reviewing the breaking changes. If you think there’s a bug, please open an issue with “[CS2]“ in the title. Please don’t comment bug reports on this thread. Thanks!
The text was updated successfully, but these errors were encountered: