37
Elixir�触ってみた� @�Ruby札幌28 ヽ(´・⾁・`)ノ

Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

Elixir�触ってみた�@�Ruby札幌28ヽ(´・⾁・`)ノ

Page 2: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

本⼈いわく

http://elixir-lang.org/に書いてある�Elixir�による自⼰紹介

Page 3: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

全部が式

��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

Page 4: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

全部が式(2)

module�は沢⼭の式からなりたっている.

module�の内容をプログラムで書ける

メタプログラミングできる

Page 5: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

メタプログラミングとDSL

DSL�を簡単に作れる(ExUnitの例)

��������������������������������������

������������������������������������������������������������

Page 6: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

protocol�によるポリモーフィズム

ファイルにも配列にも使えるEnumモジュール

�������������������������������������������������

������

��������������������������������������������������������������������������������������������������������������������������������������

Page 7: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

protocol�によるポリモーフィズム(2)

自作モジュールでも�Enum�を使いたい

Enum�は�Enumerable�という�protocol�があれば使える

MyModule�向けに�Enumerable�を実装する

Page 8: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

protocol�によるポリモーフィズム(3)

�������������������������������������������������������������������������������������������

�����������������������������������������������������

�����������������������������������������������

Page 9: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

⼀級市⺠としてのドキュメント

⾔語レベルでドキュメント化をサポートしている.

⾊んなツールで簡単にドキュメントを使える.

マークアップ記法として�Markdown�を使える.

Page 10: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

⼀級市⺠としてのドキュメント(2)

���������������������������������������������������������������������������������������������

�����������������������������������������������

Page 11: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

⼀級市⺠としてのドキュメント(3)

��������������������������������������������������

��������������������������������������������������������������������������������������

�����

Page 12: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

パターンマッチング

まとまっているものをバラバラにして扱いやすくする

�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

Page 13: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

パターンマッチング(2)

ガード節�(when)�と混ぜると意図が伝わりやすくなる

����������������������������������������������������������������������������������

�����������������������������������������������������������������������

������

��������������������������������������������������������������������������

Page 14: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

隅から隅まで�Erlang

������������������������������������������������������������������������������������������������

バイトコードレベルで互換

変換が容易

Elixir�から�Erlang�の関数はコスト�0�で実⾏できる

Page 15: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

本⼈いわく,のまとめ

全部が式

メタプログラミングとDSL

protocol�によるポリモーフィズム

⼀級市⺠としてのドキュメント

パターンマッチ

隅から隅まで�Erlang

Page 16: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

触ってみたくなった?

インストール⽅法はhttp://elixir-lang.org/getting̲started/1.htmlの�1.1�Installation�に書いてある.

Erlang�R16B�以降

Elixir

が必要.

Page 17: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

触ってみたくなった?(Mac)

�������������������

で両⽅インストールできる.

Page 18: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

触ってみたくなった?(Windows)

Erlang:�http://www.erlang.org/download.html

Elixir:�https://github.com/elixir-lang/elixir/releases/

それぞれのコンパイル済�zip�をダウンロードして解凍して使うのが簡単でおすすめ�(�らしい�)

Page 19: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

モダンなプログラミング⾔語

最近のプログラミング⾔語が備えている特徴Elixir�も備えている

Page 20: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

パッケージ管理

mix�::�Ruby�の�Rake�と�Bundler�を合わせたようなもの

mix�new:�プロジェクトを作る

mix�test:�テストを実⾏する

mix�compile:�コンパイルする

mix�–help�で詳しくみられる

Page 21: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

ライブラリ管理�(みあたらず)

rubygems�を操作する�gem�のようなコマンドはまだ⾒つけられない

rubygems�相当のライブラリ置き場は�http://expm.co�というのがある

Page 22: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

REPL

iex�::�Ruby�の�irb�のようなもの

�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

Page 23: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

ユニットテスト

ExUnit�::�Ruby�の�Test::Unit�みたいなもの

��������������������������������������

������������������������������������������������������������

Page 24: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

モダンなプログラミング環境のまとめ

パッケージ管理

ライブラリ管理(みあたらず)

REPL

ユニットテスト

Page 25: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

Elixir�らしそうなところ

個⼈的におおっ!となったところ

Page 26: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

マクロ

Elixir�の内容は全て�3�要素のタプルで表されている

atom�か,同じ形式のタプル

メタデータのリスト.ノードの番号とか⾏番号などを保持する

呼び出す関数の引数のリストか�atom

ほとんどの構⽂がマクロで作られている

Page 27: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

マクロ(2)

����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

Page 28: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

マクロ(3)

�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

Page 29: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

並列

並列があたりまえ.簡単に作れるようになっている.

spawn�:�違うプロセスを作る

x�<-�y�:�プロセス�x�に�y�という内容を送る

receive�:�送られた内容を取得する

Page 30: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

並列(2)

������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

Page 31: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

並列(3)

https://gist.github.com/niku/7301933

普通の�MacBook�で�100�万プロセス⽣成�16�秒で動くんだぜー

�������������������������������������������������������������������������������������������������

Page 32: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

OTP

OTPとは何か?

http://www.ymotongpoo.com/works/lyse-ja/ja/16̲what̲is̲otp.html

大抵のプロセスでは,共通の処理がある

パターンを⾒極めて,共通ライブラリにまとめたもの

Page 33: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

OTP(2)

OTP�の便利なところ(⼀部)

ワーカープロセスの監視/再起動が�組み込まれている

ダウンタイム�ゼロ�のリリース,デプロイ

Page 34: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

Elixir�らしそうなところのまとめ

マクロ�(Elixirすごい)

並列�(Elixirが使っているErlangVMすごい)

OTP�(Elixirが使っているErlangのライブラリすごい)

Page 35: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

思考の転換

プログラマの思考はプログラミング⾔語に影響される

http://gihyo.jp/news/report/01/rubykaigi2013/0001

“まつもとゆきひろさん,Rubyに影響を与えた⾔語とRuby開発初期を語る。�〜�RubyKaigi�2013�基調講演�1⽇目”

Page 36: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

想像してみてほしい

もし並列処理が簡単に書けるなら

もし無制限に並列処理できるなら

どんな考え⽅をするだろう?Elixir�を使って試してみようぜ.

Page 37: Elixir 触ってみた @ Ruby札幌28 · 2020-05-18 · メタプログラミングとDSL DSL を簡単に作れる(ExUnitの例) ... Ruby の Rake と Bundler ... works/lyse-ja

参考にしている本/サイト

http://elixir-lang.org/getting̲started/

http://www.ymotongpoo.com/works/lyse-ja/index.html

http://pragprog.com/book/elixir/programming-elixir