Elixir (gjuhë programimi)
| Elixir | |
|---|---|
![]() Elixir | |
| Paradigms | funksionale, konkurrente, e shpërndarë, e orientuar drejt proceseve |
| Designed by | José Valim |
| First appeared | 2012 |
| Typing discipline | dinamik, i fortë |
| Platform | Erlang |
| License | Apache License 2.0[1] |
| Filename extensions | .ex, .exs |
| Website | elixir-lang |
| Influenced by | |
| Clojure, Erlang, Ruby | |
| Influenced | |
| Gleam, LFE | |
Elixir është një gjuhë programimi funksionale, konkurrente, e nivelit të lartë dhe me qëllim të përgjithshëm, që funksionon në makinën virtuale BEAM, e cila përdoret gjithashtu për të zbatuar gjuhën e programimit Erlang.[2] Elixir ndërtohet mbi Erlang dhe ndan të njëjtat abstraksione për ndërtimin e aplikacioneve të shpërndara, tolerante ndaj gabimeve. Elixir gjithashtu ofron mjete dhe një dizajn të zgjerueshëm. Ky i fundit mbështetet nga metaprogramimi në kohë kompajlimi me makro dhe polimorfizëm nëpërmjet protokolleve.[3]
Komuniteti organizon ngjarje vjetore në Shtetet e Bashkuara,[4] Evropë,[5] dhe Japoni,[6] si dhe ngjarje dhe konferenca të vogla lokale.[7][8]
Historia
José Valim krijoi gjuhën e programimit Elixir si një projekt kërkimi dhe zhvillimi në Plataformatec. Synimet e tij ishin të mundësonte zgjerim dhe produktivitet më të lartë në Erlang VM, duke ruajtur përputhshmërinë me ekosistemin e Erlang-ut.[9][10]
Elixir është i destinuar për faqe dhe aplikacione në shkallë të gjerë. Ai përdor veçoritë e Ruby, Erlang dhe Clojure për të zhvilluar një gjuhë me njëkohësi të lartë dhe vonesë të ulët. Është projektuar për të trajtuar vëllime të mëdha të dhënash. Elixir përdoret gjithashtu në telekomunikacion, tregti elektronike dhe financë.[11]
Në vitin 2021 u njoftua përpjekja Numerical Elixir me qëllimin për të sjellë në ekosistemin Elixir mësimin automatik, rrjetet nervore, përpilimin e GPU-ve, përpunimin e të dhënave dhe fletoret kompjuterike.[12]
Versionet
Secili prej versioneve dytësore mbështet një gamë specifike të versioneve Erlang/OTP.[13] Versioni aktual i qëndrueshëm është .
Karakteristikat
- Kompilohet në kod bajtesh për makinën virtuale BEAM të Erlang.[14] Ndërveprim i plotë me kodin Erlang, pa ndikim në kohën e ekzekutimit.
- Shkallueshmëria dhe toleranca ndaj defekteve, falë mekanizmave të lehtë të njëkohshmërisë së Erlang-ut.[14]
- Mjete të integruara për menaxhimin e varësive, përpilimin e kodit, ekzekutimin e testeve, formatimin e kodit, debugging në distancë dhe më shumë.
- Një REPL interaktive brenda programeve në ekzekutim, duke përfshirë serverat web Phoenix, me ringarkim të kodit dhe qasje në gjendjen e brendshme.
- Çdo gjë është një shprehje.[14]
- Përputhja e modeleve[14] për të promovuar kodin pohues.[15]
- Këshilla për shkrimin e mjeteve të analizës statike.
- Të dhëna të pandryshueshme, me theks, si në gjuhët e tjera funksionale, në rekursion dhe funksione të rendit më të lartë në vend të cikleve me efekte anësore.
- Programim i njëkohshëm pa asgjë të përbashkët nëpërmjet kalimit të mesazheve (modeli i aktorit).[16]
- Koleksione të ngadalta dhe asinkrone me transmetime.
- Programimi i orientuar drejt “hekurudhave” nëpërmjet konstruktit
with.[17] - Metaprogramim higjienik me anë të aksesit të drejtpërdrejtë në pemën abstrakte të sintaksës (AST).[14] Bibliotekat shpesh zbatojnë gjuhë të vogla specifike për domenin, si për bazat e të dhënave ose testimin.
- Ekzekutim i kodit në kohën e kompilimit. Kompiluesi Elixir funksionon në BEAM, kështu që modulet që po kompilohen mund të ekzekutojnë menjëherë kodin që është kompiluar tashmë.
- Polimorfizëm nëpërmjet një mekanizmi të quajtur protokolle. Shpërndarje dinamike, si në Clojure, por pa dërgim të shumëfishtë, sepse protokollet Elixir dërgohen në një lloj të vetëm.
- Mbështetje për dokumentim nëpërmjet docstrings të ngjashme me Python në gjuhën e formatimit Markdown.[14]
- Mbështetje për Unicode dhe vargje UTF-8.
Shembuj
Shembujt e mëposhtëm mund të ekzekutohen në një shell iex ose të ruhen në një skedar dhe të ekzekutohen nga rreshti i komandës duke shtypur elixir <filename>.
Shembull klasik i “Hello World”:
iex> IO.puts("Hello World!")
Hello World!
Operatori i tubave:
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
Përputhja e modelit (e njohur edhe si destruksion):
iex> %{left: x} = %{left: 5, right: 8}
iex> x
5
iex> {:ok, [_ | rest]} = {:ok, [1, 2, 3]}
iex> rest
[2, 3]
Përputhja e modelit me klauzola të shumëfishta:
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
Kuptimi i listës:
iex> for n <- 1..5, rem(n, 2) == 1, do: n*n
[1, 9, 25]
Leximi asinkron i skedarëve me rrjedha:
1..5
|> Task.async_stream(&File.read!("#{&1}.txt"))
|> Stream.filter(fn {:ok, contents} -> String.trim(contents) != "" end)
|> Enum.join("\n")
Trupa me funksione të shumëfishta me mbrojtëse:
def fib(n) when n in [0, 1], do: n
def fib(n), do: fib(n-2) + fib(n-1)
Bazat e të dhënave relacionale me bibliotekën Ecto:
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
Duke krijuar në mënyrë sekuenciale një mijë procese:
for num <- 1..1000, do: spawn fn -> IO.puts("#{num * 2}") end
Kryerja asinkrone e një detyre:
task = Task.async fn -> perform_complex_action() end
other_time_consuming_action()
Task.await task
Shih edhe
- Informatika e njëkohshme
- Informatika e shpërndarë
- Llogaritja paralele
Referime
- ↑ "elixir/LICENSE at master · elixir-lang/elixir · GitHub". GitHub (në anglisht).
- ↑ "Most Popular Programming Languages of 2018 - Elite Infoworld Blog" (në anglisht). 2018-03-30. Arkivuar nga origjinali më 2018-05-09. Marrë më 2018-05-08.
- ↑ "Elixir". José Valim (në anglisht). Marrë më 2013-02-17.
- ↑ "ElixirConf" (në anglisht). Marrë më 2018-07-11.
- ↑ "ElixirConf" (në anglisht). Marrë më 2018-07-11.
- ↑ "Erlang & Elixir Fest" (në anglisht). Arkivuar nga origjinali më 2019-03-30. Marrë më 2019-02-18.
- ↑ "Elixir LDN" (në anglisht). Arkivuar nga origjinali më 2018-07-12. Marrë më 2018-07-12.
- ↑ "EMPEX - Empire State Elixir Conference" (në anglisht). Marrë më 2018-07-12.
- ↑ Elixir - A modern approach to programming for the Erlang VM (në anglisht). Marrë më 2013-02-17.
- ↑ José Valim - ElixirConf EU 2017 Keynote (në anglisht). Arkivuar nga origjinali më 6 tetor 2024. Marrë më 2017-07-14.
- ↑ "Behinde the code: The One Who Created Elixir" (në anglisht). Marrë më 2019-11-25.
- ↑ "Numerical Elixir (Nx)". GitHub (në anglisht). Marrë më 2024-05-06.
- ↑ Elixir is a dynamic, functional language designed for building scalable and maintainable applications: elixir-lang/elixir (në anglisht), Elixir, 2019-04-21, marrë më 2019-04-21
- 1 2 3 4 5 6 "Elixir" (në anglisht). Marrë më 2014-09-07.
- ↑ "Elixir". José Valim (në anglisht). Marrë më 2013-02-17.
- ↑ "ElixirConf" (në anglisht). Marrë më 2018-07-11.
- ↑ "ElixirConf" (në anglisht). Marrë më 2018-07-11.
Lexime të mëtejshme
- St. Laurent, Simon (22 dhjetor 2016). Introducing Elixir: Getting Started in Functional Programming (Botimi i dytë) (në anglisht). O'Reilly Media. ISBN 978-1491956779.
- Juric, Sasa (12 janar 2019). Elixir in Action (Botimi i dytë) (në anglisht). Manning Publications. ISBN 978-1617295027.
