Erlang Update

                           2011/9/17
                           Functional Programming Meetup Tokyo
                           UENISHI Kota: @kuenishi









オマエ、誰よ?
・上西康太
・@kuenishi
MessagePack/Erlang
・分散的システム作っています








Erlangはメジャーな言語です
9/15時点で 23位 https://github.com/languages/Erlang

Haskell #15
Scala #17
Clojure #20
Common Lisp #24
D #26
Go #31
OCaml #33






・100人に聴きました:
   Erlang/OTPはプログラミング言語ですか?






・調査結果 Yes 95人 No 5人
・Noと答えた方に





RailsなしではRubyが語れないように
CPANなしでPerlが語れないように
PyPIなしでPythonが語れないように
OCaml…
Haskell…






そういうレベルではありません





Erlang/OTPはプログラミング言語ではない、サーバープログラミングフレームワークである
Erlang/OTPはプログラミング言語ではない、サーバープログラミングフレームワークである
Erlang/OTPはプログラミング言語ではない、サーバープログラミングフレームワークである









・基本編






Erlang/OTPはプログラミング言語ではない






高可用サーバーを構築するための
プログラミングフレームワークである。

昔から高可用性が要求されたところ:ネットワーク周り
ATM, RADIUS, DNS, SIP …なんかいろいろ




他だと難しかったり面倒だったりするところ

・軽量プロセス - ネイティブスレッドとリクエストを1:1対応させるのはちょっとアレ

・soft-realtime - タイムアウト系の処理がとても簡単にかける

・receive … after … end - 複数のイベントの待ち合わせも簡単すぎて生きるのが辛い

・軽いGC - 止まってはいけないサーバー24時

・リクエストを取りこぼさず、かつ止めずにコードをアップグレード - ネイティブコードなんて大変

 個人的には末尾再帰のとてもうまい利用例
 だからこそ動的型付け&バイトコードVM

・速度?そんなの関係ない - だいたいネットワークとディスクI/Oがいつも遅い

・エラー処理?Errorモナドではない解がここに





LET IT DIE






開発環境

・まさかOTP使ってないとかないよね?!
・erlang-mode: M-x tempo-template-*
・distel
・rebar
・git
・eunit
・ct
・cover




よくdisられていた

・動的型付けなんて怖くて使えない
・型推論してくれない
・せっかく関数型なのにテスト書くのだるい
・Prologっぽくてイヤ






最近の動向 - Erlang Factory SF Bay Area 2011から
http://erlang-factory.com/conference/SFBay2011/

・発表を弾丸紹介



"Cool Tools for Modern Erlang Program Development" by Kostis Saganos

#1 Dialyzer
2007からErlang/OTP標準ライブラリに
型定義えらー、API violation, dead code, Opacity violations, Concurrency Errors
Experimental: stronger type inference, messagepassing error & deadlock detection

#2 Typer
type annotationついてない関数をみつけて教えてくれる

#3 Tidier
refactoring tools
ソースを整形、短縮、性能改善してくれる
Obsoleteなのは新しくしてくれる
サンプルが半端ないわ

#4 PropEr
Property based testing tool inspired by QuickCheck

#5 CED
Concurrency Error Detector






"GPGPU Programming in Erlang" by kevsmith
pteracuda: integrate CUDA & Erlang (experimental)
http://github.com/kevsmith/pteracuda






"QuickCheck" by John Hughes

常識だよね! 有名だよね!!


John Hughes
Why functial programming matters の人
http://www.cse.chalmers.se/~rjmh/Papers/whyfp.html
http://www.sampou.org/haskell/article/whyfp.html

Haskellの人
QuickCheckをHaskellで作った人




インタビュー
「なんでErlangにしたの?」「客がいるからね」
http://www.infoq.com/interviews/Erlang-Haskell-John-Hughes






Cもテストできるようになったらしいよ…
http://quviq.com/news091117.html






"Erlang Deployments Demystified" by Joe Williams

Hot code upgradeができる…けど、それでも割と大変
• A simple Chef API for deploying Erlang releasesがある
大変なのは手作業だから。ちょっとやれば自動化できる

・Push code
・CIでビルド→でぷろい
・コンフィグも自動で
・Hot code upgradeも!
 ・Rebarで.appupファイルを生成
 ・Rebarでupgrade用tarballを生成
 ・tarballもツールが置き換えっ!



"How to make an optimized compiler in a few months" by Joe Armstrong

ZAPBAR : Erlang => LLVM Assembler
ECCとかいうのも Erlangで作ったCコンパイラ?もうワケわからん

3690行



これができると・・・
"inline C" in Erlang, "inline X" in Erlang






"The Case for Erlang as a Testing Language" by Graham Crowe

Erlangでハードウェアテスト
soft-realtimeでconcurrentだと、Grey-box testingができる
QuickCheck使うとビット単位で網羅したテストが組める






”A History of the Erlang VM” by Robert Virding







Telephony Algebra
Prolog Interpreter
Phoning Philosophers
歴史的には沢山のErlang実装 
・JAM, VEE(Virdings Erlang Engine), Strand88
・TEAM(Turbo), BEAM(Bogdan's)
・=> BEAM(Bjorn's) generational GC, SMP, NIFs, etc….
Erlang VMを使った言語実装
・Efene
・LFE (lisp flavoured Erlang)
・Reia(Rubyっぽい?LL風的な
・Erjang(ここにはないけど






"Building Polyglot Distributed Systems With JInterface" by Cliff Moon

JInterfaceは超絶イマイチなのでScalangというのを作ってみた
https://github.com/boundary
− Netty Networking Stack
- Jetlang actors
- Native Scala type mappings
- Process monitors
- Real supervision





"Building Solid Distributed Applications with Haskell and Riak" by Bryan O'Sullivan


はい、ご存知ですねRWHの著者
・Riakが一番簡単だった
 CassandraとかVoldemortよりも
・簡単なの大事

・ビジネスロジックは当然、Haskellだけど
 データの共有だけはふつうRDBMS


…だった。

時代
例えると… スプリンクラー 火災報知機
つまり ちょう安全だけど、ちょっと火が出ただけでもうびしょ濡れ 火が出たらすぐ教えてくれるけど、火は自分で消す!
残念なところ パフォーマンスが大変… プログラミングが大変
答え トランザクション Vector Clocks



・Riakなら簡単!
・Haskell Riak Client Library - まあJSONで叩けばよいのだけど、RiakはProtocol Buffersインターフェースを持っているので性能がほしいときはそちら




・Vector Clocksの衝突解決

class (Eq a, Show a) => Resolvable a where
  resolve :: a -> a -> a

instance Resolvable (Set a) => where
  resolve = union



・それでも分散KVS使うのはawkwardで、冗長化されてるのはBig Deal
・MySQLほど速くもないし使いやすくもないよ、まあそりゃあ。
・(Haskellの)QuickCheck+Riak+JSON+Protocol buffers+Snappyでいろいろと幸せ
・ $ cabal install riak
https://bitbucket.org/bos/erlang-factory-2011




"Erlang/OTP and how the PRNGs work"
 by Kenji Rikitake
Erlang/OTPの擬似乱数生成器の改善
確かOTPに入ったはず


SIMD-Oriented Mersenne Twister を実装して、既存のものより3倍速くなってしかも、より長周期(=more secure)になったよ







Erlang Factoryでは、
 毎年このような濃い話がされている。
 Londonでもやってる

他にも面白そうなのが


From Telecom Networks to Neural Networks; Erlang, as the unintentional Neural Network Programming Language

Escript changes the game

Erlang and Video-On-Demand

Distributed Social Networking with ejabberd

Big Switch to Erlang in Online Gaming

Beam.JS: Erlang meets JavaScript


A match made in Scalability Heaven. Mongo with Erlang.

AOL's Erlang Framework for Real-time Computational Advertising

Above the Clouds: Introducing Cloudy Akka

Bringing Riak to the Mobile Platform

Building VoIP Applications (whApps) in Whistle



















"EscTowards an Elastic Stream Computing Platform for the Cloud"

Satzger, B.; Hummer, W.; Leitner, P.; and Dustdar, S. 2011. In 4th IEEE International Conference on Cloud Computing (CLOUD'11) via @kenji_rikitake



Erlang/OTPでElastic Stream Computing Platform作って

HFTやりましたよ、とかいう

いろんな情報を分散処理するストリーミングを作った

死活監視とかちょう簡単、プロセスが死んだ時の再起動


Soft-realtimeなのでレイテンシを押さえることも可能

(HFTなのでレイテンシは死活問題




Erlang/OTPのお仕事
・欧州は多い
・米国はまあ普通に多い
・日本もまああるにはあるが…





Erlang/OTPの今後
・R14B04も出るみたい
・R15がどうやら 12/14 らしい。新機能は?






実行時エラーが出たら、スタックトレースに行番号が表示されるようになります(えっ





- 64bit Windows build
- parallel make
- gen_streamが入るかも?! origin/pu
https://github.com/erlang/otp/blob/pu/lib/stdlib/src/gen_stream.erl







・まとめ
Erlang/OTPの常識と雰囲気をお伝えしました
最新の技術動向をお伝えしました
発表資料が適当で本当にすみません

・おまけ
仕事では、Erlang/OTPをとーっても採用したい
そう思って個人的に調べて、コミュニティにも参加してきた
開発者が少ない →開発者が潤沢にいないと業種的に死活問題
開発者を増やせばこの問題も解決!
 →これを機会にErlang/OTPをやってみませんか??
 → MessagePack/Erlangはあなたを待っています
   https://github.com/msgpack/msgpack-erlang