Elixir (programming language)
![]() | |
Paradigm | multi-paradigm: functional, concurrent, distributed, process-oriented |
---|---|
First appeared | 2012 |
Typing discipline | dynamic, strong, duck |
Platform | Erlang |
License | Apache License 2.0[1] |
Filename extensions | .ex, .exs |
Website | elixir-lang |
Influenced by | |
Clojure, Erlang, Ruby | |
Influenced | |
LFE |
Elixir is a functional, concurrent, general-purpose programming language that runs on the BEAM virtual machine which is also used to implement the Erlang programming language.[2] 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.[3]
Elixir is used by companies such as Ramp,[4] PagerDuty,[5] Discord,[6] Brex,[7] E-MetroTel,[8] Pinterest,[9] Moz,[10] Bleacher Report,[11] The Outline,[12] Inverse,[13] Divvy,[14] FarmBot[15] and for building embedded systems.[16][17] The community organizes yearly events in the United States,[18] Europe[19] and Japan[20] as well as minor local events and conferences.[21][22]
History
José Valim is the creator of the Elixir programming language, a research and development project created at Plataformatec. His goals were to enable higher extensibility and productivity in the Erlang VM while keeping compatibility with Erlang's ecosystem.[23][24]
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.[25]
On July 12, 2018, Honeypot released a mini-documentary on Elixir.[26]
Versioning
Elixir mostly[27] follows semantic versioning and has only 1 major version with no plans for a second. Each of the minor versions supports a specific range of Erlang/OTP versions.[28]
Features
- Compiles to bytecode for the Erlang Virtual Machine (BEAM)[29]
- Everything is an expression[29]
- Erlang functions can be called from Elixir, and vice versa, without run time impact, due to compilation to Erlang bytecode
- Meta programming allowing direct manipulation of abstract syntax tree (AST)[29]
- Polymorphism via a mechanism called protocols. As 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[29]
- Shared nothing concurrent programming via message passing (Actor model)[30]
- Emphasis on recursion and higher-order functions instead of side-effect-based looping
- Lightweight concurrency utilizing Erlang's mechanisms[29]
- Railway oriented programming via the
with
construct[31] - Built-in tooling for managing dependencies, code compilation, running tests, formatting code, remote debugging and more
- Lazy and async collections with streams
- Pattern matching[29] to promote assertive code[32]
- Unicode support and UTF-8 strings
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!
Comprehensions
iex> for n <- [1,2,3,4,5], rem(n, 2) == 1, do: n*n [1, 9, 25]
Pattern Matching (destructuring)
iex> [1, a] = [1, 2] iex> a 2 iex> {:ok, [hello: a]} = {:ok, [hello: "world"]} iex> a "world"
Pattern Matching (multiple clauses)
iex> case File.read("path/to/file") do iex> {:ok, contents} -> IO.puts("found file: #{contents}") iex> {:error, reason} -> IO.puts("missing file: #{reason}") iex> end
Pipe Operator
iex> "1" |> String.to_integer() |> Kernel.*(2) 2
Modules
defmodule Fun do def fib(0), do: 0 def fib(1), do: 1 def fib(n), do: fib(n-2) + fib(n-1) end
Sequentially spawning a thousand processes
for num <- 1..1000, do: spawn fn -> IO.puts("#{num * 2}") end
Asynchronously performing a task
task = Task.async fn -> perform_complex_action() end other_time_consuming_action() Task.await task
Noteworthy Elixir projects
- Mix is a build automation tool that provides tasks for creating, compiling, and testing Elixir projects, managing its dependencies, and more.[33]
- Phoenix is a web development framework written in Elixir which implements the server-side Model View Controller (MVC) pattern.[34]
See also
References
- ↑ "elixir/LICENSE at master · elixir-lang/elixir · GitHub". GitHub. https://github.com/elixir-lang/elixir/blob/master/LICENSE.
- ↑ "Most Popular Programming Languages of 2018 - Elite Infoworld Blog". 2018-03-30. https://www.eliteinfoworld.com/blog/popular-programming-languages-2018/.
- ↑ "Elixir". José Valim. https://elixir-lang.org.
- ↑ "Elixir at Ramp". 2021-05-24. https://engineering.ramp.com/elixir-at-ramp.
- ↑ "Elixir at PagerDuty". 2018-06-14. https://www.pagerduty.com/blog/elixir-at-pagerduty/.
- ↑ Vishnevskiy, Stanislav (Jul 6, 2017). "How Discord Scaled Elixir to 5,000,000 Concurrent Users". https://blog.discordapp.com/scaling-elixir-f9b8e1e7c29b?gi=3afa589deb67.
- ↑ Valim, José (2020-06-23). "Elixir at fintech with Brex" (in en). https://elixir-lang.org/blog/2020/06/23/growing-with-elixir-at-brex/.
- ↑ "What's New in Release 6.0 | Documentation". https://www.emetrotel.com/tsd/content/whats-new-release-60.
- ↑ "Introducing new open-source tools for the Elixir community". https://engineering.pinterest.com/blog/introducing-new-open-source-tools-elixir-community.
- ↑ "Unlocking New Features in Moz Pro with a Database-Free Architecture". https://moz.com/devblog/moz-analytics-db-free/.
- ↑ "Elixir". https://dev.bleacherreport.com/tagged/elixir.
- ↑ Lucia, Dave (Sep 24, 2018). "Two years of Elixir at The Outline". https://blog.usejournal.com/two-years-of-elixir-at-the-outline-ad671a56c9ce?gi=9931fa1dcdcb.
- ↑ "What big projects use Elixir?". https://www.quora.com/What-big-projects-use-Elixir.
- ↑ "Why Divvy uses Elixir instead of more popular coding languages.". 2 April 2019. https://medium.com/@divvyhq/why-divvy-uses-elixir-instead-of-more-popular-coding-languages-92c514dc47d0.
- ↑ The operating system and all related software that runs on FarmBot's Raspberry Pi.: FarmBot/farmbot_os, FarmBot, 2019-10-28, https://github.com/FarmBot/farmbot_os, retrieved 2019-10-29
- ↑ "Elixir in production interview: Garth Hitchens". 3 June 2015. http://blog.plataformatec.com.br/2015/06/elixir-in-production-interview-garth-hitches/.
- ↑ "Nerves - Craft and deploy bulletproof embedded software in Elixir". http://nerves-project.org/.
- ↑ "ElixirConf". http://elixirconf.com/.
- ↑ "ElixirConf". http://elixirconf.eu/.
- ↑ "Erlang & Elixir Fest". https://elixir-fest.jp/.
- ↑ "Elixir LDN". http://www.elixir.london/.
- ↑ "EMPEX - Empire State Elixir Conference". http://empex.co/.
- ↑ Elixir - A modern approach to programming for the Erlang VM. Retrieved 2013-02-17.
- ↑ José Valim - ElixirConf EU 2017 Keynote. Archived from the original on 2021-11-17. Retrieved 2017-07-14.
- ↑ "Behinde the code: The One Who Created Elixir". https://www.welcometothejungle.com/en/articles/btc-elixir-jose-valim/.
- ↑ "Elixir: A Mini-Documentary". https://cult.honeypot.io/originals/elixir-the-documentary.
- ↑ "Imperative Assignements are breaking the application in 1.7 update · Issue #8076 · elixir-lang/elixir" (in en). https://github.com/elixir-lang/elixir/issues/8076.
- ↑ Elixir is a dynamic, functional language designed for building scalable and maintainable applications: elixir-lang/elixir, Elixir, 2019-04-21, https://github.com/elixir-lang/elixir, retrieved 2019-04-21
- ↑ 29.0 29.1 29.2 29.3 29.4 29.5 "Elixir". https://elixir-lang.org/.
- ↑ Loder, Wolfgang (12 May 2015). Erlang and Elixir for Imperative Programmers. "Chapter 16: Code Structuring Concepts", section title "Actor Model": Leanpub. https://leanpub.com/erlangandelixirforimperativeprogrammers. Retrieved 7 July 2015.
- ↑ Wlaschin, Scott (May 2013). "Railway Oriented Programming". https://fsharpforfunandprofit.com/rop/.
- ↑ "Writing assertive code with Elixir". 24 September 2014. http://blog.plataformatec.com.br/2014/09/writing-assertive-code-with-elixir/.
- ↑ "Mix". https://hexdocs.pm/mix/Mix.html.
- ↑ "Overview". https://hexdocs.pm/phoenix/overview.html.
External links
![]() | Original source: https://en.wikipedia.org/wiki/Elixir (programming language).
Read more |