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



















"Esc: Towards 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