4 ms·
The big news here is that Racket now can run threads in parallel. While there were ways to get parallelism before (like places), this is much more lightweight a
by kryptiskt 11mo ago
The big news here is that Racket now can run threads in parallel. While there were ways to get parallelism before (like places), this is much more lightweight and familiar. Anything that expands the areas where Racket is viable is good news to me since I like writing stuff in Racket.
- ModernMech 11mo agoI feel like version 9 just getting parallel threads kind of contradicts the homepage when it says Racket is "Mature" and "Polished".
- spdegabrielle 11mo agoThis is addressed in the blog post linked from the release announcement: https://blog.racket-lang.org/2025/11/parallel-threads.html https://blog.racket-lang.org/2025/11/parallel-threads.html
- ModernMech 11mo agoThat post is even more worrisome! > To address larger problems with the implementation and to improve performance, we started in 2017 rebuilding Racket on top of Chez Scheme. Rebuilding took some time, and we only gradually deprecated the old “BC” implementation in favor of the new “CS” implementation, but the transition is now complete. Racket BC is still maintained, but as of August 2025, we distribute only Racket CS builds So they're billing Racket as "Mature Practical Extensible Robust and Polished". Of those I will give them "Extensible" and "Robust". You can't say you're mature and polished and practical if you've just rewritten the entire thing and deprecated the legacy codebase to support new features that have been in other languages since forever. Maybe they were talking about Racket 8.0 and didn't change the website yet?
- nesarkvechnep 11mo agoHow rewriting something internally makes Racket not mature? Sounds like refactoring to me and with an extensive test suite there's nothing to be hysterical about.
- ModernMech 11mo agoMaybe I just have a different working definition of these words. To me "mature" means "fully developed" and "polished" means "achieved a high level of refinement". To me, rewriting it all to introduce a major feature that fills in a longstanding hole in the language doesn't say "mature and polished". Because often times many bugs are introduced into a codebase on a major rewrite despite extensive test suites, especially at the interfaces between features. Typically people might prefer a mature codebase to one that's just been rewritten precisely because it hasn't been vetted over years. "mature rewrite" sounds like an oxymoron to me, and I guess no one else agrees but I find it strange. That is all.
- shakna 11mo agoThe rewrite started in 2017. Fears about refactoring introducing bugs are fine and valid - but after eight years, haven't really happened. Seems the extensive test suite did its job. This isn't a case of Python 2 v 3. Packages weren't broken en masse. The API remained stable. If anything, the rewrite has proved that it is mature. Because they could perform a refactor without breaking everyone's everyday.
- gus_massa 11mo agoI agree. I remember very few bugs caused by the rewrite, but I don't remember recent ones. For example, I found a bug running the tests of the r7rs package, it was simplified to a bug in "plain" Racket and later fixed, 3 days after the initial report. It was in June 2019 https://github.com/racket/racket/issues/2675 https://github.com/racket/racket/issues/2675 Note that at that time, the default version of Racket was he old one (before the rewrite).
- neilv 11mo ago
- nothrabannosir 11mo agoThey might be making a distinction between the language and the current implementation. In fact I would call going through multiple different fundamental implementations without changing the semantics, an argument in favor of the maturity of the language.
- kryptiskt 11mo agoIt's not at all strange, Python and OCaml are mature and polished and they still have tackled the same issue very recently.
- empthought 11mo agoWait til you hear about NodeJS not supporting parallel threads until version 12...
- jetti 11mo agoWhat kinds of things do you write in Racket? I’m a clojure dev and so I’m a big fan of lisp. I’m just curious what kinds of projects you would use Racket for
- bmitc 11mo agoI'd say anything you use Clojure for except for Clojurescript.
- stOneskull 11mo agoi'm also curious.. do you use clojure because of jvm? i want to learn some kinda lisp, but there are so many choices. why not just common lisp or the one with emacs.
- lucyjojo 11mo agopersonal case - clojure works on the jvm, or without (babashka, technically graalvm i think), or in the browser (clojurescript). i think there is a .net implementation, not sure. then you get clojure inspired languages that are quick to learn if you know clojure (janet, C runtime, fennel on the Lua platform). And soon a clojure optimized for integration with C++ (Jank). Bonus, clojure is relatively simple language. (it's a small language where most things are immutable, with a small-ish set of functions operating on a small-ish set of provided data structures). common lisp is cool but looks way (waaay) more complex. so you will need to invest way more to learn it (might be worth it, dont know). i technically "learned" it but never felt the impetus to use it. i occasionally do some stuff in emacs lisp. but i'll mainly be running clojure & babashka (and rust). currently refreshing my ocaml, and learning ada (this thing is great, should have learned it a long time ago). also nim.
- zelphirkalt 11mo agoWhile reading the release notes, I was also surprised, that they finally have this kind of multi-threading. I knew about places, but they were kind of inflexible, as you couldn't easily send a lambda in Racket, and serializable-lambda was infectious, so one ended up having to pre-define all logic and at runtime only sending data not functions to other places, which was a shame. One could not really build a thing that distributes work via multiple places with that. Or at least no one managed to do that and no one could tell me how to do it. I hope that with the new concurrency stuff this is now possible, even if it may not be as conceptually clean as places were supposed to be. Ultimately, multi-threading is one reason, why I mostly used GNU Guile, instead of Racket in recent years. Guile's story of using multiple cores is much more solid, using its futures and possibly fibers via a library. I have used futures, which are backed by a pool of threads underneath, to implement a toy parallelized decision tree algorithm/model, that had linear (or close to) speedup.