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

29
Elixir ににににに にににににに にににに にににに .tech #9 2016/3/20 にににににににににににににににに (Elixir に )

Upload: tsunenori-oohara

Post on 06-Jan-2017

4.960 views

Category:

Engineering


0 download

TRANSCRIPT

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

Elixirについて私が知ってる二、三の事柄歌舞伎座 .tech #9 2016/3/20異種プログラミング言語格闘勉強会

(Elixir枠 )

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

Agenda

はじめに|> 自己紹介|> Elixir とは|> Elixir の特徴|> Elixir の良い / 悪い点|> Elixir の仕組み|> 他言語比較

|> まとめ|> コミュニティの紹介|> 最後に ( 例のやつ

elixirの紹介します。

今日のゴールは elixirに興味

持ってもらう事。

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

はじめに

※ 個人の見解であり所属する組織の公式見解ではありません

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

はじめに

※ 個人の見解であり所属する組織の公式見解ではありません

ルビーパイソン

Elixir

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

はじめに スカラElixir

Elixir

※ 個人の見解であり所属する組織の公式見解ではありません

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

はじめに

Perl

Elixir

※ 個人の見解であり所属する組織の公式見解ではありません

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

はじめに

PHP※ 個人の見解であり所属する組織の公式見解ではありません

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

はじめにという話ではありません。プログラミング言語にはそれぞれ向き不向きな領域があります。用途に応じて使い分けるのが大切です。今日はまだまだ知名度はイマイチな Elixir の紹介をします。

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

自己紹介• おーはら (@ohrdev)• 好きな Behaviours : GenEvent• FF14( 光の戦士 : Lv60 白魔 )

– 中 2 っぽい名前のライブラリが Elixir には多い• 普段やってる事

– 寺社仏閣巡り / 写経 / 仏像彫り / 丸太収集– RedBull / ダイエット

• その他– 株式会社ドリコム 技術基盤部– 広告システムの開発 / メンテ /etc

• Elixir/Phoenix, Erlang/OTP, Lisp, Ruby/Rails• プロダクションで実際に Elixir を使ってます (1 年程 )

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

※ 週 4 〜 5 リットル程飲んでますが、体に異常はありません

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

Elixir とは• JoseValim が開発している ErlangVM 上で動作する汎用プログラミング言語• http://elixir-lang.org/• https://github.com/elixir-lang/elixir• 動的な関数型言語• スケーラブル / メンテナブルなアプリを書ける• 低レイテンシ / 分散性 / 耐障害性をもつ VM• Ruby/Erlang/Clojure に影響を受けた言語

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

Elixir の特徴• ErlangVM 上で動作する• Erlang の特徴をほぼ踏襲している– 並行 / 耐障害 / 分散 /etc– Elixir の独自機能 (Stream/Pipe/ 遅延処理 / マクロ

/ プロトコル /etc)• Erlang のエコシステムの恩恵を受けられる– オーバーヘッドなしに Erlang の関数を call できる

• Syntax は Ruby チック– ただし見た目”だけ”、 Ruby の皮を被った Erlang

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

Erlang の特徴• Elixir の特徴は Erlang の特徴でもある• アクターモデル (Scala で言う所の Akka)• Let It Crash(Defensive Programming と逆の思想 )

– 障害が起きたらクラッシュさせて、 Supervisor で再起動• 超軽量プロセス

– 1 プロセス 30word 程度、起動に数マイクロ秒、上限は2.6 億プロセス程度、 GC はプロセス単位

• OTP(OpenTelecomPlatform) が強力– 汎用的な並列 / 分散 / 障害処理の F/W– Elixir の言語自体も OTP のアプリとして言語ランタイムを提供している

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

OTP

• OpenTelecomPlatform– アプリケーション作成を助けるモジュール / パターン ( 振る舞い / ビヘイビア ) のセット– Elixir は Erlang の OTP のラップしたものを提供– 振る舞いが要求する callback を実装してアプリを組み立てる

• 振る舞い(ビヘイビア)– Application– Supervisor– GenServer– GenEvent

– Agent(GenFsm)– Task– etc

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

Elixir の良い / 悪い点• 良い点– Erlang の良い所全部– 目に優しい( Erlang のコードに比べると )– Erlang のエコシステムを利用可能– スケーリングが ( 比較的 ) 楽にできる

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

Elixir の良い / 悪い点• 悪い点– Erlang の悪い所全部– ドラスティックに言語仕様が変わる• 開発スピード / 言語仕様更新が早い• 開発スピード / 言語仕様更新がとても早い

– Erlang 知らないと debug 辛い ( 中身は Erlang)– ErlangVM はそんなに速く無い– Erlang のバージョン縛りがわりと強い– エコシステムがまだ十分に成熟してない–静的型付けではない

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

Elixir のしくみ• OTP アプリケーションとして言語ランタイムを提供• コンパイルすると最終的に Erlang の実行バイナリ (Beam) を吐く• Elixir から Erlang のモジュールを呼んだり、

Erlang から Elixir のモジュールを呼べる( オーバーヘッド無し )

Page 18: 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

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

Erlang のコンパイル• Erlang のコンパイル1. ソースファイルをスキャン (erl_scan) して文字列に変換2. ソースの文字列をトークンに変換3. トークンをパース (erl_parse) して AST に変換

4. AST を erl_eval して実行 or5. AST をコンパイル (compile) して実行ファイル

(beam) に変換6. Beam を VM に load して実行

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

Erlang のコンパイルソースコード

xxx.erl文字列 Token AST

erl_scan erl_parse

実行ファイルxxx.beam

compile

VM に load& 実行

erl_eval

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

Elixir のコンパイル• Elixir のコンパイル

1. Elixir のソースフィルを Elixir の AST に変換2. Elixir の AST を Erlang の AST に変換3. Erlang の AST を erl_eval して実行 or4. AST をコンパイル (compile) して実行ファイル

(beam) に変換5. Beam を VM に load して実行

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

Elixir のコンパイルソースコード

xxx.exElixir AST Erlang AST

実行ファイルxxx.beam

compile

VM に load& 実行

erl_eval

AST レベルで変換 オーバーヘッドなし

Elixir の OTP アプリケーションで実現

シームレスにerlang のコードを

call できる

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

他言語比較• Elixir vs Scala vs Ruby– エコシステム , コミュニティ規模 , ユーザー数• Ruby > Scala > Elixir

–採用事例 / 仕事• Ruby >> Scala >>> Elixir

–主要 WAF• Elixir: Phoenix• Ruby: Rails• Scala: Play

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

Elixir vs Ruby

• 関数型 vs 手続き型 /OOP– Elixir: 関数型、メタプログラミング、マクロ– Ruby: 手続き型、 OOP 、メタプログラミング

• Elixir コミュニティには Ruby クラスタの人達が多い

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

Elixir vs Scala

• アクターモデルのアーキテクチャ– Elixir: 言語 (ErlangVM) レベルで実装– Scala: ライブラリ (Akka) レベルで実装– 自由度: Elixir < Scala

• ex) メールボックスの処理アルゴリズム ( 自前実装も可能 )– 処理性能: Elixir > Scala ※ そこまで気にならない ?

• Elixir は GC による StopTheWorld がない• 同時処理数 / プロセス起動時間 / プロセスマイグレーション性能 / プロセスの使用メモリ / スケーリング /etc

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

まとめ• 見た目は Ruby 、中身は Erlang• Elixir を使う前に Erlang を勉強したほうが捗る ( と思います )• Erlang のエコシステムに乗っかれるよ• Erlang も ( 見た目以外は ) 面白い言語です• OTP に乗っかろう ( レールに乗ろう)• (Erlang)VM はそんなに速く無い• (Erlang)VM のスケーリングは ( 比較的 ) 楽

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

まとめ見た目は Ruby中身は Erlang

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

コミュニティの紹介• 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 beamhttp://sapporo-beam.github.io

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

ドリコムは (プログラミング言語好きな )エンジニアを募集しています。http://www.drecom.co.jp/recruit/

[PR]