Erlang VMをRuby風の文法の言語で扱える
関数型の潮流を大きく汲んでいる
少数のデータ型と多数の関数
不変性・参照透過性
Elixir on Rails
Web Application Framework
Version 1.0.0が一昨日出た
Actorモデルを採用したVM上で動作するプログラムを記述する言語
正常系(とビジネスロジックでの例外)だけ考えればいい
外部やDBとの通信エラー時のリトライ等の戦略はSupervisorに任せる
ViewはJSON APIを用意してもらってフロントエンドが勝手にやる
HTML, CSS, JavaScriptは静的なコンテンツを素早く返す(動的にHTMLをリクエスト毎に生成するのは辛い)
サーバサイドはJSON吐き出し飲み込みする機械に特化する
JSON APIへのリクエストの頻度が高い
リアルタイム通信(HTTP2, WebSocket, WebRTC)も必要
その目的にElixir/Phoenixが特化してます
Whatsapp1は何億人ものユーザーを抱えています。他の大半のプラットフォームでは1万以上の同時コネクションを1台のマシンで処理するのはチャレンジングだと見られていますが、Whatsappは1サーバーあたり2百万の同時コネクションをこなしています。2百万コネクションをErlangが走る1台のサーバーで。
Elixir/cowboyとRailsのサーバーベンチマーク比較 - Qiita
引用:
Rails | Elixir | |
---|---|---|
(Failedが出ない)最大同時接続数 | 510 | 4900 |
最大同時接続時のRequest/Sec | 722 | 4175 |
最大同時接続時のTime/Req(1リクエストあたり) | 1.38ms | 0.37ms |
via. Phoenix Framework - Channel 日本語翻訳 - Qiita
引用:
Framework | Throughput (req/s) | Latency (ms) | Consistency (σ ms) |
---|---|---|---|
Phoenix | 43063.45 | 2.82 | 7.46 |
Sinatra | 9182.86 | 6.55 | 3.03 |
Rails | 3274.81 | 17.25 | 6.88 |
ここから少しElixirのRubyとは毛色の違う文法紹介
x = 1
1 = x # OK
x = 1
2 = x # ここでエラー(MatchError)になる
代入をしていると考えるのではなく1にxを束縛していると考えると分かりやすいかも
f = fn
0, 0, _ -> "FizzBuzz"
0, _, _ -> "Fizz"
_, 0, _ -> "Buzz"
_, _, n -> n
end
f.(0, 0, 1) #=> "FizzBuzz"
f.(0, 1, 1) #=> "Fizz"
f.(1, 0, 1) #=> "Buzz"
f.(1, 1, 2) #=> 2
List.flatten [1, [2], 3] #=> [1, 2, 3]
Enum.map [1, 2, 3], &(&1 * 2) #=> [2, 4, 6]
[1, [2], 3] |> List.flatten |> Enum.map(&(&1 * 2)) #=> [2, 4, 6]
引用元: Elixir - パイプライン演算子のはなし - Qiita
インスパイア元はF#
Clojureの->
マクロに似ている
おわり