Elixir勉強会いってきました ~~ ErlangとRubyの中間、Elixir
ShinjukuEx第一回いってきました。新宿のブルックリンパーラーにて飲酒しながら、6人ぐらいでコード書いていました。会社でコード書いてたら連れだされて参加した感じです。
Elixirとは
ErlangのBeamというエンジン上で動く、Rubyみたいなシンタックスを持つ関数型言語です。Erlangの高可用性をもっとカジュアルに使いたい、といった需要でできたそうです。とはいっても関数型の強力なパターンマッチとRubyっぽいシンタックスのいいとこ取りで、ある意味でScalaみたいな設計思想です。
僕がうだうだ言うより他の人の記事読む方が早いです。
Rubyist が今すぐ Elixir を使ってみるべき理由 - m.igrs.jp
elixirはプログラマの万能薬になるか - Fat Old Sun
Rubyistが〜のいがらしさんが勉強会の主催でした。ありがとうございました。
論よりコード
チュートリアルがよくできてます。Redirecting…
が、現状、APIリファレンスはありません。公式リポジトリのlibみて感じろ!といった潔い状態です。(現在コードからドキュメントを吐くツールを準備中なようです。
というわけで今日勉強して書いたサンプルコード置いておきます。ハローワールド、フィボナッチ、クイックソートです。
defmodule Hello do def world do IO.puts "hello" end end defmodule Fib do def fib(0) do 0 end def fib(1) do 1 end def fib(n) do fib(n-1)+fib(n-2) end end defmodule Q do def sort([]) do [] end def sort([h|tail]) do {a, b} = Enum.partition(tail,fn(x)-> x < h end) sort(a)++[h]++sort(b) end end Hello.world IO.puts Fib.fib(11) Enum.map Q.sort([4,2,3,8,5,4,7,9,2,5,2,7]), fn(x)-> IO.puts x end
$ elixir hello.exs みたいに実行。iex というインタプリタもあります。
見た感じRuby+関数型のパターンマッチです。partitionがある当たり露骨にRubyを意識してるのがわかりますね。僕も機能をちゃんと使いこなしてるわけじゃないですが、雰囲気は伝わるでしょうか。
なんとなくdefmoduleでラップしてますが、気分です。なくてもいいです。
インストール
Macの人はぐぐればhomebrewのフォーミュラがあります。ほかは知らん。ぐぐれ。
GitHub - elixir-lang/elixir: Elixir is a dynamic, functional language designed for building scalable and maintainable applications
Emacs、Vimのモードは既にあります。Githubもなぜかシンタックスハイライト対応してます。すごいですね。
Dynamo
既にsinatra風のWAFがあるそうです。
https://github.com/josevalim/Dynamo
やる気のないREADMEから分かる通り、動かすのは手間です。
勉強会中は5人がビルドして3人が動いて2人が動きませんでした。僕は動かなかった方でした。
最後に
見ての通り、できたてホヤホヤの言語なので、色々と環境が違うところはありますが、結構熱い言語なのではと思います。
皆もElixirから、Erlangと関数型のおぞましい世界を触ってみよう!