Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

6.809 visualizaciones

Publicado el

歌舞伎座Tech9 言語勉強会
elixir枠

Publicado en: Ingeniería
  • Sé el primero en comentar

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

  1. 1. Elixirについて私 が知ってる二、 三の事柄 歌舞伎座.tech #9 2016/3/20 異種プログラミング言語格闘勉強会 (Elixir枠)
  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. ※週4〜5リットル程飲んでますが、体に異常はありません
  11. 11. Elixirとは • JoseValimが開発しているErlangVM上で動作 する汎用プログラミング言語 • http://elixir-lang.org/ • https://github.com/elixir-lang/elixir • 動的な関数型言語 • スケーラブル/メンテナブルなアプリを書ける • 低レイテンシ/分散性/耐障害性をもつVM • Ruby/Erlang/Clojureに影響を受けた言語
  12. 12. Elixirの特徴 • ErlangVM上で動作する • Erlangの特徴をほぼ踏襲している – 並行/耐障害/分散/etc – Elixirの独自機能(Stream/Pipe/遅延処理/マクロ/ プロトコル/etc) • Erlangのエコシステムの恩恵を受けられる – オーバーヘッドなしにErlangの関数をcallできる • SyntaxはRubyチック – ただし見た目”だけ”、Rubyの皮を被ったErlang
  13. 13. Erlangの特徴 • Elixirの特徴はErlangの特徴でもある • アクターモデル(Scalaで言う所のAkka) • Let It Crash(Defensive Programmingと逆の思想) – 障害が起きたらクラッシュさせて、Supervisorで再起動 • 超軽量プロセス – 1プロセス30word程度、起動に数マイクロ秒、上限は2.6 億プロセス程度、GCはプロセス単位 • OTP(OpenTelecomPlatform)が強力 – 汎用的な並列/分散/障害処理のF/W – Elixirの言語自体もOTPのアプリとして言語ランタイムを提 供している
  14. 14. OTP • OpenTelecomPlatform – アプリケーション作成を助けるモジュール/パター ン(振る舞い/ビヘイビア)のセット – ElixirはErlangのOTPのラップしたものを提供 – 振る舞いが要求するcallbackを実装してアプリを 組み立てる • 振る舞い(ビヘイビア) – Application – Supervisor – GenServer – GenEvent – Agent(GenFsm) – Task – etc
  15. 15. Elixirの良い/悪い点 • 良い点 – Erlangの良い所全部 – 目に優しい(Erlangのコードに比べると) – Erlangのエコシステムを利用可能 – スケーリングが(比較的)楽にできる
  16. 16. Elixirの良い/悪い点 • 悪い点 – Erlangの悪い所全部 – ドラスティックに言語仕様が変わる • 開発スピード/言語仕様更新が早い • 開発スピード/言語仕様更新がとても早い – Erlang知らないとdebug辛い(中身はErlang) – ErlangVMはそんなに速く無い – Erlangのバージョン縛りがわりと強い – エコシステムがまだ十分に成熟してない – 静的型付けではない
  17. 17. Elixirのしくみ • OTPアプリケーションとして言語ランタイムを 提供 • コンパイルすると最終的にErlangの実行バイ ナリ(Beam)を吐く • ElixirからErlangのモジュールを呼んだり、 ErlangからElixirのモジュールを呼べる(オー バーヘッド無し)
  18. 18. 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
  19. 19. Erlangのコンパイル • Erlangのコンパイル 1. ソースファイルをスキャン(erl_scan)して文字列に 変換 2. ソースの文字列をトークンに変換 3. トークンをパース(erl_parse)してASTに変換 4. ASTをerl_evalして実行 or 5. ASTをコンパイル(compile)して実行ファイル (beam)に変換 6. BeamをVMにloadして実行
  20. 20. Erlangのコンパイル ソースコード xxx.erl 文字列 Token AST erl_scan erl_parse 実行ファイル xxx.beam compile VMにload &実行 erl_eval
  21. 21. 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して実行
  22. 22. Elixirのコンパイル ソースコード xxx.ex Elixir AST Erlang AST 実行ファイル xxx.beam compile VMにload &実行 erl_eval ASTレベルで変換 オーバー ヘッドなし ElixirのOTPアプリ ケーションで実現 シームレスにerlang のコードをcallできる
  23. 23. 他言語比較 • Elixir vs Scala vs Ruby – エコシステム,コミュニティ規模,ユーザー数 • Ruby > Scala > Elixir – 採用事例/仕事 • Ruby >> Scala >>> Elixir – 主要WAF • Elixir: Phoenix • Ruby: Rails • Scala: Play
  24. 24. Elixir vs Ruby • 関数型 vs 手続き型/OOP – Elixir: 関数型、メタプログラミング、マクロ – Ruby: 手続き型、OOP、メタプログラミング • ElixirコミュニティにはRubyクラスタの人達が 多い
  25. 25. Elixir vs Scala • アクターモデルのアーキテクチャ – Elixir:言語(ErlangVM)レベルで実装 – Scala:ライブラリ(Akka)レベルで実装 – 自由度:Elixir < Scala • ex) メールボックスの処理アルゴリズム(自前実装も可 能) – 処理性能:Elixir > Scala ※そこまで気にならない? • ElixirはGCによるStopTheWorldがない • 同時処理数/プロセス起動時間/プロセスマイグレー ション性能/プロセスの使用メモリ/スケーリング/etc
  26. 26. まとめ • 見た目はRuby、中身はErlang • Elixirを使う前にErlangを勉強したほうが捗る (と思います) • Erlangのエコシステムに乗っかれるよ • Erlangも(見た目以外は)面白い言語です • OTPに乗っかろう(レールに乗ろう) • (Erlang)VMはそんなに速く無い • (Erlang)VMのスケーリングは(比較的)楽
  27. 27. まとめ 見た目はRuby 中身はErlang
  28. 28. コミュニティの紹介 • 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
  29. 29. ドリコムは(プログラミング言語好きな) エンジニアを募集しています。 http://www.drecom.co.jp/recruit/ [PR]

×