I'm going to riff on what Null-Set said about Ada, which people like to criticize for its complexity but which actually solved a lot of hard problems in very creditable fashion for its day. The complexity complaints are a joke, considering that that both Java and C++ have since become more complex than Ada
ever was by trying to solve some of the same problems -and in C++'s case largely failing. If Ada (or its relative Modula) were introduced today, it would seem like a breath of fresh air compared to those two.
Special runner-up: MOOcode, the native language of LambdaMOO. Still one of the most coherent and pleasant object-oriented languages I've used. It's especially notable for its "code runs as author not invoker" protection model and call-stack introspection. People could learn a lot from that.
My first thought was Nim, and o2348diuu already explained why. Second thought was Lua, but a couple of people beat me to that. Haskell and Elixir are definitely not underrated. They're underused, certainly, but that's not the same thing and IMO Haskell is often overrated.
Special runner-up: MOOcode, the native language of LambdaMOO. Still one of the most coherent and pleasant object-oriented languages I've used. It's especially notable for its "code runs as author not invoker" protection model and call-stack introspection. People could learn a lot from that.
My first thought was Nim, and o2348diuu already explained why. Second thought was Lua, but a couple of people beat me to that. Haskell and Elixir are definitely not underrated. They're underused, certainly, but that's not the same thing and IMO Haskell is often overrated.