・調査結果 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から
・発表を弾丸紹介
"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 の人
Haskellの人
QuickCheckをHaskellで作った人
インタビュー
「なんでErlangにしたの?」「客がいるからね」
Cもテストできるようになったらしいよ…
"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というのを作ってみた
− 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
by Kenji Rikitake
Erlang/OTPの擬似乱数生成器の改善
確かOTPに入ったはず
SIMD-Oriented Mersenne Twister を実装して、既存のものより3倍速くなってしかも、より長周期(=more secure)になったよ
Erlang Factoryでは、
毎年このような濃い話がされている。
Londonでもやってる
他にも面白そうなのが
"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
・まとめ
Erlang/OTPの常識と雰囲気をお伝えしました
最新の技術動向をお伝えしました
発表資料が適当で本当にすみません
・おまけ
仕事では、Erlang/OTPをとーっても採用したい
そう思って個人的に調べて、コミュニティにも参加してきた
開発者が少ない →開発者が潤沢にいないと業種的に死活問題
開発者を増やせばこの問題も解決!
→これを機会にErlang/OTPをやってみませんか??
→ MessagePack/Erlangはあなたを待っています