Eliksir (język programowania)
Paradygmaty | wieloparadygmat : funkcjonalny , współbieżny , rozproszony , zorientowany procesowo |
---|---|
Zaprojektowany przez | Jose Valim |
Po raz pierwszy pojawiły się | 2012 |
Wersja stabilna | |
Dyscyplina pisania | dynamiczny , mocny , kaczka |
Platforma | Erlang |
Licencja | Licencja Apache 2.0 |
Rozszerzenia nazw plików | .ex, .exs |
Strona internetowa | |
Pod wpływem | |
Clojure , Erlang , Ruby | |
Pod wpływem | |
LFE |
Elixir to funkcjonalny , współbieżny język programowania ogólnego przeznaczenia wysokiego poziomu , który działa na maszynie wirtualnej BEAM , która jest również używana do implementacji języka programowania Erlang . Elixir opiera się na Erlangu i ma te same abstrakcje do tworzenia aplikacji rozproszonych , odpornych na błędy . Elixir zapewnia również produktywne narzędzia i rozszerzalny projekt. To ostatnie jest obsługiwane przez metaprogramowanie w czasie kompilacji z makrami i polimorfizmem za pośrednictwem protokołów.
Elixir jest używany przez takie firmy jak Ramp, PagerDuty , Discord , Brex , E-MetroTel, Pinterest , Moz, Bleacher Report , The Outline , Inverse , Divvy, FarmBot oraz do budowy systemów wbudowanych . Społeczność organizuje coroczne wydarzenia w Stanach Zjednoczonych, Europie i Japonii, a także mniejsze lokalne imprezy i konferencje.
Historia
José Valim jest twórcą języka programowania Elixir, projektu badawczo-rozwojowego stworzonego w Plataformatec. Jego celem było umożliwienie większej rozszerzalności i produktywności maszyny wirtualnej Erlang przy jednoczesnym zachowaniu zgodności z ekosystemem Erlanga.
Elixir był skierowany do witryn i aplikacji na dużą skalę. Elixir wykorzystuje cechy Ruby , Erlang i Clojure do opracowania języka o „wysokiej współbieżności” i „niskim opóźnieniu”. Elixir został zaprojektowany do obsługi dużych wolumenów danych. Elixir jest używany w branży telekomunikacyjnej, eCommerce i finansowej.
12 lipca 2018 Honeypot wydał mini-dokument o Elixir.
Wersjonowanie
Elixir w większości opiera się na wersjonowaniu semantycznym i ma tylko 1 główną wersję bez planów na drugą. Każda z wersji pomocniczych obsługuje określony zakres wersji Erlang/ OTP . Obecna wersja stabilna to .
Cechy
- Kompiluje się do kodu bajtowego dla Erlang Virtual Machine (BEAM)
- Wszystko jest wyrazem
- Funkcje Erlanga można wywoływać z Elixira i odwrotnie, bez wpływu na czas wykonywania , dzięki kompilacji do kodu bajtowego Erlanga
- Metaprogramowanie umożliwiające bezpośrednią manipulację abstrakcyjnym drzewem składni (AST)
- Polimorfizm poprzez mechanizm zwany protokołami. Podobnie jak w Clojure , protokoły zapewniają mechanizm dynamicznej wysyłki . Jednak nie należy tego mylić z wysyłaniem wielokrotnym , ponieważ protokoły Elixir wysyłają na jednym typie.
- Obsługa dokumentacji za pomocą docstringów podobnych do Pythona w języku formatowania Markdown
- Programowanie współbieżne bez współdzielenia poprzez przekazywanie wiadomości ( model aktora )
- Nacisk na rekurencję i funkcje wyższego rzędu zamiast pętli opartych na efektach ubocznych
- Lekka współbieżność wykorzystująca mechanizmy Erlanga
-
Programowanie zorientowane na kolej za pomocą konstrukcji
with
- Wbudowane narzędzia do zarządzania zależnościami, kompilacji kodu, uruchamiania testów, formatowania kodu, zdalnego debugowania i nie tylko
- Leniwe i asynchroniczne kolekcje ze strumieniami
- Dopasowywanie wzorców w celu promowania asertywnego kodu
- Unicode i łańcuchy znaków UTF-8
Przykłady
Poniższe przykłady można uruchomić w powłoce iex
lub zapisać w pliku i uruchomić z wiersza poleceń , wpisując elixir <nazwa pliku>
.
Klasyczny przykład Hello world :
iex> IO . puts ( „Witaj, świecie!” ) Witaj, świecie!
iex> dla n <- [ 1 , 2 , 3 , 4 , 5 ], rem ( n , 2 ) == 1 , do : n * n [1, 9, 25]
Dopasowywanie wzorców (destrukturyzacja):
iex> [ 1 , za ] = [ 1 , 2 ] iex> a 2 iex> { :ok , [ cześć : a ]} = { : ok , [ cześć : "świat" ]} iex> a "świat"
Dopasowywanie wzorców (wiele klauzul):
iex> sprawa Plik . read ( "ścieżka/do/pliku" ) do iex> { :ok , zawartość } -> IO . puts ( "znaleziony plik: #{ zawartość } " ) iex> { :błąd , przyczyna } -> IO . puts ( "brakujący plik: #{ powód } " ) iex> end
Operator rurociągu:
iex> "1" |> Ciąg . to_integer () |> Jądro .* ( 2 ) 2
Moduły :
0 0
defmodule Zabawa do def fib ( ), do : def fib ( 1 ), do : 1 def fib ( n ), do : fib ( n - 2 ) + fib ( n - 1 ) koniec
Sekwencyjne uruchamianie tysiąca procesów:
dla num <- 1 .. 1000 wykonaj : spawn fn - > IO . stawia ( " #{ liczba * 2 } " ) koniec
Asynchroniczne wykonywanie zadania:
zadanie = zadanie . async fn -> perform_complex_action () koniec other_time_using_action () Zadanie . czekać na zadanie
Godne uwagi projekty Elixir
- Mix to narzędzie do automatyzacji kompilacji, które zapewnia zadania do tworzenia, kompilowania i testowania projektów Elixir, zarządzania jego zależnościami i nie tylko.
- Phoenix to framework do tworzenia stron internetowych napisany w Elixir, który implementuje wzorzec Model View Controller ( MVC ) po stronie serwera .