Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 History  





2 Versioning  





3 Features  





4 Examples  





5 See also  





6 References  





7 Further reading  














Elixir (programming language)






العربية
Azərbaycanca
Català
Deutsch
Eesti
Español
Esperanto
فارسی
Français

Bahasa Indonesia
Italiano
עברית
Nederlands

Norsk bokmål
Polski
Português
Русский
Српски / srpski
Suomi
Svenska
Türkçe
Українська
Tiếng Vit

 

Edit links
 









Article
Talk
 

















Read
Edit
View history
 








Tools
   


Actions  



Read
Edit
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Cite this page
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 




In other projects  



Wikimedia Commons
 
















Appearance
   

 






From Wikipedia, the free encyclopedia
 


Elixir
elixir programming language
Elixir
Paradigmsmulti-paradigm: functional, concurrent, distributed, process-oriented
Designed byJosé Valim
First appeared2012; 12 years ago (2012)
Stable release

1.17.1[1] Edit this on Wikidata / 18 June 2024; 6 days ago (18 June 2024)

Typing disciplinedynamic, strong
PlatformErlang
LicenseApache License 2.0[2]
Filename extensions.ex, .exs
Websiteelixir-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]

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[edit]

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[edit]

Each of the minor versions supports a specific range of Erlang/OTP versions.[14] The current stable release version is 1.17.1[1] Edit this on Wikidata.

Features[edit]

Examples[edit]

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> |> Enum.sum()
30

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

iex> %{left: x} = %{left: 5, right: 8}
iex> x
5

iex> {:ok, [_ | rest]} = {:ok, [1, 2, 3]}
iex> rest
[2, 3]

Pattern matching with 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

List comprehension:

iex> for n <- 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:

def fib(n) when n in [0, 1], do: n
def fib(n), do: fib(n-2) + fib(n-1)

Relational databases with the Ecto library:

schema "weather" do
  field :city     # Defaults to type :string
  field :temp_lo, :integer
  field :temp_hi, :integer
  field :prcp,    :float, default: 0.0
end

Weather |> where(city: "Kraków") |> order_by(:temp_lo) |> limit(10) |> Repo.all

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

[citation needed]

See also[edit]

References[edit]

  1. ^ a b "Release 1.17.1". 18 June 2024. Retrieved 21 June 2024.
  • ^ "elixir/LICENSE at master · elixir-lang/elixir · GitHub". GitHub.
  • ^ "Most Popular Programming Languages of 2018 - Elite Infoworld Blog". 2018-03-30. Archived from the original on 2018-05-09. Retrieved 2018-05-08.
  • ^ "Elixir". José Valim. Retrieved 2013-02-17.
  • ^ "ElixirConf". Retrieved 2018-07-11.
  • ^ "ElixirConf". Retrieved 2018-07-11.
  • ^ "Erlang & Elixir Fest". Retrieved 2019-02-18.
  • ^ "Elixir LDN". Retrieved 2018-07-12.
  • ^ "EMPEX - Empire State Elixir Conference". Retrieved 2018-07-12.
  • ^ 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". Retrieved 2019-11-25.
  • ^ "Numerical Elixir (Nx)". Retrieved 2024-05-06.
  • ^ Elixir is a dynamic, functional language designed for building scalable and maintainable applications: elixir-lang/elixir, Elixir, 2019-04-21, retrieved 2019-04-21
  • ^ a b c d e f "Elixir". Retrieved 2014-09-07.
  • ^ "Writing assertive code with Elixir". 24 September 2014. Retrieved 2018-07-05.
  • ^ 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)
  • ^ 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[edit]


    Retrieved from "https://en.wikipedia.org/w/index.php?title=Elixir_(programming_language)&oldid=1222605666"

    Categories: 
    Concurrent programming languages
    Functional languages
    Pattern matching programming languages
    Programming languages
    Programming languages created in 2012
    Software using the Apache license
    Hidden categories: 
    CS1 maint: location
    Articles with short description
    Short description is different from Wikidata
    Articles lacking reliable references from June 2023
    All articles lacking reliable references
    All articles with unsourced statements
    Articles with unsourced statements from June 2023
    Articles with J9U identifiers
    Articles with LCCN identifiers
     



    This page was last edited on 6 May 2024, at 21:55 (UTC).

    Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



    Privacy policy

    About Wikipedia

    Disclaimers

    Contact Wikipedia

    Code of Conduct

    Developers

    Statistics

    Cookie statement

    Mobile view



    Wikimedia Foundation
    Powered by MediaWiki