株式会社エクストーン
下っ端
豊田陽一
!  プログラミング言語Erlang

◦  概要
"  何が出来るのか
"  何故やるのか
"  誰がやってるのか

◦  Erlangを触ってみる
!  Erlang

◦  エリクソン社によって設計された汎用的
なプログラミング言語
"  関数型言語
"  分散環境
"  耐障害性
"  リアルタイム性

◦  名前の由来
"  数学者Agner Krarup Erlangから
"  Ericsson languageの略とも言われる
!  同時並行性

◦  アクターモデルによる実現
◦  スケールアウトも容易
"  コア数に応じて性能も上がる
"  …のはタスクの内容次第
"  キューイングとかMapReduceとか、そういうのはちょ
お得意

"  複数台でも動作させられる

!  参照透過性

◦  常に同じパラメータの関数は同じ結果を返す
"  変数の上書きが出来ない

◦  実用主義的に、それを破る方法もある
"  今日の日付を返すtoday()関数とかも作れる
!  分散並列処理したい!
!  関数型言語触りたい!
!  Web業界の流行から(比較的)遠い

ところの技術身につけたい!
!  IntelliJ IDEAにプラグインがあった!
!  ドワンゴがやってた

◦  思いっきりWeb業界の流行だった!
◦  2/19にドワンゴで勉強会あるよ
"  http://connpass.com/event/4711/
"  ニコ生中継もやるっぽい
"  参加者既に定員越え
"  滅茶苦茶流行ってた
$ erl
Erlang R14B04 (erts-5.8.5) [source] [64-bit] [smp:2:2] [rq:2] [asyncthreads:0] [kernel-poll:false]
Eshell V5.8.5 (abort with ^G)
1>

!  OK、起動した。

◦  起動しない人はaptとかyumとかで適当に
入れて下さい…
!  +,

-, *, /

◦  四則演算はまあ見たまんま
◦  /は返り値として浮動小数返す
◦  C的な/はかわりにdivを使う
◦  %はrem
1> 5 / 2.
2.5
2> 5 div 2.
2
3> 5 rem 2.
1
! 

大文字もしくは_で始まる
◦  小文字で始まる変数は作れない
◦  変数の値を書き換えることが出来ない
◦  _だけの変数は値を保持しない
1> Hoge = 'Hoge‘.
'Hoge'
2> Hoge.
'Hoge'
3> Hoge = 'Fuga'.
** exception error: no match of right hand side value 'Fuga'
4> Hoge = 'Hoge'.
'Hoge'
! 

複数のデータの集合
◦  {Element1, Element2, … ElementN}
◦  項の数があらかじめ分かっている場合に利用
5> Point = {4,6}.
{4,6}
6> { X, _ } = Point.
{4,6}
7> X.
4
! 

何でも保持できる
◦  [Element1, Element2, … ElementN]
8> [1, 2, 3, Point, 4, 5].
[1,2,3,{4,6},4,5]
9> [97, 98, 99].
"abc“
◦  文字列=数値のリスト
"  かなり微妙くさい
! 

結合・削除
◦  ++, -◦  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]
! 

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

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

リスト内包と同様のことをバイナリでも実
現可能
◦  <- の代わりに <= を利用する
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}]
!  基本中の基本まで見てみました

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

Erlangを触ってみた