Elixir is an interesting language – I’ve never used it but get the impression it is designed for implementing distributed systems. This article provides a nice comparison to Go:
Go is compiled to a native binary, while Elixir is compiled to bytecode and executed on the Erlang Virtual Machine (BEAM). As such, Go produces applications that run much faster than Elixir. As a rule, Go applications will run comparative to Java applications, but with a tiny memory footprint. Elixir, on the other hand, will typically run faster than platforms such as Ruby and Python, but cannot compete with the sheer speed of Go.
Performance is just one consideration – others include fault tolerance:
Erlang, the platform underlying Elixir, makes numerous sacrifices in runtime speed in order to provide memory safety, native distributed messaging (clustering), and fault tolerant process management.
This further illustrates there are always tradeoffs. You have to decide what is most important for your application. As we deploy SIOT to low end Embedded Linux edge devices, performance, runtime efficiency, memory use, binary size, etc are all very important for IoT systems.