Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Elixir言語紹介
Learn Languages 2017 in ODC
おーはら@ohrdev
Agenda
• 自己紹介
• Elixir概要
• 他言語との比較
• Elixirウォークスルー
• 関数型言語としてのElixir
• アクターモデル
• Elixirの計算モデル
• Elixirのアーキテクチャ
• 何故Elixirを...
自己紹介
• おーはら
• Twitter: @ohrdev
• 所属: ドリコム
• Community: JapanElixirAssociation理事/tokyo.ex主催
• Work: ゲーム・サービス基盤、広告系サービス
• Li...
Elixir概要
• Elixirとは
• Erlang VM上で動作し、
• 耐障害性、ソフトリアルタイム、分散処理が得意な、
• メタプログラミング(マクロ)可能な、
• 軽量プロセスによるアクターモデルのパラダイムを持つ、
• 動的型付け...
他言語との比較
言語 型付け
(安全性保証)
型付け
(型検査タイミング)
純粋
(参照透過)
型推論
Haskell 強い 静的 ○ ○
Scala 強い 静的 × △
Elixir 強い 動的 × -
Clojure 強い 動的 × -
R...
Elixirウォークスルー(1)
• Hello, world モジュール
関数 iex = REPL
Elixirウォークスルー(2)
• フィボナッチ数
関数の引数のパターンマッチ
Elixirウォークスルー(3)
• ドキュメント
Elixirウォークスルー(4)
• ドキュメント例
• Phoenix Framework
Elixirウォークスルー(5)
• ドキュメントテスト
ドキュメント内のコードをテスト
mix = task runner
Elixirウォークスルー(N)
• その他、紹介しきれなかった特徴・機能
• メタプログラミング
• マクロ(Lispの様なAST操作、ただしS式ではなくタプルで表現)
• パターンマッチ
• 型システムは(まだ)ない
• 将来的に導入される...
関数型言語としてのElixir
• 関数型言語
• 関数型プログラミングを推奨する(行いやすい)プログラミング言語
• 関数型プログラミング
• 式や関数を主として計算(処理)を表現するプログラミングスタイル
• Elixirのプログラミングス...
アクターモデル
アクター1
(Elixirではプロセス)
アクター2
アクター3
アクターはアクターを生成できる
メッセージを保持するキュー(メールボックス)
メッセージ
アクターは別のアクターにメッセージを送信できる
受信したメッセージはメー...
Elixirの計算モデル
• 全てがErlangVM上のプロセスで表現される
• ex) iex, mix, elixir自身もErlangVM上のプロセスの集合体でしかない
• プロセスの集合=アプリ
• main関数はない、代わりにアプリ毎...
Elixirのアーキテクチャ
hardware
OS
ErlangVM
scheduler scheduler scheduler
CPUコア数だけ
スケジューラーを生成
プロセス
ノード
hardware
OS
ErlangVM
schedu...
何故Elixirを使うのか?
• 解決したいリアルの課題
• 自分のバックグラウンドはウェブ屋さん
• 大量のトラフィックを「安定して」「低コストで」「メンテナブル
に」捌きたい
• サービスを止める事なくプログラムをアップグレードしたい
• ...
何故Elixirを使うのか?
• ネットワークサーバーを書く為に使っている
• 耐障害性(VMが安定)
• OTPを使って並行処理が簡単に書ける
• 1TCPコネクションを1プロセスに割り当てる事が可能
• プロセスは超軽量なので大量のTCPコ...
まとめ
• リアルの問題をいかに解決できるかが大事
• 言語は道具
• まずは使ってみましょう
Upcoming SlideShare
Loading in …5
×

Elixir言語紹介

1,005 views

Published on

LL2017 in ODC

Published in: Engineering
  • Be the first to comment

Elixir言語紹介

  1. 1. Elixir言語紹介 Learn Languages 2017 in ODC おーはら@ohrdev
  2. 2. Agenda • 自己紹介 • Elixir概要 • 他言語との比較 • Elixirウォークスルー • 関数型言語としてのElixir • アクターモデル • Elixirの計算モデル • Elixirのアーキテクチャ • 何故Elixirを使うのか?
  3. 3. 自己紹介 • おーはら • Twitter: @ohrdev • 所属: ドリコム • Community: JapanElixirAssociation理事/tokyo.ex主催 • Work: ゲーム・サービス基盤、広告系サービス • Like: 自社仏閣,仏像鑑賞,仏像制作,VR,FF14(白70),ダイエット • LikeLang: Lisp,Erlang,Elixir,Ruby • etc • エンジニアHUB: Elixir入門記事 • https://employment.en-japan.com/engineerhub/entry/2017/06/12/110000 • https://employment.en-japan.com/engineerhub/entry/2017/06/19/110000
  4. 4. Elixir概要 • Elixirとは • Erlang VM上で動作し、 • 耐障害性、ソフトリアルタイム、分散処理が得意な、 • メタプログラミング(マクロ)可能な、 • 軽量プロセスによるアクターモデルのパラダイムを持つ、 • 動的型付けの、 • ネットワークサーバー構築に特化した、 • 非純粋な関数型言語 • のプログラミグ言語です。
  5. 5. 他言語との比較 言語 型付け (安全性保証) 型付け (型検査タイミング) 純粋 (参照透過) 型推論 Haskell 強い 静的 ○ ○ Scala 強い 静的 × △ Elixir 強い 動的 × - Clojure 強い 動的 × - Ruby 強い 動的 - - JavaScript 弱い 動的 - -
  6. 6. Elixirウォークスルー(1) • Hello, world モジュール 関数 iex = REPL
  7. 7. Elixirウォークスルー(2) • フィボナッチ数 関数の引数のパターンマッチ
  8. 8. Elixirウォークスルー(3) • ドキュメント
  9. 9. Elixirウォークスルー(4) • ドキュメント例 • Phoenix Framework
  10. 10. Elixirウォークスルー(5) • ドキュメントテスト ドキュメント内のコードをテスト mix = task runner
  11. 11. Elixirウォークスルー(N) • その他、紹介しきれなかった特徴・機能 • メタプログラミング • マクロ(Lispの様なAST操作、ただしS式ではなくタプルで表現) • パターンマッチ • 型システムは(まだ)ない • 将来的に導入される予定 • コンパイルするとErlangVMの実行バイナリ(beam)が吐かれる • Erlangのモジュールをシームレスに利用可能 • OTP(open telecom platform) • Elixir/Erlangで並行プログラムを書く際に利用できるパターン・フレームワーク • etc
  12. 12. 関数型言語としてのElixir • 関数型言語 • 関数型プログラミングを推奨する(行いやすい)プログラミング言語 • 関数型プログラミング • 式や関数を主として計算(処理)を表現するプログラミングスタイル • Elixirのプログラミングスタイル • プロセス(アクター)を主として計算(処理)を表現する • 関数を実行するプロセス同士が協調して処理を組み立てる • Elixirプログラミング = 関数型プログラミング + アクターモデル • ex) 状態の表現はどうするの? -> 状態を保持するプロセスを生成し、そ こから状態を取得する
  13. 13. アクターモデル アクター1 (Elixirではプロセス) アクター2 アクター3 アクターはアクターを生成できる メッセージを保持するキュー(メールボックス) メッセージ アクターは別のアクターにメッセージを送信できる 受信したメッセージはメールボックスに保持 アクターはメールボックス内の メッセージを処理できる アクターはそれぞれ 独立・並行に動作する
  14. 14. Elixirの計算モデル • 全てがErlangVM上のプロセスで表現される • ex) iex, mix, elixir自身もErlangVM上のプロセスの集合体でしかない • プロセスの集合=アプリ • main関数はない、代わりにアプリ毎にマスタープロセスがある • マスタープロセスを根とするプロセスツリーが、実際の処理を行う Application Master Process Supervisor Process Worker Process 子プロセスを監視 し、クラッシュし たら再起動する 関数を引数にとり 生成され、引数の 関数処理を行う Elixirアプリ ケーション
  15. 15. Elixirのアーキテクチャ hardware OS ErlangVM scheduler scheduler scheduler CPUコア数だけ スケジューラーを生成 プロセス ノード hardware OS ErlangVM scheduler scheduler scheduler network スケジューラ間でプロセス は最適にマイグレーション クラスタリング して通信可能 プロセス=超軽量 起動速度: 1プロセス数マイクロ秒 使用メモリ:約300word 透過的にメッ セージを送信可
  16. 16. 何故Elixirを使うのか? • 解決したいリアルの課題 • 自分のバックグラウンドはウェブ屋さん • 大量のトラフィックを「安定して」「低コストで」「メンテナブル に」捌きたい • サービスを止める事なくプログラムをアップグレードしたい • Ex) • 数千万のクライアントからのコネクションを同時に維持してpubsubする • WebSocketのコネクションを維持したままプログラムをバージョンアップ • 平時のトラフィックの数百倍のスパイクがきたとしても、クラッシュする事なく レスポンスを返す • その他たくさん
  17. 17. 何故Elixirを使うのか? • ネットワークサーバーを書く為に使っている • 耐障害性(VMが安定) • OTPを使って並行処理が簡単に書ける • 1TCPコネクションを1プロセスに割り当てる事が可能 • プロセスは超軽量なので大量のTCPコネクションを保持できる(ex: websocket) • 1台のサーバーでwsで200万同時接続してpubsubした事例 • http://phoenixframework.org/blog/the-road-to-2-million-websocket-connections • GCはプロセス毎に走るのでstop the worldが無い • プログラミング言語というよりサーバー記述用DSLという感覚
  18. 18. まとめ • リアルの問題をいかに解決できるかが大事 • 言語は道具 • まずは使ってみましょう

×