Small disclaimer
PureScript is my favourite programming language and I use it every day and wouldn’t want it any other way.
I’m extremely grateful to all original authors and maintainers and thank them from the bottom of my heart for the time and toil they’ve put into this stellar project for free.
That said, this post contains negative feedback.
There’s a good chance I’m only seeing a fraction of the full picture in my complaints in which case I’d be glad if somebody could paint in the missing bits in a response.
ES modules as an example
I and many others have been excited about prospect of the PureScript compiler to produce ES modules. After a quick glance I believe it is the feature with the most upvotes.
The great news is that there’s a pull-request that adds this feature to the language, however there was a decision that before this feature would be introduced there’d be a release of 0.14.
The reasoning was that apostrophes are not allowed in foreign modules anymore with ES Modules.
Therefore, by not introducing ES modules, the compiler can issue a warning about this change before it will throw an error when ES modules will be released in the next major version update.
I believe this strategy was taken because of its user-friendliness. I personally see more negatives than positives to it, though:
The pros of this strategy are:
- Users can more easily get the other features in 0.14
The cons of this strategy I see are:
- Users cannot produce ES modules
- The open PR needs to be rebased when it’s decided 0.14 is EOL
- Maintainers have to touch the codebase multiple times (first introduce the warning, then turn it into an error)
- The original author of the PR may lose momentum jeopardising the inclusion of the feature altogether
Please let me know about all the pros (and potentially cons) that I’m not seeing here.
There are also a few more observations that I think are interesting here:
Users need to expend the same amount of work to produce ES modules in both approaches (and I think it’s also not particularly difficult in this case)
Users who are not ready have the choice not to update. On the flipside, there’s currently no way to opt in to the feature (in a 0.15 beta or something).
I think the cons become much worse as a function of time that elapses between releases.
It’s also exacerbated by uncertainty. I don’t think anybody knows when 0.15 might be released.
The PR adding ES modules is 500 days old today.
What steps are required to release a binary of the PureScript compiler that produces ES modules and how can one help with it?
More generally
I think the main underlying issue here is lack of transparency/predictability.
It’s not clear why certain features make it into a release, it’s not clear why certain features have higher priority than others.
It’s my understanding that moving breaking changes to later releases is mostly an altruistic move to make things easier for the community and doesn’t necessarily make things easier for compiler maintainers.
That leads me to believe that my preferred release strategy (which is: release early release often) might simply not be clear to the maintainers, hence this post. It wouldn’t be the first time I’m the odd one out.
So what now?
Having witnessed the release of 0.14 it looked like there were many chores that didn’t require much knowledge of the compiler but could have been “crowdsourced” to the community.
I can’t add support for GADTs to the compiler but I can support with menial tasks which I’m sure is the case for many others. Maybe certain tasks could be handed to the broader community (upgrading contrib libraries, creating package sets, updating the book?, updating pursuit?).
I have a few more ideas about how to take work off the core team but I might be missing the point in the first place so I’ll stop here.
Thanks for reading this much,
Mark