This articlerelies excessively onreferences toprimary sources. Please improve this article by addingsecondary 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 | |
| Paradigms | multi-paradigm:functional,concurrent,distributed,process-oriented |
| Designed by | José Valim |
| First appeared | 25 May 2012; 13 years ago (2012-05-25)[1][2][3] |
| Stable release | |
| Typing discipline | dynamic,strong |
| Platform | Erlang |
| License | Apache License 2.0[5] |
| Filename extensions | .ex, .exs |
| Website | elixir-lang |
| Influenced by | |
| Clojure,Erlang,Ruby | |
| Influenced | |
| Gleam,LFE | |
Elixir is afunctional,concurrent,high-levelgeneral-purposeprogramming language that runs on theBEAMvirtual machine, which is also used to implement theErlang programming language.[6] Elixir builds on top of Erlang and shares the same abstractions for buildingdistributed,fault-tolerant applications. Elixir also provides tooling and anextensible design. The latter is supported by compile-timemetaprogramming withmacros andpolymorphism via protocols.[7]
The community organizes yearly events in the United States,[8] Europe,[9] and Japan,[10] as well as minor local events and conferences.[11][12]
José Valim created the Elixir programming language as aresearch 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.[13][14]
Elixir is aimed at large-scale sites and apps. It uses features ofRuby, Erlang, andClojure 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.[15]
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.[16]
with construct[19]The following examples can be run in aniexshell or saved in a file and run from thecommand line by typingelixir<filename>.
ClassicHello 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
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 withguards:
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
{{cite book}}: CS1 maint: location (link)