I'm using Racket for a major project right now. It's been hit and miss. On the one hand, Racket is by far the best alternative/non-mainstream language—the docs are good, there are surprisingly broad libraries, and of course it's great to support the good people at Northeastern.
On the other hand, there is evidence here and there that this language isn't commonly used in production. For example, the pattern-matcher is very well-implemented and feature-full, but there's no way to use it programmatically nor is there a way to get the set of bindings. There is also the sad fact that Racket is a Scheme in the traditional Scheme fashion, and so is still trapped in an 80s design aesthetic. Generics are poor, ADTs aren't easily implemented, static types exist but are not so widely used and have strangenesses.
"no way to use it programmatically nor is there a way to get the set of bindings"
These don't really make sense in the context of Racket. Pattern matching is a macro and thus doesn't exist at run time, though of course with eval the distinction between run time and expansion time is not so well defined. Accessing the lexical environment is not something you do in Racket -- it breaks optimisations and is generally considered a bad idea.
On the other hand, there is evidence here and there that this language isn't commonly used in production. For example, the pattern-matcher is very well-implemented and feature-full, but there's no way to use it programmatically nor is there a way to get the set of bindings. There is also the sad fact that Racket is a Scheme in the traditional Scheme fashion, and so is still trapped in an 80s design aesthetic. Generics are poor, ADTs aren't easily implemented, static types exist but are not so widely used and have strangenesses.