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と他言語の比較的紹介 ver.2

4,729 views

Published on

ElixirMeetup#2

Published in: Engineering
  • Be the first to comment

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

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

×