Elixir

From Wikipedia, the free encyclopedia

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]

   Š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 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.

Istorija

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]

Versijavimas

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.

Pavyzdžiai

Š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

Išnašos

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.