5 ms·
Thanks for the Paper! I'm looking forward to spend my weekend with it. Normally I'm a huge fan of a philosophy of backwards compatibility. Clojure has shown th
by j-pb 5y ago
Thanks for the Paper! I'm looking forward to spend my weekend with it.
Normally I'm a huge fan of a philosophy of backwards compatibility. Clojure has shown that it is possible with enough dedication.
But I feel like it's a liability with the lineage you describe for Rust, the problem space was just too unexplored and vast, and the language has grown too large.
Joe Armstrong has a joke in one of his keynotes [1], that after you've written the first version of something you should throw it away completely, because you didn't understand the problem at all when you wrote your solution, and now you understand it a bit better.
A bit like how the web would be a much less ghastly ecosystem if we hadn't abandoned versioning for living documents which force every behaviour ever to interact, and god forbid be compatible, with one another, in a combinatorial hairball.
Modern browsers would be less unwieldy if they just shipped 30 different rendering engines, one for each major revision, than ship a blob that purportedly is able to still render everyones Dogs website from the 90s (which is not true of course, it's just that nobody from the 90s is here to complain).
It's a bit ironic that Rust fell into the same trap that caused the complexity that inspired its inception in the first place.
Maybe once the major "features" for safe system programming were identified a new language (revision) should have started with only those features at its core. I fear that if such a language were to crop up now, Rust would just eat its children.
[1]: https://www.youtube.com/watch?v=lKXe3HUG2l4 https://www.youtube.com/watch?v=lKXe3HUG2l4
- steveklabnik 5y agoAny time :) We didn't have backwards compatibility in those days. Radical change happened. I personally think of Rust as being three or four different languages before 1.0 happened. The problem is the exact same as others have said; doing that degree of breaking change all at once is effectively starting a new language project, which means that you also throw away all of the community and things that they've built so far. Also, Rust does have a kind of "core" semantics, that is, MIR. You can't code in it directly, but it is a rich target for verification and analysis tools.
- j-pb 5y ago> throw away all of the community and things that they've built so far. The sad truth is probably, that Rusts complexity is just a mirror of the entire industry. If we, as a profession, placed a lot of value onto tiny, simple, yet well thought out (and therefore powerful) things, rewriting everything once a year wouldn't be as much of a problem. No codebase would have more than 5kLOCs, Browsers would only do layouts with the thing we build after learning from Flexbox, Grid, and Column, and Rusts language spec would fit into a white-paper like Scheme did. At least Rusts borrow checker uses such a tiny, well thought out, piece of code with its datafrog engine.
- steveklabnik 5y agoIt sounds like you'd like the work Alan Kay was doing with VPRI, though in my understanding that is over now.
- j-pb 5y agoDefinitely! Although I'm not sure if Morphic[1] is the way forward for UX on the web, despite it only being 10kloc. XD [Anybody stumbling upon this comment, and wondering what Alan Kay is/was up to, this might be a good philosophical starter: https://www.youtube.com/watch?v=FvmTSpJU-Xc https://www.youtube.com/watch?v=FvmTSpJU-Xc] 1. https://lively-kernel.org https://lively-kernel.org
- mwcampbell 5y agoThe problem with such a focus on smallness and simplicity, particularly at higher layers of the stack, is that it requires throwing out lots of people's must-have features. For me and my blind friends, that feature is a screen reader. For someone else, it's right-to-left or bidirectional text rendering (hello TrojanSource). For someone else, it's complex writing systems or support for Unicode characters outside the Basic Multilingual Plane. And so on. I doubt that any UI framework that fits in 5000 lines of code or less would support all these things. Sure, some of the complexity in the industry can be eliminated, but some is truly necessary. One good thing about Rust mirroring the complexity of the industry is that at least one Rust GUI toolkit, Druid, is taking accessibility and internationalization seriously. (Disclosure: the team at Google that's funding a lot of the work on Druid is also funding me to work on accessibility.)