![]() エリクサー | |
| パラダイム | マルチパラダイム:機能的、 並行的、分散的、プロセス指向 |
|---|---|
| デザイン: | ホセ・ヴァリム |
| 初登場 | 2012年 |
| 安定リリース | 1.17.3 [1]
/ 2024年9月18日 |
| タイピングの規律 | ダイナミック、強い |
| プラットフォーム | アーラン |
| ライセンス | Apacheライセンス2.0 [2] |
| ファイル名拡張子 | .ex、.exs |
| Webサイト | elixir.org より |
| 影響を受けた | |
| Clojure、Erlang、Ruby の | |
| 影響を受けた | |
| 輝き、LFE | |
Elixirは関数型、並行型、高水準の 汎用 プログラミング言語で、 BEAM 仮想マシン上で実行され、Erlangプログラミング言語の実装にも使用されています。[3] ElixirはErlangをベースに構築されており、分散型でフォールトトレラントなアプリケーションを構築するための同じ抽象化を共有しています。Elixirはツールと拡張可能な設計も提供しています。後者は、マクロによるコンパイル時のメタプログラミングとプロトコルを介したポリモーフィズムによってサポートされています。[4]
コミュニティは米国、[5]、ヨーロッパ、[6]、日本[7]で毎年イベントを開催しているほか、小規模な地域イベントや会議も開催しています。[8] [9]
歴史
ホセ・ヴァリムは、Plataformatecの研究開発プロジェクトとしてElixirプログラミング言語を開発しました。彼の目標は、Erlangのエコシステムとの互換性を維持しながら、Erlang VMの拡張性と生産性を高めることでした。[10] [11]
Elixirは大規模なサイトやアプリを対象としています。Ruby、Erlang、Clojureの機能を活用して、高並列性と低レイテンシの言語を開発しています。大量のデータを処理できるように設計されています。Elixirは通信、電子商取引、金融の分野でも使用されています。[12]
2021年には、機械学習、ニューラルネットワーク、GPUコンパイル、データ処理、計算ノートブックをElixirエコシステムに導入することを目標としたNumerical Elixirの取り組みが発表されました。[13]
バージョン管理
各マイナーバージョンは特定の範囲のErlang/ OTPバージョンをサポートしています。[14]現在の安定リリースバージョンは1.17.3です[1] 。
特徴
- ErlangのBEAM仮想マシン用のバイトコードにコンパイルされます。[15]実行時に影響を与えることなく、Erlangコードとの完全な相互運用性があります。
- Erlangの軽量な並行処理メカニズムによるスケーラビリティとフォールトトレランス[15]
- 依存関係の管理、コードのコンパイル、テストの実行、コードのフォーマット、リモート デバッグなどのための組み込みツール。
- Phoenix Webサーバーを含む実行中のプログラム内での対話型REPL。コードの再読み込みと内部状態へのアクセスが可能。
- すべては表現である[15]
- アサーションコードを促進するためのパターンマッチング[15] [16]
- 静的解析ツールの型ヒント
- 他の関数型言語と同様に、副作用ベースのループではなく再帰と高階関数を重視した不変データ
- メッセージパッシングによる共有なしの並行プログラミング(アクターモデル)[17]
- ストリームを使用した遅延および非同期コレクション
- 鉄道指向プログラミングの構造
with[ 18] - 抽象構文木(AST)への直接アクセスによる衛生的なメタプログラミング。[15]ライブラリは、データベースやテストなどの小さなドメイン固有言語を実装することがよくあります。
- コンパイル時のコード実行。Elixir コンパイラも BEAM 上で実行されるため、コンパイル中のモジュールは既にコンパイルされているコードをすぐに実行できます。
- プロトコルと呼ばれるメカニズムによるポリモーフィズム。ただし、 Clojureのような動的ディスパッチは、Elixir プロトコルが単一の型でディスパッチするため、複数のディスパッチはありません。
- Markdownフォーマット言語におけるPythonのようなdocstringによるドキュメントのサポート[15]
- UnicodeサポートとUTF-8文字列
例
次の例はiex シェルで実行することも、ファイルに保存してコマンドラインから入力して実行することもできます。
elixir <filename>
古典的なHello world の例:
iex> IO . puts ( "Hello World!" )
Hello World!
パイプ演算子:
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> |>列挙型. sum () 30
パターンマッチング(別名デストラクチャリング):
iex> %{左: x } = %{左: 5 、右: 8 } iex> x 5
iex> { :ok , [ _ |残り]} = { :ok , [ 1 , 2 , 3 ]} iex>残り[2, 3]
複数の句によるパターン マッチング:
iex> case File . read ( "path/to/file" ) do iex> { :ok , contents } -> IO . puts ( "ファイルが見つかりました: #{ contents } " ) iex> { :error , reason } -> IO . puts ( "ファイルが見つかりません: #{ reason } " ) iex> end
iex> n <- 1 .. 5 、rem ( n 、2 ) == 1 、do : n * n [1, 9, 25]を実行します。
ストリームを使用してファイルを非同期に読み取る:
1 .. 5
| > Task.async_stream ( & File.read ! ( " #{ & 1 } .txt" )) | > Stream.filter ( fn { : ok , contents } - > String.trim ( contents ) ! = " " end ) | > Enum.join ( " \ n " )
ガード付きの複数の関数本体:
def fib ( n ) n が[ 0 , 1 ]の範囲内にある場合、次のようにします。n def fib ( n )、次のようにします。fib ( n - 2 ) + fib ( n - 1 )
Ecto ライブラリを使用したリレーショナル データベース:
schema "weather" do field :city # デフォルトの型は :string field :temp_lo 、:integer field :temp_hi 、:integer field :prcp 、:float 、default : 0.0 end
天気|> where ( city : "Kraków" ) |> order_by ( :temp_lo ) |> limit ( 10 ) |> Repo . all
1,000 個のプロセスを順次生成します。
num <- 1 .. 1000の場合、次の操作を実行します: fn -> IO . puts ( " #{ num * 2 } " )終了
タスクを 非同期的に実行する:
task = Task.async fn - > perform_complex_action ( ) end other_time_ducing_action ( ) Task.await task
[要出典]
参照
参考文献
- ^ ab “リリース 1.17.3”. 2024年9月18日. 2024年9月21日閲覧。
- ^ 「elixir/LICENSE at master · elixir-lang/elixir · GitHub」。GitHub。
- ^ 「2018 年の最も人気のあるプログラミング言語 - Elite Infoworld ブログ」。2018 年 3 月 30 日。2018 年 5 月 9 日時点のオリジナルよりアーカイブ。2018年 5 月 8 日閲覧。
- ^ 「エリクサー」。ホセ・ヴァリム。2013 年 2 月 17 日に取得。
- ^ 「ElixirConf」 . 2018年7月11日閲覧。
- ^ 「ElixirConf」 . 2018年7月11日閲覧。
- ^ 「Erlang & Elixir Fest」。2019年2月18日閲覧。
- ^ 「Elixir LDN」 。 2018年7月12日閲覧。
- ^ 「EMPEX - Empire State Elixir Conference」。2018年7月12日閲覧。
- ^ Elixir - Erlang VM 向けプログラミングへの最新アプローチ。2013年 2 月 17 日閲覧。
- ^ José Valim - ElixirConf EU 2017 基調講演。2021年11月17日時点のオリジナルよりアーカイブ。2017年7月14日閲覧。
- ^ 「コードの背後に:Elixirを作った人」。2019年11月25日閲覧。
- ^ 「Numerical Elixir (Nx)」2024年5月6日閲覧。
- ^ Elixir は、スケーラブルで保守性の高いアプリケーションを構築するために設計された動的で機能的な言語です: elixir-lang/elixir、Elixir、2019-04-21、2019-04-21取得
- ^ abcdef 「Elixir」。2014年9月7日閲覧。
- ^ 「Elixir でアサーションコードを書く」。2014 年 9 月 24 日。2018年 7 月 5 日閲覧。
- ^ Loder, Wolfgang (2015 年 5 月 12 日)。命令型プログラマのための Erlang と Elixir。「第 16 章: コード構造化の概念」、セクション タイトル「アクター モデル」: Leanpub。2015年7 月 7 日閲覧。
{{cite book}}: CS1 メンテナンス: 場所 (リンク) - ^ Wlaschin, Scott (2013年5月). 「鉄道指向プログラミング」. F# for Fun and Profit . 2021年1月30日時点のオリジナルよりアーカイブ。2021年2月28日閲覧。
さらに読む
- Simon St. Laurent、J. Eisenberg (2016 年 12 月 22 日)。Elixir入門 :関数型プログラミング入門 第 2 版。O'Reilly Media。ASIN B01N9KCTIC。ISBN 978-1491956779。
- Sasa Juric ( 2019年 1 月 12 日)。Elixir in Action第 2 版。Manning Publications。ASIN B0978KZTJG。ISBN 978-1617295027。

