Recs.
Updated
SpecsUpdate
Pros
Pro Syntax abstraction
Racket is THE language when it comes to syntax abstraction. The whole platform is carefully designed so that users can define Domain Specific Languages for specific problems which are fully supported by the Racket IDE and interact seamlessly with other languages.
Its unique syntax-parse library allows creating robust macros with meaningful error messages, what boosts Meta-Programming to a whole new level.
Pro Static typing support through Typed Racket
The Racket platform is designed to accomodate several languages that are fully supported by the Racket IDE and interact with each other seamlessly.
A popular dialect is Typed Racket, which implements gradual typing, i.e. it allows a developer to add static types to a dynamic program when needed. This gives the developer the ability to rapidly prototype with dynamic code, and gradually add robustness to it in order to scale.
Pro Design by Contract
Racket has an integrated Contracts system which is backed by the experience and results of years of research. They allow developers to clearly specify interfaces across modules which get verified during runtime, and thus are very valuable in order to scale up a software architecture.
Pro Batteries included
Besides the impressive standard libraries, which among other things include a cross-platform GUI toolkit that generates native-looking apps for all current major platforms, Racket has a package manager which gives access to a huge set of third-party libraries. The number of packages is much less than something like CPAN or PIP though.
Pro Multi-platform IDE (DrRacket)
At first glance the Racket IDE DrRacket looks quite simple. But as soon one starts developing on it, it becomes clear how feature-rich it is. Besides usual IDE features like code refactoring and a good debugger, it shows for example where bindings are used, where they come from, and even whether they are mutated or not. DrRacket is also expandable by Racket code, so for example there are plugins to inspect behavior of parallel programs etc.
Pro Racket was designed to teach functional programming from the start
Racket is based on Scheme (LISP Family) and is very similar to Clojure. So there are a ton of (). The reason it is easier to learn is that it is not trying to be "Pure" if there is even such a thing in terms of Functional Programming. The great thing about Racket is it has everything included. You get DrRacket for developing programs. You want to add a picture to your software you can insert pictures. If you want to add libraries just open the package manager. The Syntax is an opinion but it really does feel easier to see what is happening since everything is in brackets)
Racket is a really a Programming Language for making Programming Languages. So there are smaller syntax Racket called Student Racket which makes things easier to pick up.