One year after hitting 1.0, Elixir 1.1 is out. It brings new public APIs, performance improvements, and tooling improvements.
Elixir 1.1 introduces about 40 new functions, including new APIs for Enum
, Task, and String
modules. Additionally, a new datatype has been added, MapSet
, which implements the Set
API on top of a map.
Tooling was also improved. Elixir’s unit testing framework, ExUnit
, has got new options that allow it to skip tests via tags, and print captured log messages even in case of failures. Mix
, Elixir’s build tool, provides now improved performance by separating compile-time dependencies and runtime dependencies and recompiling a file only if any of its compile-time dependencies were changed.
Finally, Elixir 1.1 release comes with a code of conduct statement to ensure that the community can “grow into a safe and welcoming place for everyone”. The code of conduct includes the definition of unacceptable behaviour by contributors, such as sexualized language use, personal attacks, harassment, etc.
InfoQ has spoken with José Valim, Elixir’s creator.
What is Elixir’s level of maturity? What does Elixir 1.1 bring for developers?
Usually when open source projects reach 1.0, besides a stable API, the release has one of the two distinct meanings: a) the project has defined its minimum core and new concepts will be added and developed quickly, usually followed by incremental releases or b) the project has defined its foundation that we expect developers to be build on for the foreseeable future. Elixir is definitely the latter.
Elixir 1.1 is about optimizing the codebase based on the data we got from applications running in production, fixing bugs and making the tooling more productive and faster.
Could you share some details about Elixir roadmap? What can be expected in the future?
We are currently working on Elixir 1.2. Its biggest goal is to leverage everything the new version of the Erlang VM and runtime, called Erlang 18, has to give us. Because it is a very incremental release, we expect it to come out still this year.
Currently there is no date for Elixir 1.3, although we are working on a new component called GenRouter that will allow Elixir developers to route data through their system in an efficient way with back-pressure. GenRouter will allow developers to robustly do data broadcast — think of it as a logging component that sends data to different storages — or even a jobs processing system with load balancing.
I explored those topics in my ElixirConf 2015. The video is coming out soon and will have more details on those topics.
Can you share any insights you have about how Elixir is currently used in the industry?
Web infrastructure: When it comes to web, Elixir is being in all parts of the stack. We have cases of folks using it for building protocols on top of TCP and UDP, as well as web applications, be it for HTML5 apps or API backends, up to distributed systems, powering game servers.
Embedding system: There is a growing crowd interested in taking Elixir to embedded platforms, making it easier than ever for advanced developers as well as beginners to get Elixir up and running into those systems. This is particularly interesting considering “Internet of Things” and Elixir’s innate ability for building distributed systems. At ElixirConf 2015, we saw folks running Elixir in different devices, often upgrading those system firmware live. We explored those topics on Platformatec’s blog in the past and the videos for ElixirConf 2015 will be out soon.
Financial and video platforms: There are multiple startups using Elixir for data processing, handling and processing large amount of data daily. More details should be released publicly soon and we hope to hear more and more cases in the next year when our efforts behind GenRouter are released.
Elixir is a functional language for Erlang’s virtual machine (BEAM). Elixir is semantically close to Erlang and tries to be true to its VM goals, namely building resilient, scalable, distributed systems, while at the same time providing higher level syntactical constructs. Elixir does indeed support advanced features not natively available in Erlang such as polymorphism through dynamic dispatch, actors, high-order functions, pattern matching, metaprogramming, etc. Elixir is bridged with Erlang libraries so developers have seamless access to the Erlang ecosystem.
According to Saša Jurić, author of Elixir in Action,
[In Erlang,] I find many tasks to be overly tedious, and find myself needlessly wrestling with some lower-level mechanical stuff. This is where Elixir brings a lot of useful features, both in the language (e.g. metaprogramming via macros, and polymorphism via protocols) and in the tooling department (e.g. mix tool for building projects, and hex package manager), allowing us to focus more on the actual problem we’re solving.
Elixir 1.1 is available on GitHub.