The topic of Elixir (programming language) is one that has captured the attention of many people in recent years. Since its emergence, Elixir (programming language) has generated a great deal of debate and discussion in various sectors of society. It has provoked both interest and controversy, with conflicting opinions and opposing positions. Elixir (programming language) has had an impact in different areas, from politics and economics to culture and entertainment. In this article, we will explore the phenomenon of Elixir (programming language) in depth, analyzing its origin, its evolution and its influence on today's world.
| Elixir | |
|---|---|
Elixir | |
| Paradigms | multi-paradigm: functional, concurrent, distributed, process-oriented |
| Designed by | José Valim |
| First appeared | 2012 |
| Stable release | 1.19.4[1] |
| Typing discipline | dynamic, strong |
| Platform | Erlang |
| License | Apache License 2.0[2] |
| Filename extensions | .ex, .exs |
| Website | elixir-lang |
| 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]
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]
Each of the minor versions supports a specific range of Erlang/OTP versions.[14] The current stable release version is 1.19.4[1]
.
with construct[18]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)
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> x
5
iex> {:ok, } = {:ok, }
iex> rest
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
iex> for n <- 1..5, rem(n, 2) == 1, do: n*n
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 , 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
{{cite book}}: CS1 maint: location (link)