Return to Timeline of the History of Computers
Elixir is a functional, concurrent, general-purpose programming language that runs on the BEAM virtual machine used to implement the Erlang programming language.[3] Elixir builds on top of Erlang and shares the same abstractions for building distributed, fault-tolerant applications. Elixir also provides productive tooling and an extensible design. The latter is supported by compile-time metaprogramming with macros and polymorphism via protocols.[4]
Elixir is used by companies such as PagerDuty,[5] Discord,[6] E-MetroTel,[7] Pinterest,[8] Moz,[9] Bleacher Report,[10] The Outline,[11] Inverse,[12] Divvy,[13] FarmBot[14] and for building embedded systems.[15][16] The community organizes yearly events in the United States,[17] Europe[18] and Japan[19] as well as minor local events and conferences.[20][21]
History
José Valim is the creator of the Elixir programming language, a research and development project of Plataformatec. His goals were to enable higher extensibility and productivity in the Erlang VM while keeping compatibility with Erlang’s ecosystem.[22][23]
José Valim aimed to create a programming language for large-scale sites and apps. Being a Ruby developer, he used features of Ruby, Erlang, and Clojure to develop a high-concurrency and low-latency language. Elixir was designed to handle large data volumes. Its speed and capabilities spread Elixir in telecommunication, eCommerce, and finance industries. [24]
On July 12, 2018, Honeypot released a mini-documentary on Elixir.[25]
Features
- compiles to bytecode for the Erlang Virtual Machine (BEAM)[28]
- Everything is an expression[28]
- Erlang functions can be called from Elixir without run time impact, due to compilation to Erlang bytecode, and vice versa
- Meta programming allowing direct manipulation of abstract syntax tree (AST)[28]
- Polymorphism via a mechanism called protocols. Like in Clojure, protocols provide a dynamic dispatch mechanism. However, this is not to be confused with multiple dispatch as Elixir protocols dispatch on a single type.
- Support for documentation via Python-like docstrings in the Markdown formatting language[28]
- Shared nothing concurrent programming via message passing (Actor model)[29]
- Emphasis on recursion and higher-order functions instead of side-effect-based looping
- Lightweight concurrency utilizing Erlang’s mechanisms[28]
- Railway oriented programming via the
with
construct - Built-in tooling for managing dependencies, code compilation, running tests, formatting code, remote debugging and more
- Lazy and async collections with streams
- Pattern matching[28] to promote assertive code[30]
- Unicode support and UTF-8 strings