Racket is an amazing language for prototyping ideas that you don't understand yet.
At $dayjob I'm using it to test what novel geometries of deep learning models would look like. Being able to redefine any part of the stack for any reason is a superpower you don't know you need until you do.
A great place to start is the little learner which holds your hand until you get opinionated about what the underlying primitives should look like. E.g. what if we used sparse tensor representation?
That sounds kind of amazing. But you're not actually doing the machine learning in Racket, are you? Is your Racket code generating other code like PyTorch?
This is a complete tangent, but since you mentioned MNIST: I accidentally discovered Tsetlin machines this week when someone on r/Julia asked if anyone with an AMD GPU could run the benchmark in their package called Tsetlin.jl. I've got an AMD GPU so I was happy to oblige. Then I looked at what the benchmark was doing: it was training an MNIST classifier to 98% accuracy in 9 seconds - that seemed like a couple of orders of magnitude too fast. I was flabbergasted and wondered what the heck this thing was and that's when I learned about Tsetlin machines. I went on (with the help of Claude) to implement one in an FPGA and again was flabbergasted when it only took 2k LUTs to implement a Tsetlin machine for MNIST classification in hardware.
Well yes, you have to use one of the newer mnist variants these days if you want to get anything meaningful. A linear classifier gets something like 87% on the original one.
Racket is used across CS programs that have adopted the How to Design Programs book [1] (some schools do not use the original book, just the textbook for source material).
See https://blog.racket-lang.org/2026/05/racket-v9-2.html for the release announcement and highlights.
If you are using rackup you can upgrade with `rackup upgrade`
Don’t forget to migrate your packages with raco pkg migrate 9.1
At $dayjob I'm using it to test what novel geometries of deep learning models would look like. Being able to redefine any part of the stack for any reason is a superpower you don't know you need until you do.
A great place to start is the little learner which holds your hand until you get opinionated about what the underlying primitives should look like. E.g. what if we used sparse tensor representation?
https://scottlocklin.wordpress.com/2024/11/19/lush-my-favori...
As such pretty much all numerical optimisations are useless for my work. Racket however chugs along happily, if slowly.
That mnist takes 30 minutes per epoch isn't a worry when I don't even know what vector addition should look like.
[1] https://en.wikipedia.org/wiki/How_to_Design_Programs