Pereiti prie turinio

Elixir

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
   Šiam straipsniui ar jo daliai reikia daugiau nuorodų į patikimus šaltinius.
Jūs galite padėti Vikipedijai įrašydami tinkamas išnašas ar nuorodas į patikimus šaltinius.

Elixir – funkcinė programavimo kalba, vykdoma BEAM virtualioje mašinoje. Elixir sukurtas Erlang programavimo kalbos pagrindu ir turi tas pačias abstrakcijas, skirtas kurti plačiai naudojamoms, atsparioms gedimams programoms. Elixir taip pat siūlo įrankius bei savitą dizainą, kurį kompiliavimo metu palaiko meta programavimas makrokomandomis ir polimorfizmas.[1]

Elixir programuotojų bendruomenė organizuoja kasmetinius renginius JAV,[2] Europoje[3] ir Japonijoje,[4] taip pat mažesnius renginius vietinėse bendruomenėse.[5][6] Šiandien Lietuvoje Elixir bendruomenės nėra, ir programavimo kalba nėra plačiai naudojama.

Elixir programavimo kalbą 2012 metais sukūrė brazilas Žozė Valimas (José Valim) kaip tyrinėjimo ir plėtros projektą. Jo tikslas buvo sukurti platesnio pobūdžio bei produktyvumo įrankį Erlang virtualioje mašinoje, tuo pačiu palaikant Erlang ekosistemą.[7][8]

Elixir tinkama labai didelėms svetainėms bei aplikacijoms. Ji naudoja Erlang, Ruby, Clojure programavimo kalbų ypatybes, tam, kad būtų galima sukurti lygiagrečiai veikiančią (angl. high concurrent), bet mažo uždelsimo (angl. low latency) programavimo kalbą. Ji sukurta didelių duomenų kiekių apdorojimui. Elixir taip pat naudojama telekomunikacijos, elektroninės prekybos, finansų srityse.[9]

2021 m. Numerical Elixir paskelbė sieksianti dirbtinį intelektą, neuroninius tinklus, grafinių plokščių kompiliavimą, duomenų apdorojimą įtraukti į Elixir ekosistemą.[10]

Kiekviena mažoji versija (minor version) palaiko specifinį kiekį Erlang/OTP versijų.[11] Dabartinė stabili versija yra 1.17.13, išleista 2024 m. rugsėjo 18 d.

Šie pavyzdžiai gali buti nuskaitomi iex aplinkoje (shell) arba išsaugoti .ex .iex formato failuose ir paleisti per terminalą su komanda elixir <failo_pavadinimas>

Klasikinis "Hello world! ":

iex> IO.puts("Hello World! ")
Hello World!

Pipe operatorius:

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

Modelio sutapatinimas (eng. pattern matching):

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

iex> {:ok, [_ | rest]} = {:ok, [1, 2, 3]}
iex> rest
[2, 3]
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

Sąrašas:

iex> for n <- 1..5, rem(n, 2) == 1, do: n*n
[1, 9, 25]

Asinchroninis failų nuskaitymas:

1..5
|> Task.async_stream(&File.read! (#{&1}.txt“))
|> Stream.filter(fn {:ok, contents} -> String.trim(contents) != "" end)
|> Enum.join(„\n)

Tos pačios funkcijos aprašymas. Vykdoma tik ta, kuri atitinka sąlygą:

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

Reliacinės duomenų bazės naudojant Ecto biblioteką:

schema weather do
  field :city 
  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

Paeiliui kuriami 1000 skirtingų procesų:

for num <- 1..1000, do: spawn fn -> IO.puts(#{num * 2}“) end

Asinchroniškai vykdoma užduotis:

task = Task.async fn -> perform_complex_action() end
other_time_consuming_action()
Task.await task
  1. „Elixir“. José Valim. Nuoroda tikrinta 2013-02-17.
  2. „ElixirConf“. Nuoroda tikrinta 2018-07-11.
  3. „ElixirConf“. Nuoroda tikrinta 2018-07-11.
  4. „Erlang & Elixir Fest“. Suarchyvuotas originalas 2019-03-30. Nuoroda tikrinta 2019-02-18.
  5. „Elixir LDN“. Nuoroda tikrinta 2018-07-12.
  6. „EMPEX - Empire State Elixir Conference“. Nuoroda tikrinta 2018-07-12.
  7. Elixir - A modern approach to programming for the Erlang VM. Nuoroda tikrinta 2013-02-17.
  8. José Valim - ElixirConf EU 2017 Keynote. Suarchyvuota iš originalo 2021-11-17. Nuoroda tikrinta 2017-07-14.
  9. „Behinde the code: The One Who Created Elixir“. Nuoroda tikrinta 2019-11-25.
  10. „Numerical Elixir (Nx)“. Nuoroda tikrinta 2024-05-06.
  11. Elixir is a dynamic, functional language designed for building scalable and maintainable applications: elixir-lang/elixir, Elixir, 2019-04-21. Nuoroda tikrinta 21 balandžio 2019