> They have completely different semantics, performance characteristics
Many times it is the different semantics that allow for better performance.
If you can add new methods or change their implementation at runtime, performance optimizations get a lot trickier, for example.
The immutability that's foundational to Elixir and Erlang enable the incredible scaling capabilities of the Erlang VM.