SlideShare une entreprise Scribd logo
1  sur  18
Elixir言語紹介
Learn Languages 2017 in ODC
おーはら@ohrdev
Agenda
• 自己紹介
• Elixir概要
• 他言語との比較
• Elixirウォークスルー
• 関数型言語としてのElixir
• アクターモデル
• Elixirの計算モデル
• Elixirのアーキテクチャ
• 何故Elixirを使うのか?
自己紹介
• おーはら
• 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
Elixir概要
• Elixirとは
• Erlang VM上で動作し、
• 耐障害性、ソフトリアルタイム、分散処理が得意な、
• メタプログラミング(マクロ)可能な、
• 軽量プロセスによるアクターモデルのパラダイムを持つ、
• 動的型付けの、
• ネットワークサーバー構築に特化した、
• 非純粋な関数型言語
• のプログラミグ言語です。
他言語との比較
言語 型付け
(安全性保証)
型付け
(型検査タイミング)
純粋
(参照透過)
型推論
Haskell 強い 静的 ○ ○
Scala 強い 静的 × △
Elixir 強い 動的 × -
Clojure 強い 動的 × -
Ruby 強い 動的 - -
JavaScript 弱い 動的 - -
Elixirウォークスルー(1)
• Hello, world モジュール
関数 iex = REPL
Elixirウォークスルー(2)
• フィボナッチ数
関数の引数のパターンマッチ
Elixirウォークスルー(3)
• ドキュメント
Elixirウォークスルー(4)
• ドキュメント例
• Phoenix Framework
Elixirウォークスルー(5)
• ドキュメントテスト
ドキュメント内のコードをテスト
mix = task runner
Elixirウォークスルー(N)
• その他、紹介しきれなかった特徴・機能
• メタプログラミング
• マクロ(Lispの様なAST操作、ただしS式ではなくタプルで表現)
• パターンマッチ
• 型システムは(まだ)ない
• 将来的に導入される予定
• コンパイルするとErlangVMの実行バイナリ(beam)が吐かれる
• Erlangのモジュールをシームレスに利用可能
• OTP(open telecom platform)
• Elixir/Erlangで並行プログラムを書く際に利用できるパターン・フレームワーク
• etc
関数型言語としてのElixir
• 関数型言語
• 関数型プログラミングを推奨する(行いやすい)プログラミング言語
• 関数型プログラミング
• 式や関数を主として計算(処理)を表現するプログラミングスタイル
• Elixirのプログラミングスタイル
• プロセス(アクター)を主として計算(処理)を表現する
• 関数を実行するプロセス同士が協調して処理を組み立てる
• Elixirプログラミング = 関数型プログラミング + アクターモデル
• ex) 状態の表現はどうするの? -> 状態を保持するプロセスを生成し、そ
こから状態を取得する
アクターモデル
アクター1
(Elixirではプロセス)
アクター2
アクター3
アクターはアクターを生成できる
メッセージを保持するキュー(メールボックス)
メッセージ
アクターは別のアクターにメッセージを送信できる
受信したメッセージはメールボックスに保持
アクターはメールボックス内の
メッセージを処理できる
アクターはそれぞれ
独立・並行に動作する
Elixirの計算モデル
• 全てがErlangVM上のプロセスで表現される
• ex) iex, mix, elixir自身もErlangVM上のプロセスの集合体でしかない
• プロセスの集合=アプリ
• main関数はない、代わりにアプリ毎にマスタープロセスがある
• マスタープロセスを根とするプロセスツリーが、実際の処理を行う
Application
Master Process
Supervisor
Process
Worker
Process
子プロセスを監視
し、クラッシュし
たら再起動する
関数を引数にとり
生成され、引数の
関数処理を行う
Elixirアプリ
ケーション
Elixirのアーキテクチャ
hardware
OS
ErlangVM
scheduler scheduler scheduler
CPUコア数だけ
スケジューラーを生成
プロセス
ノード
hardware
OS
ErlangVM
scheduler scheduler scheduler
network
スケジューラ間でプロセス
は最適にマイグレーション
クラスタリング
して通信可能
プロセス=超軽量
起動速度: 1プロセス数マイクロ秒
使用メモリ:約300word
透過的にメッ
セージを送信可
何故Elixirを使うのか?
• 解決したいリアルの課題
• 自分のバックグラウンドはウェブ屋さん
• 大量のトラフィックを「安定して」「低コストで」「メンテナブル
に」捌きたい
• サービスを止める事なくプログラムをアップグレードしたい
• Ex)
• 数千万のクライアントからのコネクションを同時に維持してpubsubする
• WebSocketのコネクションを維持したままプログラムをバージョンアップ
• 平時のトラフィックの数百倍のスパイクがきたとしても、クラッシュする事なく
レスポンスを返す
• その他たくさん
何故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という感覚
まとめ
• リアルの問題をいかに解決できるかが大事
• 言語は道具
• まずは使ってみましょう

Contenu connexe

Similaire à Elixir言語紹介

Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!Hideki Takase
 
パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"Keisuke Takahashi
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたしRyunosuke SATO
 
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開Hideki Takase
 
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作uchan_nos
 
My開発環境の話
My開発環境の話My開発環境の話
My開発環境の話Yuta Ohashi
 
Devsumi2019 jaws festa_at_fun_location
Devsumi2019 jaws festa_at_fun_locationDevsumi2019 jaws festa_at_fun_location
Devsumi2019 jaws festa_at_fun_locationひろき こにし
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 

Similaire à Elixir言語紹介 (12)

how-to-learn-elixir
how-to-learn-elixirhow-to-learn-elixir
how-to-learn-elixir
 
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
 
パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"パーフェクト"Elixir情報収集"
パーフェクト"Elixir情報収集"
 
hello waf, hello phoenix
hello waf, hello phoenixhello waf, hello phoenix
hello waf, hello phoenix
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたし
 
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
 
OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作OpeLa セルフホストなOSと言語処理系の自作
OpeLa セルフホストなOSと言語処理系の自作
 
Elixir lang bootstrap
Elixir lang bootstrapElixir lang bootstrap
Elixir lang bootstrap
 
My開発環境の話
My開発環境の話My開発環境の話
My開発環境の話
 
Devsumi2019 jaws festa_at_fun_location
Devsumi2019 jaws festa_at_fun_locationDevsumi2019 jaws festa_at_fun_location
Devsumi2019 jaws festa_at_fun_location
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
IEXを学ぶ
IEXを学ぶIEXを学ぶ
IEXを学ぶ
 

Plus de Tsunenori Oohara

Plus de Tsunenori Oohara (11)

Elixirハンズオン2
Elixirハンズオン2Elixirハンズオン2
Elixirハンズオン2
 
meguro.rb LT
meguro.rb LTmeguro.rb LT
meguro.rb LT
 
Elixir解答
Elixir解答Elixir解答
Elixir解答
 
パンチラに関する考察
パンチラに関する考察パンチラに関する考察
パンチラに関する考察
 
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
 
Re:デブ デブナイト vol.2 LT
Re:デブ デブナイト vol.2 LTRe:デブ デブナイト vol.2 LT
Re:デブ デブナイト vol.2 LT
 
Tokyoex6 EEx
Tokyoex6 EExTokyoex6 EEx
Tokyoex6 EEx
 
running-elixir-in-production
running-elixir-in-productionrunning-elixir-in-production
running-elixir-in-production
 
tokyo.ex3 LT
tokyo.ex3 LTtokyo.ex3 LT
tokyo.ex3 LT
 
elixir in production
elixir in productionelixir in production
elixir in production
 
地獄Spec
地獄Spec地獄Spec
地獄Spec
 

Elixir言語紹介