Erlangを触ってみた

16
株式会社エクストーン 下っ端 豊田陽一

Transcript of Erlangを触ってみた

Page 1: Erlangを触ってみた

株式会社エクストーン 下っ端 豊田陽一

Page 2: Erlangを触ってみた

! プログラミング言語Erlang ◦ 概要 " 何が出来るのか " 何故やるのか " 誰がやってるのか ◦ Erlangを触ってみる

Page 3: Erlangを触ってみた

! Erlang ◦ エリクソン社によって設計された汎用的なプログラミング言語 " 関数型言語 " 分散環境 " 耐障害性 " リアルタイム性 ◦ 名前の由来 " 数学者Agner Krarup Erlangから "  Ericsson languageの略とも言われる

Page 4: Erlangを触ってみた

! 同時並行性 ◦ アクターモデルによる実現 ◦ スケールアウトも容易 "  コア数に応じて性能も上がる

" …のはタスクの内容次第 " キューイングとかMapReduceとか、そういうのはちょお得意

"  複数台でも動作させられる ! 参照透過性 ◦ 常に同じパラメータの関数は同じ結果を返す "  変数の上書きが出来ない ◦ 実用主義的に、それを破る方法もある "  今日の日付を返すtoday()関数とかも作れる

Page 5: Erlangを触ってみた

! 分散並列処理したい! ! 関数型言語触りたい! ! Web業界の流行から(比較的)遠いところの技術身につけたい!

!  IntelliJ IDEAにプラグインがあった!

Page 6: Erlangを触ってみた

! ドワンゴがやってた ◦ 思いっきりWeb業界の流行だった! ◦ 2/19にドワンゴで勉強会あるよ "  http://connpass.com/event/4711/ " ニコ生中継もやるっぽい " 参加者既に定員越え

" 滅茶苦茶流行ってた

Page 7: Erlangを触ってみた

$ erl Erlang R14B04 (erts-5.8.5) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [kernel-poll:false]

Eshell V5.8.5 (abort with ^G) 1>

! OK、起動した。 ◦ 起動しない人はaptとかyumとかで適当に入れて下さい…

Page 8: Erlangを触ってみた

! +, -, *, / ◦ 四則演算はまあ見たまんま ◦  /は返り値として浮動小数返す ◦ C的な/はかわりにdivを使う ◦ %はrem

1> 5 / 2. 2.5 2> 5 div 2. 2 3> 5 rem 2. 1

Page 9: Erlangを触ってみた

! 大文字もしくは_で始まる ◦ 小文字で始まる変数は作れない ◦ 変数の値を書き換えることが出来ない ◦  _だけの変数は値を保持しない

1> Hoge = 'Hoge‘. 'Hoge' 2> Hoge. 'Hoge' 3> Hoge = 'Fuga'. ** exception error: no match of right hand side value 'Fuga' 4> Hoge = 'Hoge'. 'Hoge'

Page 10: Erlangを触ってみた

! 複数のデータの集合 ◦  {Element1, Element2, … ElementN} ◦ 項の数があらかじめ分かっている場合に利用

5> Point = {4,6}. {4,6} 6> { X, _ } = Point. {4,6} 7> X. 4

Page 11: Erlangを触ってみた

! 何でも保持できる ◦  [Element1, Element2, … ElementN]

8> [1, 2, 3, Point, 4, 5]. [1,2,3,{4,6},4,5] 9> [97, 98, 99]. "abc“

◦ 文字列=数値のリスト "  かなり微妙くさい

Page 12: Erlangを触ってみた

!  結合・削除 ◦  ++, -- ◦  hd, tl ◦  |

10> List = [1, 2, 3]. [1,2,3] 11> List ++ [4, 5]. [1,2,3,4,5] 15> List -- [1, 3]. [2] 16> [1, 2, 3] -- [1, 2] -- [1]. [1,3] 17> hd([1, 2, 3, 4]). 1 18> tl([1, 2, 3, 4]). [2,3,4] 19> [hd([1, 2, 3, 4])|tl([1, 2, 3, 4])]. [1,2,3,4]

Page 13: Erlangを触ってみた

! 数学の集合記法みたいなもの ◦  [ 式 || 式を適用する集合 ] ◦ 集合に対して条件も記述可能

20> [2*N || N <- [1, 2, 3, 4]]. [2,4,6,8] 21> [2*N || N <- [1, 2, 3, 4], N rem 2 =:= 0]. [4,8] 23> [X+Y || X <- [1, 2], Y <- [2,3]]. [3,4,4,5]

Page 14: Erlangを触ってみた

!  電話会社が作ったらしさが見える機能 ◦  バイナリデータを<< >> で囲む

35> Pixels = <<213,45,132,64,76,32,76,0,0,234,32,15>>. <<213,45,132,64,76,32,76,0,0,234,32,15>> 36> <<Pix1:24, Pix2:24, Pix3:24, Pix4:24>> = Pixels. <<213,45,132,64,76,32,76,0,0,234,32,15>> 39> <<Pix1:24>>. <<213,45,132>>

Page 15: Erlangを触ってみた

! リスト内包と同様のことをバイナリでも実現可能 ◦  <- の代わりに <= を利用する

35> Pixels = <<213,45,132,64,76,32,76,0,0,234,32,15>>. <<213,45,132,64,76,32,76,0,0,234,32,15>> 41> RGB = [ {R,G,B} || <<R:8,G:8,B:8>> <= Pixels ]. [{213,45,132},{64,76,32},{76,0,0},{234,32,15}]

Page 16: Erlangを触ってみた

! 基本中の基本まで見てみました ◦ 関数型言語のエッセンスを感じられれば ◦ 一番大物の関数の紹介がまだです " 次回あたりにやります " そのころには実用的なコードが書けるようになっているはず(^^