Concurrency, interactivity, and mutability are three desirable features in programming, but it is impossible to have all three simultaneously without trade-offs.
Dropping interactivity (as in C, Rust, Go) ensures safety and performance but removes the ability to inspect or modify programs at runtime.
Dropping concurrency via a Global Interpreter Lock (GIL) in languages like Python and Ruby allows safe interactivity and mutability but introduces performance overhead from locking all data accesses.
Dropping mutability (as in Erlang) uses message passing with copied values for safe concurrency and interactivity, but copying data is slow and incurs performance costs.