Rust is a great language for its intended purposes and usage. Unfortunately, no language is good for everything and there are always major trade-offs.
Personally, I think a great companion language for Rust is Smalltalk. Its strengths are Rust’s weaknesses, and its weaknesses are Rust’s strengths.
Smalltalk is highly extensible just like Lisp! No, it doesn’t have macros but the language itself is practically a DSL!
Smalltalk is infinitely scalable thanks to its OOP purity. Alan Kay has likened Smalltalk to an internet of tiny servers (or objects), or to a biological system of cells.
Smalltalk allows for “live programming.” You can inspect and modify code and data while the application is running! This practically eliminates the edit-compile-test-debug cycle that hampers most developers.
Smalltalk’s image-based programming is great for application portability. It’s very much like a Docker container. Smalltalk’s image resembles a compiler, IDE, and virtual OS host (VirtualBox, VMware) all rolled into one. And just like in VirtualBox, you can save/restore the Smalltalk image preserving the total execution state of your application! This is enormously powerful and convenient.
And with TDD (test-driven development), which Smalltalk pioneered under Kent Beck, Smalltalk can be used to write highly reliable software. No need to worry about ownership and memory leaks. Admittedly, garbage collection can be both a strength and a weakness, which is why I propose Smalltalk as a companion language.
Smalltalk is wonderful for most kinds of applications…enterprise, web, IoT, robotics, AI, AR/VR, etc. No, I wouldn’t use Smalltalk for number-crunching or real-time control systems. But for many developers, it delivers ease of learning, ease of use, productivity, shortest time to market, and so on.
This is why, for example, Rust and Smalltalk are the two favourite languages of Prof. Dave Mason, Chair of Computer Science at Ryerson University in Toronto, Canada. And they’re my favourite languages, too.