プログラミング
Elixir-lang.org が新しいデザインに
Elixir-lang.org has a new design (elixir-lang.org)
要約
Elixir-lang.org のウェブサイトがリニューアルされました。Elixir は、データとドメインに焦点を当てた、明確で意図的なコードを書くための言語であり、回復力と保守性の高いシステム構築に適しています。この言語は、開発者からの評価も高く、生産性向上のためのツールや、GPU 支援、リアルタイム機能、IoT、分散システムなど、幅広い用途に対応しています。
全文翻訳
メンテナンス
Elixir は、開発者がデータとドメインに焦点を当てた、明確で意図的なコードを書くのを支援します。イミュータビリティ、メモリ安全性、そして Elixir の段階的な型システムのおかげで、障害から回復し、保守が容易なシステムを構築できます。
スケーラビリティ
単一の Elixir コードベースは、垂直方向(マルチコアマシン上)および水平方向(ノード間通信)にスケーリングでき、メッセージ指向および Web リアルタイムシステムで優れています。Numerical Elixir のようなプロジェクトと組み合わせることで、Elixir はコア、クラスタ、GPU 全体にスケーリングします。
開発者に愛されている
数年連続で、世界で最も称賛される言語の一つに選ばれました。調査結果をご覧ください。
生産性
Elixir には、パッケージマネージャー、コードフォーマッター、そしてクラス最高のドキュメントが付属しています。IEx(インタラクティブシェル)や Livebook(インタラクティブノートブック)のようなプロジェクトは、迅速なプロトタイピングと実行中のシステムのライブデバッグを可能にします。Phoenix Web フレームワークは迅速な開発を提供し、LiveView は最小限のコードでリアルタイム機能を追加し、Ecto はデータレイヤーを楽しく扱えるようにします。より速く、より大規模にデプロイしましょう。
Phoenix LiveView
Ecto
Plug
# ブラウザイベントからサーバーの状態を更新する
defmodule MyAppWeb.CounterLive do
use MyAppWeb, :live_view
def mount(_params, _session, socket) do
{:ok, assign(socket, count: 0)}
end
def handle_event("increment", _, socket) do
{:noreply, update(socket, :count, &(&1 + 1))}
end
end
Nerves は、オーバー・ザ・エア・アップデートと通信グレードの耐障害性を備えた、アプリケーション全体をコンパクトなファームウェアにパッケージ化します。一方、AtomVM は、マイクロコントローラのような小さなデバイスにも Elixir を提供します。
Nerves
AtomVM
# 監視プロセスからハードウェアを制御する
def handle_info(:toggle_led, %{led: led} = state) do
next_level = 1 - state.level
:ok = Circuits.GPIO.write(led, next_level)
Process.send_after(self(), :toggle_led, 500)
{:noreply, %{state | level: next_level}}
end
Numerical Elixir(Nx)は Elixir に GPU アクセラレーテッドテンソルをもたらし、Livebook は探索をインタラクティブにします。学習済みモデルの実行、データの可視化、デプロイをすべて 1 か所で行えます。
Nx
Livebook
Bumblebee
Axon
# Nx アクセラレーションで学習済みモデルを実行する
{:ok, model} = Bumblebee.load_model({:hf, "google/vit"})
{:ok, featurizer} = Bumblebee.load_featurizer({:hf, "google/vit"})
serving = Bumblebee.Vision.image_classification(model, featurizer, compile: [batch_size: 1], defn_options: [compiler: EXLA])
Nx.Serving.run(serving, image)
バックプレッシャーと並行処理でデータを大規模に処理します。Broadway はキューから数百万のイベントを処理し、Membrane はオーディオ、ビデオなどのためのコンポーザブルなパイプラインを提供します。
Broadway
Membrane
# Broadway は需要を制御し、バックプレッシャーを適用する
Broadway.start_link(MyPipeline, producer: [ module: BroadwaySQS.Producer ], processors: [ default: [concurrency: 50] ], batchers: [ storage: [batch_size: 100, batch_timeout: 1_000] ] )
Erlang VM のおかげで、Elixir は IoT、分散システム、そして Erlang が名高いあらゆるものにおいても優れています。以下の優れた Erlang プロジェクトをご覧ください。
EMQX
RabbitMQ
Riak
# Erlang の分散機能を通じてノードを接続する
edge_nodes = [:"edge@factory-1", :"edge@factory-2"]
Enum.each(edge_nodes, &Node.connect/1)
# 接続されているすべてのノードで並行して実行する
:erpc.multicall(edge_nodes, Sensor, :read_temperature, [])
何を構築しますか?
エコシステムは日々成長しています。Hex で数千ものコミュニティパッケージを探索し、次のプロジェクトのためのツールを見つけてください。
今すぐインストール
すべてのパッケージを見る
Erlang Ecosystem Foundation
財団に参加する