Elixirについて私
が知ってる二、
三の事柄
歌舞伎座.tech #9 2016/3/20
異種プログラミング言語格闘勉強会
(Elixir枠)
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年程)
※週4〜5リットル程飲んでますが、体に異常はありません
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)
– 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
まとめ
• 見た目はRuby、中身はErlang
• Elixirを使う前にErlangを勉強したほうが捗る
(と思います)
• Erlangのエコシステムに乗っかれるよ
• Erlangも(見た目以外は)面白い言語です
• OTPに乗っかろう(レールに乗ろう)
• (Erlang)VMはそんなに速く無い
• (Erlang)VMのスケーリングは(比較的)楽
まとめ
見た目はRuby
中身はErlang
コミュニティの紹介
• ElixirMeetup#2
– 3/21(月)
http://beam-lang.connpass.com/event/25287
• meguro.ex
– 4/19(火)に#1を予定しています
– 会場はアカツキさんのオフィスの予定
http://aktsk.jp/recruit/category/new_service_engineer.html
• sapporo beam
http://sapporo-beam.github.io
ドリコムは(プログラミング言語好きな)
エンジニアを募集しています。
http://www.drecom.co.jp/recruit/
[PR]

More Related Content

PPTX
Elixirと他言語の比較的紹介 ver.2
PPTX
Elixirハンズオン-2017-03-11
PPTX
Elixir言語紹介
PPTX
地獄のElixir(目黒スタートアップ勉強会)
PPTX
失敗という概念が存在しない退屈なweb開発
PPTX
running web app on elixir
PPTX
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
PDF
パーフェクト"Elixir情報収集"
Elixirと他言語の比較的紹介 ver.2
Elixirハンズオン-2017-03-11
Elixir言語紹介
地獄のElixir(目黒スタートアップ勉強会)
失敗という概念が存在しない退屈なweb開発
running web app on elixir
Shibuya.ex #1 Elixirを本番環境で使ってみたという事例紹介
パーフェクト"Elixir情報収集"

Viewers also liked (20)

PDF
elixirを使ったゲームサーバ
PDF
Regular expressions à la carte
PDF
Pony concurrency built into the type system
PDF
Ruby 風シンタックスな静的言語 Crystal の紹介
PDF
Visulan intro
PDF
プログラミング・パラダイム
PDF
Lin 通信
PPTX
TravisCIでErlang/OTP (最小構成版)
KEY
Getting Rest With Webmachine
PDF
Terraform始めました
KEY
Clojure入門
PPTX
tokyo.ex3 LT
PDF
中高生向けUnity講座
PPTX
Unityで使うRabbitMQ
ODP
非同期データ更新のためにメッセージキューを導入した(い)話
PDF
IEXを学ぶ
PDF
Rubyの拡張をCrystalで書いてみる
PDF
Experiments in Sharing Java VM Technology with CRuby
PPTX
Elixir v1.3 で入るかもしれない機能
PDF
Windows 10 の あたらしい Web ブラウザー について
elixirを使ったゲームサーバ
Regular expressions à la carte
Pony concurrency built into the type system
Ruby 風シンタックスな静的言語 Crystal の紹介
Visulan intro
プログラミング・パラダイム
Lin 通信
TravisCIでErlang/OTP (最小構成版)
Getting Rest With Webmachine
Terraform始めました
Clojure入門
tokyo.ex3 LT
中高生向けUnity講座
Unityで使うRabbitMQ
非同期データ更新のためにメッセージキューを導入した(い)話
IEXを学ぶ
Rubyの拡張をCrystalで書いてみる
Experiments in Sharing Java VM Technology with CRuby
Elixir v1.3 で入るかもしれない機能
Windows 10 の あたらしい Web ブラウザー について
Ad

More from Tsunenori Oohara (13)

PPTX
Elixirハンズオン2
PPTX
meguro.rb LT
PPTX
Elixir解答
PDF
パンチラに関する考察
PPTX
how-to-learn-elixir
PPTX
Elixir-Conf-Japan-2017-session-ohr486
PPTX
Re:デブ デブナイト vol.2 LT
PPTX
Tokyoex6 EEx
PPTX
running-elixir-in-production
PPTX
hello waf, hello phoenix
PPTX
Elixir lang bootstrap
PPTX
elixir in production
PDF
地獄Spec
Elixirハンズオン2
meguro.rb LT
Elixir解答
パンチラに関する考察
how-to-learn-elixir
Elixir-Conf-Japan-2017-session-ohr486
Re:デブ デブナイト vol.2 LT
Tokyoex6 EEx
running-elixir-in-production
hello waf, hello phoenix
Elixir lang bootstrap
elixir in production
地獄Spec
Ad

Elixirについて私が知ってる二、三の事柄