Jump to content
Wikipedia The Free Encyclopedia

Elixir (programming language)

From Wikipedia, the free encyclopedia
Programming language running on the Erlang virtual machine
This article relies excessively on references to primary sources . Please improve this article by adding secondary or tertiary sources.
Find sources: "Elixir" programming language – news · newspapers · books · scholar · JSTOR
(June 2023) (Learn how and when to remove this message)
Elixir
elixir programming language
Elixir
Paradigms multi-paradigm: functional, concurrent, distributed, process-oriented
Designed by José Valim
First appeared2012; 13 years ago (2012)
Stable release
1.18.3[1]  Edit this on Wikidata / 6 March 2025; 25 days ago (6 March 2025)
Typing discipline dynamic, strong
Platform Erlang
License Apache License 2.0 [2]
Filename extensions .ex, .exs
Websiteelixir-lang.org
Influenced by
Clojure, Erlang, Ruby
Influenced
Gleam, LFE

Elixir is a Brazilian 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.18.3[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> caseFile.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> 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:n
deffib(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:

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

Asynchronously performing a task:

task=Task.asyncfn->perform_complex_action()end
other_time_consuming_action()
Task.awaittask

[citation needed ]

See also

[edit ]

References

[edit ]
  1. ^ a b "Release 1.18.3". 6 March 2025. Retrieved 23 March 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. ^ a b c d e f "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

[edit ]

AltStyle によって変換されたページ (->オリジナル) /