Racket
Language itself
Racket is a dialect of /Scheme, which is a member of Lisp family. The language is dynamically typed, multiparadigm, /FP capable. Racket has an interactive REPL, a cross-platform compiler, even its own IDE, Dr.Racket.
For now, the Racket team is migrating the language’s core to the Chez Scheme so Racket will be pretty fast someday!
Language-Oriented Programming
The core idea behind the language is “Language-Oriented Programming”: you are designing and implementing the domain-specific languages just for every domain you work with! Here is a great talk about LOP: “Lambda World 2019 - Language-Oriented Programming with Racket”".
Also, there is a book “Beautiful Racket” just about the LOP.
Batteries included
The Racket as a platform has a nice set of “batteries”. For example, a really great set of libraries to work with graphics/animations/games. Here is a talk about this aspect: “big-bang: the world, universe, and network in the programming language”. I have played with this stuff myself: made some pieces of generative art. You can take a look at them here.
Another thing in Racket world I played with is /Pollen: my recursive.one site was made using it.
Resources
- “Deploying Racket Web Apps”, a quick intro to
raco distribute
and to resource file handling - “The Missing Guide to Racket’s Web Server” + “Continuations in Racket’s Web Server”
- Macros:
- Fear of Macros
- Mythical Macros
- The
syntax/parse
library docs and examples
Notable packages
- infix, an infix notation as an eDSL.
- syntax/parse, “a framework for writing macros and processing syntax”, helps to define macros with very descriptive error reporting.
- racket-gui-easy, a neat wrapper around Racket’s own /GUI library. It uses the concept of observables those look very similar to /Clojure’s atoms.
Ecosystem
- RackSnaps (an announcement), the simple way to lock all the packages (yep, the raco does not do that)
- Racket Templates, an “unofficial collection of racket app templates”.
Need to play with
- racket-sdl2, a bindings to the [libsdl2(https://libsdl.org/)