Actors do not an Erlang make. What makes an Erlang:
- Isolation. A crash in an actor cannot bring down other actors. Cannot bring down the runtime
In Go `panic` crashes the program. In Erlang "panic" crashes an actor, and... that's it.
- Monitoring. The above makes an important property of the system: a process can be monitored, and when it dies you can be guaranteed to receive a message that it died, and why
This lets you build things like supervision trees that are impossible/hard/ineffecient(chose two) in other languages.
- Everything in the VM is aware of processes, concurrency and parallelism
Every process gets its fair share of time: each process gets X "reductions". A reduction is a function call, or a message pass. Each function call or message pass reduces the counter. Once it reaches zero, the process is put on hold, and the next process is run.
This means that almost everything in the system, including the VM itself is re-entrant. Even Erlang's regexp implementation is re-entrant. You never even have to think about "wait, if I call this function, and the process is put on hold, what happens". The process will be re-awakened and continued.
----
The first two are what makes Erlang special. The rest is gravy, and there is quite a lot of it on top.