Racket v8.5
blog.racket-lang.org
blog.racket-lang.org
After learning QBASIC and then quickly pivoting to Python thanks to the advice of my peers on 711chan IRC, I read ESR's "How to become a hacker" which lauded Lisp as this magical language that will forever change the way you think. Wow, powerful stuff for a teenager to hear. I want to have elevated, magical thinking. So I downloaded DrRacket.
Years later, after a few years that were the beginning of a career in software, I was in jail. I took some math classes where they gave us programmable calculators. I was fucking enthralled to be able to code again. I used TI-BASIC to make a little lisp interpreter, which I called Prison Lisp.
So many games, all the glee of a child in gradeschool (which is comparable to incarceration in many other ways). The people in my pod (shared living dormitory type thing) all asked to play the games, it was like having a gameboy.
Out again, mid twenties, start to code again. Somehow, a few years with no computers hadn't affected my ability to code in the least. I was actually much better than before. I start competing for gigs on Upwork, supporting myself pretty comfortably. I get married, start a family.
My wife loves coding challenges, but has no professional ambitions in tech. So I show her Racket, she loves it. My daughter is curious and wants a different lisp, so I show her Clojure. She hates it, sticks with Python. No judgement, I'm a lifelong Pythonista at this point.
I think back, to a friend from that 711chan IRC chat. He was learning Perl and I had recommended he try out something else, taught him a bit of Racket. I Googled him a year or so ago, turns out he ended up making several contributions to the Racket source code, and is a big shot electrical engineer. Good for him.
Life is so beautiful and strange.
"""
I was first introduced to Racket in college. It was the language of choice for a class on functional programming. I was immediately taken aback by the strange syntax and even stranger function names. But, I was also intrigued by the possibilities of functional programming and the expressiveness of the language.
I spent the next few years dabbling in Racket, picking up new tricks and learning more about functional programming. I even wrote a few small programs in Racket, but nothing too serious.
And then I got a job as a software engineer.
At my job, I use Racket every day. It is the language we use for all of our backend services. And, over the past year, I have come to appreciate Racket in a whole new way.
Racket is a strange language, but it is also a powerful language. It has a unique syntax that can take some getting used to, but once you get the hang of it, it is actually quite expressive. And, the functional programming paradigm is incredibly powerful for writing robust and correct code.
I am still learning new things about Racket every day, and I am sure I will continue to do so for years to come. Racket is a language that is worth learning, and I am glad I made the effort to do so.
"""
I am deathly afraid of the day an AI can be witty and invent something like Prison Lisp.
Practice makes perfect, but without previous experience in the host languages, it's completely understandable that the stack traces are a huge turnoff.
Plus she liked that Python has an "intuitive" feel, just looking at code it kind of makes sense, whereas Clojure looked crazy and meaningless unless you "knew". Which would have been mysterious and exciting for me, but was intimidating and dreadful for her.
You might also find this interesting: https://fsharpforfunandprofit.com/posts/recipe-part2/
Another thing - if you find you write small scripts in Python to read a file or parse some stuff or plot a couple things but these aren't for production, Racket has an amazing library of basically everything you could need. It's actually very practical as a scripting language.
It's been used by only a handful of companies that I know of (not counting Naughty Dog). Usually as one-person projects for which the person is allowed to choose fringe tools. A couple of those turned into major projects, but they still needed only a couple/few (super-capable) people.
Maybe the most interesting thing about the user base is the enthusiasts: as a resume keyword, Racket is effectively unemployable, and there's large opportunity cost in the current "tech" job market, of spending time on "technology" that doesn't facilitate job-hopping. So the enthusiasm seems to be for the genuine technical and community merits.
Or just fun. People also play and create free games on the Internet.
The one MAJOR downside, for me personally, is that a lot of the online presence cowers behind Cloudflare, the dreaded nemesis of privacy oriented text-based browser users. Why hide such a beautiful programming language behind so much ugly digital razor-wire and barking dogs?
What I'm really referring to is the community. Especially for things like forums and docs that need only be read-only. The fixation with Cloudflare bewilders me. Surely most technically minded people know it's a mixed blessing that offers as many ills as advantages?
With respects, I don't really want a conversation about the merits and madness of Cloudflare. Been there and done that. I'm simply pointing out, in case any Racket community people are here, that small details like this can have a serious impact on the uptake and enjoyment of something valuable.
I will note that we don't host our forums ourselves so those should not be affected.
https://mitpress.mit.edu/sites/default/files/sicp/full-text/...
Racket's default #lang isn't even compatible with SICP -- for example its cons cells aren't mutable. (Though it's perfectly fine to use Racket tooling with SICP or other Scheme books -- just set #lang scheme instead of #lang racket).
https://blog.racket-lang.org/2007/11/getting-rid-of-set-car-...
SICP is a fun way for a mathematically-strong person to learn a huge swath of computer science through experimentation and thinking about the results.
You have to not just _do_ the exercises but _understand the results_. It's not an easy on ramp.
You would be better off working through the Racket Guide [1] or one of the tutorials on their web site.
You can still learn those other languages, too. Learning enough about Racket to have some fun doesn't take that long.
The book hasn't aged all that well. But maybe that's just me. See https://www.cs.kent.ac.uk/people/staff/dat/miranda/wadler87.... for a more reasoned opinion.
The basics of computing are hard enough to learn when you aren't focused on type theory, lazy vs eager evaluation, etc at the same time.
See when that text was published. The author would probably argue for a slightly more modern language these days.
We've had one lesson. So far the format of me skimming SICP and giving him little challenges til he gets the content is working out.
As an adult sure it's great. Just do it. It's more scheme than racket though, but that's plenty.
Racket macros are important too and you won't get that from SICP.
One does not (ever?) finish learning racket. Even its creators are still researching it.
If you want to learn programming with Racket as the language How to Design Programs is great: https://htdp.org/
Or if you want an online course How to Code 1 & 2 are exceptional: https://learning.edx.org/course/course-v1:UBCx+HtC1x+2T2017/...
I second this. Greg Kiczales is an awesome teacher (and award winning computer scientist).
"Racket CS runs on platforms where native-code generation is not currently supported"
It looks like this means "Racket-on-Chez-Scheme"(i.e. "Racket >= 8.0") will run, but it won't use Chez Scheme it'll default to the old system: https://github.com/racket/racket/issues/3802No, that item means Racket CS runs on platforms where native code generation isn't available via a portable bytecode backend.
Racket has a nice runtime (much nicer than what you get with CL, though with some downsides (eg. memory usage is higher in Racket)), a large standard library, a comparable number of packages (~1800 on pkgs.racket-lang.org versus ~2100 on quicklisp), good editor support and a pretty great distribution story (via `raco exe`, `raco distribute` and the relatively-new `raco cross` for cross-compilation). All things that make it very practical in my book.
I'd like that, I absolutely adore this language.
I agree it is slower than the fastest CL implementations, depending on what you test, because some of the features present in the language make optimizations harder. The compiler is definitely also slow. As far as dynamic languages go, however, Racket is very fast in general and you can push it very far.
> use in production was not its main focus.
What makes you say this/what do you think it's missing as far as "use in production" goes? Instrumentation? Something else? I've deployed both production web apps and desktop apps with Racket, and the experience has been as good or better than other languages I've deployed similar things in.
Cool arrows in Dr.Racket though, nice macro system, and so on.
I would say the package story is more complicated in CL as a consumer of packages. As a package creator, they're similarly complex.
[1]: https://www.youtube.com/watch?v=wWj7OPvXGgA [2]: https://www.youtube.com/watch?v=7uGJJmjcxzY&t=495s
Obviously CL is going to win wrt perf. and interactivity.