Elixir (programming language)

Last updated
Elixir
Elixir programming language logo.svg
Elixir
Paradigms multi-paradigm: functional, concurrent, distributed, process-oriented
Designed by José Valim
First appeared2012;13 years ago (2012)
Stable release
1.18.4 [1]   OOjs UI icon edit-ltr-progressive.svg / 21 May 2025;38 days ago (21 May 2025)
Typing discipline dynamic, strong
Platform Erlang
License Apache License 2.0 [2]
Filename extensions .ex, .exs
Website elixir-lang.org
Influenced by
Clojure, Erlang, Ruby
Influenced
Gleam, LFE

Elixir is a functional, concurrent, high-level general-purpose programming language that runs on the BEAM virtual machine, which is also 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 tooling and an extensible design. The latter is supported by compile-time metaprogramming with macros and polymorphism via protocols. [4]

Contents

The community organizes yearly events in the United States, [5] Europe, [6] and Japan, [7] as well as minor local events and conferences. [8] [9]

History

José Valim created the Elixir programming language as a research and development project at Plataformatec. His goals were to enable higher extensibility and productivity in the Erlang VM while maintaining compatibility with Erlang's ecosystem. [10] [11]

Elixir is aimed at large-scale sites and apps. It uses features of Ruby, Erlang, and Clojure to develop a high-concurrency and low-latency language. It was designed to handle large data volumes. Elixir is also used in telecommunications, e-commerce, and finance. [12]

In 2021, the Numerical Elixir effort was announced with the goal of bringing machine learning, neural networks, GPU compilation, data processing, and computational notebooks to the Elixir ecosystem. [13]

Versioning

Each of the minor versions supports a specific range of Erlang/OTP versions. [14] The current stable release version is 1.18.4 [1]   OOjs UI icon edit-ltr-progressive.svg .

Features

Examples

The following examples can be run in an iex shell or saved in a file and run from the command line by typing elixir <filename>.

Classic Hello world example:

iex> IO.puts("Hello World!")Hello World!

Pipe operator:

iex> "Elixir"|>String.graphemes()|>Enum.frequencies()%{"E" => 1, "i" => 2, "l" => 1, "r" => 1, "x" => 1}iex> %{values:1..5}|>Map.get(:values)|>Enum.map(&&1*2)[2, 4, 6, 8, 10]iex> %{values:1..5}|>Map.get(:values)|>Enum.map(&&1*2)|>Enum.sum()30

Pattern matching (a.k.a. destructuring):

iex> %{left:x}=%{left:5,right:8}iex> x5iex> {:ok,[_|rest]}={:ok,[1,2,3]}iex> rest[2, 3]

Pattern matching with multiple clauses:

iex> caseFile.read("path/to/file")doiex> {:ok,contents}->IO.puts("found file: #{contents}")iex> {:error,reason}->IO.puts("missing file: #{reason}")iex> end

List comprehension:

iex> forn<-1..5,rem(n,2)==1,do:n*n[1, 9, 25]

Asynchronously reading files with streams:

1..5|>Task.async_stream(&File.read!("#{&1}.txt"))|>Stream.filter(fn{:ok,contents}->String.trim(contents)!=""end)|>Enum.join("\n")

Multiple function bodies with guards:

deffib(n)whennin[0,1],do:ndeffib(n),do:fib(n-2)+fib(n-1)

Relational databases with the Ecto library:

schema"weather"dofield:city# Defaults to type :stringfield:temp_lo,:integerfield:temp_hi,:integerfield:prcp,:float,default:0.0endWeather|>where(city:"Kraków")|>order_by(:temp_lo)|>limit(10)|>Repo.all

Sequentially spawning a thousand processes:

fornum<-1..1000,do:spawnfn->IO.puts("#{num*2}")end

Asynchronously performing a task:

task=Task.asyncfn->perform_complex_action()endother_time_consuming_action()Task.awaittask

[ citation needed ]

See also

References

  1. 1 2 "Release 1.18.4". 21 May 2025. Retrieved 25 May 2025.
  2. "elixir/LICENSE at master · elixir-lang/elixir · GitHub". GitHub.
  3. "Most Popular Programming Languages of 2018 - Elite Infoworld Blog". 2018-03-30. Archived from the original on 2018-05-09. Retrieved 2018-05-08.
  4. "Elixir". José Valim. Retrieved 2013-02-17.
  5. "ElixirConf" . Retrieved 2018-07-11.
  6. "ElixirConf" . Retrieved 2018-07-11.
  7. "Erlang & Elixir Fest" . Retrieved 2019-02-18.
  8. "Elixir LDN" . Retrieved 2018-07-12.
  9. "EMPEX - Empire State Elixir Conference" . Retrieved 2018-07-12.
  10. Elixir - A modern approach to programming for the Erlang VM . Retrieved 2013-02-17.
  11. José Valim - ElixirConf EU 2017 Keynote. Archived from the original on 2021-11-17. Retrieved 2017-07-14.
  12. "Behinde the code: The One Who Created Elixir" . Retrieved 2019-11-25.
  13. "Numerical Elixir (Nx)". GitHub . Retrieved 2024-05-06.
  14. Elixir is a dynamic, functional language designed for building scalable and maintainable applications: elixir-lang/elixir, Elixir, 2019-04-21, retrieved 2019-04-21
  15. 1 2 3 4 5 6 "Elixir" . Retrieved 2014-09-07.
  16. "Writing assertive code with Elixir". 24 September 2014. Retrieved 2018-07-05.
  17. Loder, Wolfgang (12 May 2015). Erlang and Elixir for Imperative Programmers. "Chapter 16: Code Structuring Concepts", section title "Actor Model": Leanpub. Retrieved 7 July 2015.{{cite book}}: CS1 maint: location (link)
  18. Wlaschin, Scott (May 2013). "Railway Oriented Programming". F# for Fun and Profit. Archived from the original on 30 January 2021. Retrieved 28 February 2021.

Further reading