SlideShare a Scribd company logo
1 of 32
Elixirと他言語の
比較的紹介
ver.2
Elixir Meetup #2
Agenda
はじめに
|> 自己紹介
|> Elixirとは
|> Elixirの特徴
|> Elixirの良い/悪い点
|> Elixirの仕組み
|> 他言語比較
|> まとめ
|> コミュニティの紹介
|> 最後に(例のやつ
はじめに
※個人の見解であり所属する組織の公式見解ではありません
はじめに
※個人の見解であり所属する組織の公式見解ではありません
ル
ビ
ー
パ
イ
ソ
ン
Elixir
はじめに
ス
カ
ラ
Elixir
Elixir
※個人の見解であり所属する組織の公式見解ではありません
はじめに
Perl
Elixir
※個人の見解であり所属する組織の公式見解ではありません
はじめに
PHP
※個人の見解であり所属する組織の公式見解ではありません
はじめに
という話ではあり
ません。
プログラミング言語にはそれぞれ向き不向きな
領域があります。用途に応じて使い分けるのが
大切です。
今日はまだまだ知名度はイマイチなElixirの紹
介をします。
自己紹介
• おーはら(@ohrdev)
• 好きなBehaviours:GenEvent
• FF14(光の戦士: Lv60白魔)
– 中2っぽい名前のライブラリがElixirには多い
• 普段やってる事
– 寺社仏閣巡り/写経/仏像彫り/丸太収集
– RedBull / ダイエット
• その他
– 株式会社ドリコム 技術基盤部
– 広告システムの開発/メンテ/etc
• Elixir/Phoenix, Erlang/OTP, Lisp, Ruby/Rails
• プロダクションで実際にElixirを使ってます(1年程)
Elixirとは
• JoseValimが開発しているErlangVM上で動作
する汎用プログラミング言語
• http://elixir-lang.org/
• https://github.com/elixir-lang/elixir
• 動的な関数型言語
• スケーラブル/メンテナブルなアプリを書ける
• 低レイテンシ/分散性/耐障害性をもつVM
• Ruby/Erlang/Clojureに影響を受けた言語
Elixirの特徴
• ErlangVM上で動作する
• Erlangの特徴をほぼ踏襲している
– 並行/耐障害/分散/etc
– Elixirの独自機能(Stream/Pipe/遅延処理/マクロ/
プロトコル/etc)
• Erlangのエコシステムの恩恵を受けられる
– オーバーヘッドなしにErlangの関数をcallできる
• SyntaxはRubyチック
– ただし見た目”だけ”、Rubyの皮を被ったErlang
Erlangの特徴
• Elixirの特徴はErlangの特徴でもある
• アクターモデル(Scalaで言う所のAkka)
• Let It Crash(Defensive Programmingと逆の思想)
– 障害が起きたらクラッシュさせて、Supervisorで再起動
• 超軽量プロセス
– 1プロセス30word程度、起動に数マイクロ秒、上限は2.6
億プロセス程度、GCはプロセス単位
• OTP(OpenTelecomPlatform)が強力
– 汎用的な並列/分散/障害処理のF/W
– Elixirの言語自体もOTPのアプリとして言語ランタイムを提
供している
OTP
• OpenTelecomPlatform
– アプリケーション作成を助けるモジュール/パター
ン(振る舞い/ビヘイビア)のセット
– ElixirはErlangのOTPのラップしたものを提供
– 振る舞いが要求するcallbackを実装してアプリを
組み立てる
• 振る舞い(ビヘイビア)
– Application
– Supervisor
– GenServer
– GenEvent
– Agent(GenFsm)
– Task
– etc
Elixirの良い/悪い点
• 良い点
– Erlangの良い所全部
– 目に優しい(Erlangのコードに比べると)
– Erlangのエコシステムを利用可能
– スケーリングが(比較的)楽にできる
Elixirの良い/悪い点
• 悪い点
– Erlangの悪い所全部
– ドラスティックに言語仕様が変わる
• 開発スピード/言語仕様更新が早い
• 開発スピード/言語仕様更新がとても早い
– Erlang知らないとdebug辛い(中身はErlang)
– ErlangVMはそんなに速く無い
– Erlangのバージョン縛りがわりと強い
– エコシステムがまだ十分に成熟してない
– 静的型付けではない
Elixirのしくみ
• OTPアプリケーションとして言語ランタイムを
提供
• コンパイルすると最終的にErlangの実行バイ
ナリ(Beam)を吐く
• ElixirからErlangのモジュールを呼んだり、
ErlangからElixirのモジュールを呼べる(オー
バーヘッド無し)
Elixirの仕組み
• コンパイラはErlang実装
– Leex(Lexical analyzer generator for Erlang)
• 現在は使われていない(elixir_tokenizerモジュールを
JoseValimがElixir用に作成)
– Yecc(LALR-1 Parser Generator for Erlang)
• カーネルはElixir実装
• 周辺ツール
– eex/ex_unit/iex/logger/mix
• サブ/関連プロジェクト
– plug/ecto/hexpm
Erlangのコンパイル
• Erlangのコンパイル
1. ソースファイルをスキャン(erl_scan)して文字列に
変換
2. ソースの文字列をトークンに変換
3. トークンをパース(erl_parse)してASTに変換
4. ASTをerl_evalして実行 or
5. ASTをコンパイル(compile)して実行ファイル
(beam)に変換
6. BeamをVMにloadして実行
Erlangのコンパイル
ソースコード
xxx.erl
文字列 Token AST
erl_scan erl_parse
実行ファイル
xxx.beam
compile
VMにload
&実行
erl_eval
Elixirのコンパイル
• Elixirのコンパイル
1. ElixirのソースフィルをElixirのASTに変換
2. ElixirのASTをErlangのASTに変換
3. ErlangのASTをerl_evalして実行 or
4. ASTをコンパイル(compile)して実行ファイル
(beam)に変換
5. BeamをVMにloadして実行
Elixirのコンパイル
ソースコード
xxx.ex
Elixir AST Erlang AST
実行ファイル
xxx.beam
compile
VMにload
&実行
erl_eval
ASTレベルで変換 オーバー
ヘッドなし
ElixirのOTPアプリ
ケーションで実現
シームレスにerlang
のコードをcallできる
他言語比較
• Elixir vs Scala vs Ruby
– エコシステム,コミュニティ規模,ユーザー数
• Ruby > Scala > Elixir
– 採用事例/仕事
• Ruby >> Scala >>> Elixir
– 主要WAF
• Elixir: Phoenix
• Ruby: Rails
• Scala: Play
Elixir vs Ruby
• 関数型 vs 手続き型/OOP
– Elixir: 関数型、メタプログラミング、マクロ
– Ruby: 手続き型、OOP、メタプログラミング
• ElixirコミュニティにはRubyクラスタの人達が
多い
Elixir vs Scala
• アクターモデルのアーキテクチャ
– Elixir:言語(ErlangVM)レベルで実装
– Scala:ライブラリ(Akka)レベルで実装
– 自由度:Elixir < Scala
• ex) メールボックスの処理アルゴリズム(自前実装も可
能)
– 処理性能:Elixir > Scala ※そこまで気にならない?
• ElixirはGCによるStopTheWorldがない
• 同時処理数/プロセス起動時間/プロセスマイグレー
ション性能/プロセスの使用メモリ/スケーリング/etc
コードサンプル(Elixir)
コードサンプル(Elixir)
コードサンプル(Erlang)
まとめ
• 見た目はRuby、中身はErlang
• Elixirを使う前にErlangを勉強したほうが捗る
(と思います)
• Erlangのエコシステムに乗っかれるよ
• Erlangも(見た目以外は)面白い言語です
• OTPに乗っかろう(レールに乗ろう)
• (Erlang)VMはそんなに速く無い
• (Erlang)VMのスケーリングは(比較的)楽
まとめ
見た目はRuby
中身はErlang
コミュニティの紹介
• meguro.ex
– 4/19(火)に#1を予定しています
– 会場はアカツキさんのオフィスの予定
http://aktsk.jp/recruit/category/new_service_engin
eer.html
• sapporo beam
http://sapporo-beam.github.io
おまけ
• トラッキングしておくと良いかもしれない言語
– Pony
• http://www.ponylang.org/
• http://www.slideshare.net/matsu_chara/pony-
concurrency-built-into-the-type-system-59778750
• OOP
• アクターモデル
• HighPerformance
• ErlangのOTP相当のものもある
• Post Erlang?
ドリコムは(プログラミング言語好きな)
エンジニアを募集しています。
http://www.drecom.co.jp/recruit/
[PR]

More Related Content

What's hot

オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 
HttpClient詳解、或いは非同期の落とし穴について
HttpClient詳解、或いは非同期の落とし穴についてHttpClient詳解、或いは非同期の落とし穴について
HttpClient詳解、或いは非同期の落とし穴について
Yoshifumi Kawai
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
 
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
Insight Technology, Inc.
 

What's hot (20)

オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
HttpClient詳解、或いは非同期の落とし穴について
HttpClient詳解、或いは非同期の落とし穴についてHttpClient詳解、或いは非同期の落とし穴について
HttpClient詳解、或いは非同期の落とし穴について
 
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
 
goで末尾再帰最適化は使えるか?
goで末尾再帰最適化は使えるか?goで末尾再帰最適化は使えるか?
goで末尾再帰最適化は使えるか?
 
マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャ
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
[C16] インメモリ分散KVSの弱点。一貫性が崩れる原因と、それを克服する技術とは? by Taichi Umeda
 
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
ワタシはSingletonがキライだ
ワタシはSingletonがキライだワタシはSingletonがキライだ
ワタシはSingletonがキライだ
 
2018/1/30 Django勉強会
2018/1/30 Django勉強会2018/1/30 Django勉強会
2018/1/30 Django勉強会
 
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
ホットペッパービューティーにおけるモバイルアプリ向けAPIのBFF/Backend分割
 
TRICK 2022 Results
TRICK 2022 ResultsTRICK 2022 Results
TRICK 2022 Results
 

Viewers also liked

Viewers also liked (6)

Elixir v1.3 で入るかもしれない機能
Elixir v1.3 で入るかもしれない機能Elixir v1.3 で入るかもしれない機能
Elixir v1.3 で入るかもしれない機能
 
Joe Emison - 10X Product Development
Joe Emison - 10X Product DevelopmentJoe Emison - 10X Product Development
Joe Emison - 10X Product Development
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
 
とにかく楽してVue.jsでTypeScriptを使いたい
とにかく楽してVue.jsでTypeScriptを使いたいとにかく楽してVue.jsでTypeScriptを使いたい
とにかく楽してVue.jsでTypeScriptを使いたい
 
4つの戦犯から考えるサービスづくりの失敗
4つの戦犯から考えるサービスづくりの失敗4つの戦犯から考えるサービスづくりの失敗
4つの戦犯から考えるサービスづくりの失敗
 

More from Tsunenori Oohara

失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発
Tsunenori Oohara
 

More from Tsunenori Oohara (20)

Elixirハンズオン2
Elixirハンズオン2Elixirハンズオン2
Elixirハンズオン2
 
meguro.rb LT
meguro.rb LTmeguro.rb LT
meguro.rb LT
 
Elixir解答
Elixir解答Elixir解答
Elixir解答
 
Elixir言語紹介
Elixir言語紹介Elixir言語紹介
Elixir言語紹介
 
パンチラに関する考察
パンチラに関する考察パンチラに関する考察
パンチラに関する考察
 
how-to-learn-elixir
how-to-learn-elixirhow-to-learn-elixir
how-to-learn-elixir
 
Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
 
Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11Elixirハンズオン-2017-03-11
Elixirハンズオン-2017-03-11
 
Re:デブ デブナイト vol.2 LT
Re:デブ デブナイト vol.2 LTRe:デブ デブナイト vol.2 LT
Re:デブ デブナイト vol.2 LT
 
失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発失敗という概念が存在しない退屈なweb開発
失敗という概念が存在しない退屈なweb開発
 
Tokyoex6 EEx
Tokyoex6 EExTokyoex6 EEx
Tokyoex6 EEx
 
running-elixir-in-production
running-elixir-in-productionrunning-elixir-in-production
running-elixir-in-production
 
hello waf, hello phoenix
hello waf, hello phoenixhello waf, hello phoenix
hello waf, hello phoenix
 
tokyo.ex3 LT
tokyo.ex3 LTtokyo.ex3 LT
tokyo.ex3 LT
 
running web app on elixir
running web app on elixirrunning web app on elixir
running web app on elixir
 
Elixir lang bootstrap
Elixir lang bootstrapElixir lang bootstrap
Elixir lang bootstrap
 
Elixirについて私が知ってる二、三の事柄
Elixirについて私が知ってる二、三の事柄Elixirについて私が知ってる二、三の事柄
Elixirについて私が知ってる二、三の事柄
 
elixir in production
elixir in productionelixir in production
elixir in production
 
地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)地獄のElixir(目黒スタートアップ勉強会)
地獄のElixir(目黒スタートアップ勉強会)
 
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
 

Elixirと他言語の比較的紹介 ver.2