|
|
|
|
|
by halostatue
1159 days ago
|
|
> > Also, Rust is not safe from dead/live locks and many other concurrency issues, only data race free.
> How is Erlang safe from those things in a way that cannot or only with a lot of effort be replicated when using Rust? Each BEAM process (other runtimes would call them preemptable green threads) has its own heap, communicates with other processes by messages, and only works on immutable data without the involvement of Native Interface Functions (NIFs). There’s no shared memory at all. It is natively massively concurrent without most of the risks involved. Sure, it’s possible to write code that results in mailbox deadlocks, but it also means stepping outside of normal program design for the BEAM, and it means stepping outside of OTP (which provides structured programming constructs like gen_server). Rust makes it harder to program without memory safety. Erlang (and other BEAM languages) make it harder to program without concurrency safety. Edited to add: Joe Armstrong’s thesis on Erlang is available for download and is written in very accessible language[1]. If you want more, you can also read Programming Erlang (2nd Edition)[2] also by Joe. (I would love to see a 3rd edition tackled by someone to address the newest stuff added in the 9 years since the last publication. I can understand why no one would want to approach this, since it was Joe’s.) [1] http://erlang.org/download/armstrong_thesis_2003.pdf
[2] https://pragprog.com/titles/jaerlang2/programming-erlang-2nd... |
|
Is this related to my question?
I can see that this helps to prevent (or ease) out-of-memory errors. Other than that, what's the difference to using Rust's green threads, given that the developer knows what they are doing (but are still human and can make mistakes of course)?
Maybe a concrete example would help me (and others) to understand the difference.