This is a bit of a meta-post.
When I first moved from Java to Scala (after several other languages, I started young), it was like a dream. Type-safety, elegance, a breath of functional style, and power, to name a few. It was like, out of a triangle where you can always only have two things, Scala somehow managed to have all three. It had everything I ever liked in a language, and I could fully live out my creativity in writing beautiful code, including all those abstract things that I had learned over the years from books and the like - because the language gave me that flexibility that I was waiting for.
Then I came across [classic Akka] Actors, and Akka Streams, which opened up another new world. Classic Actors were then the best paradigm that I knew, but still, I felt there was room for improvement. Something still felt a bit clumsy.
Now I’m starting to use Typed Actors, and it feels like it has taken everything that was learned from classic Actors, and perfected it. All those clumsinesses are gone. It offers insane flexibility. It feels like, an actor can utilize every level of complexity and every pattern that Scala itself offers. An actor can be a simple function. It can be a complex object. It can be functional. It can be object-oriented. It can be both. It can consist of a class. One actor can even consist of multiple classes. It can utilize classes AND functions. It can be mutable, entirely immutable, a Finite-state-machine. …you get my point. There are no limits to how you can express yourself in this framework. You can express your thoughts into code rather freely.
In any other language/paradigm that my limited knowledge affords, a function will always be a function, and a class instance will always be a class instance. An actor… can be anything (transparently).
When I start writing an actor, I don’t have to think far ahead. I start simple, refactor, and let it grow. An actor comes into being organically.
On top of that, I have supervision / fault-tolerance, persistence, remoting / clustering (incl. sharding, singletons, routers etc), and if that’s not enough, Akka Streams, without which I also could not live as a programmer (I have written a
Scala Graph based DSL on top of Akka Streams). Not to forget, gRPC for inter-service communication.
I feel like, this is the ultimate toolkit for programming. I don’t know of anything that even comes close. No other language + framework can compare to this combination.