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
EmacsVimのモードは既にあります。Githubもなぜかシンタックスハイライト対応してます。すごいですね。

Dynamo

既にsinatra風のWAFがあるそうです。
https://github.com/josevalim/Dynamo

やる気のないREADMEから分かる通り、動かすのは手間です。
勉強会中は5人がビルドして3人が動いて2人が動きませんでした。僕は動かなかった方でした。

最後に

見ての通り、できたてホヤホヤの言語なので、色々と環境が違うところはありますが、結構熱い言語なのではと思います。
皆もElixirから、Erlangと関数型のおぞましい世界を触ってみよう!