29 ms·
Yeah Elm has had a very strange arc, but I think calling it a research language is right. There was a period where it was heavily evangelized. Many blog posts
by brokencode 2mo ago
Yeah Elm has had a very strange arc, but I think calling it a research language is right.
There was a period where it was heavily evangelized. Many blog posts were written and talks given, and there was a lot of enthusiasm and adoption.
Then the author just kind of disappeared and the project stalled.
Which of course he had a right to do since it’s his project, but I think he should have set expectations better from the beginning.
The heavy evangelism helped spread the ideas, but also set up developers to feel blindsided and abandoned.
- Aurornis 2mo ago> Then the author just kind of disappeared and the project stalled. There was more to the story than that. They made some major breaking changes in v0.19 that broke a lot of apps and left no path for them to continue with Elm, then dug their heels in when the community protested. If you had an app at your company that used the features they decided not to allow any more, you either had to start deciding which fork to follow or start planning to rewrite your app in something else. That evangelism turned into an uncomfortable gaslighting where half of the community was trying to tell you that this change was what was best for the language and that you didn’t really need that feature anyway. There were several forks but I don’t know if any got traction. It felt like an already small community was fracturing into even smaller communities right after alienating a lot of people.
- adastra22 2mo agoWhat feature is that?
- arthurbrown 2mo agoOne form of JavaScript interop. Instead of being able to write bindings directly to native code, you had to pass messages through "ports" instead. https://discourse.elm-lang.org/t/native-code-in-0-19/826 https://discourse.elm-lang.org/t/native-code-in-0-19/826 Personally, I was sad to see signals and FRP go in 0.17 https://elm-lang.org/news/farewell-to-frp https://elm-lang.org/news/farewell-to-frp
- wavemode 2mo agoLots of things were disallowed in 0.19, but probably the most disruptive were that custom native modules were disallowed (which basically means that, only certain official packages would now be allowed to directly call native JavaScript), and the package manager was locked down (which means that you can only install packages from the official elm repository, not GitHub or anywhere else). You can still indirectly call native JavaScript, in a message-passing kind of way (via Ports or custom elements) but these changes were still really disruptive to many codebases.
- crote 2mo agoOn top of the already-mentioned JS interop breakage, Elm 0.19 also dropped native Websocket support[0]. The API had issues (fair), so it was dropped rather than improving it due to wanting to do it perfectly (okay, I guess), buuut due to the JS interop restrictions this meant that 3rd-party experiments or alternatives were impossible (??), which meant that any use of Websockets was in practice now completely impossible! If I recall correctly something similar happened to other core libraries. This "nobody is allowed to do this until Evan himself has made time to come up with a blessed solution" style of development left a lot of people quite disappointed. Elm was marketed quite heavily as the best thing since sliced bread and the future of front-end web development, but in reality it turned out to be just Evan's toy language which you could look at but weren't allowed to touch. Which is of course allowed, but it does rapidly kill any kind of community around it. [0]: https://github.com/elm-lang/websocket https://github.com/elm-lang/websocket
- hombre_fatal 2mo agoThis really overstates the problem and situation. Synchronous interop was removed from Elm. That sucks for synchronous stuff and anything too trivial to be worth async interop. But async interop is still available. Anything networked, like websockets, is a natural fit for async interop. i.e. a Send(Req) | Recv(Res) port. It's fine to be mad that a "BDFL" decided on a different set of trade-offs than your preference, but that's what happened. It's also a learning lesson for people who thought that a tiny, pre-v1.0 ecosystem that already had breaking changes would never break again especially in a way they disagree with. I think it's time to just accept the lesson.
- crote 2mo agoI'm not mad, I'm disappointed. Elm was quite promising prior to this, but 0.19 essentially killed it. And the problem isn't just that sync interop was removed. That would've been fine. It's the double-whammy of 1) killing sync interop, 2) making async interop libs impossible, 3) still allowing it for "blessed" libraries, and 4) gaslighting everyone else that they were Holding It Wrong. Breakage is totally fine, I never expected anything different from Elm. But community-killing permanent core feature removal is a bit much, is it not? I luckily never invested too deeply into the ecosystem so there wasn't a lot dor me to "learn", but it sure ruined any chances of me - and with me I bet a lot of other people - ever looking at an Elm 1.0 or Elm++, and considering the valuable insights gained from TEA that really is a shame.
- tpoindex 2mo agoFor a non-fork that has appeared recently, Sky: https://news.ycombinator.com/item?id=47662116 https://news.ycombinator.com/item?id=47662116 It's vibe-coded (hmmm), Elm syntax, server-side, SSE, compiles to Go, Go FFI, TEA, web/cli/TUI/desktop targets, consistent Db, Ui - a lot of things to like if it all comes together.