スピーカーとして参加してきました。

Pattern Matching in Ruby

Speaker Deckにスライドを置いています。

まつもとさん、ささださんと話してみたところ、(意外にも)導入にはニュートラルな立場で、うまい着地点が見つかればコア機能にするのも夢ではなさそうです1。 せっかくなので、セッションに入れようとしたけどもろもろの理由により断念した話題も、あわせて公開しておきます。

  • View Patterns(Haskell)/Active Patterns(F#)の紹介
  • Unification(Prolog)の紹介
  • 利用例としてRubiniusのAST transformによるGroovyのPower Assert相当の機能の実現
  • pattern-matchのTips
    • AND/OR/NOTはあくまでPatternオブジェクトのメソッドなので、 with(1 | 2) のような書き方はできない。 with(_(1) | _(2)) とする。
    • オブジェクトの比較を#===以外でやりたい場合は、 with(_(Fixnum, :==)) のようにする。
    • ローカル変数のエミュレートの制限について。
      • 同一スコープにパターン変数と同名のローカル変数があると期待した動きにならない。
        • irb上でサンプルコードを試すことができない( _ が利用できないので)。
      • ダイナミックスコープになってしまう(test_lexical_scopingを参照のこと)。
  • Elixirの紹介
  • Egisonの紹介

その他のセッション

いずれのセッションも面白く、見たものについては一通り感想を書いていこうと思ったんですが終わらなさそうなので断念しました。 その中でも、個人的に特に楽しめたセッションは以下の通り。

  • 料理を支える技術 2012
  • Purely functional programming in Ruby
  • Ruby; Exported
  • Towards Ruby 2.0: Progress of VM Internals
  • Rubyによる本気のGC
  • axlsxを使ったグラフ・書式・画像などを含めたOOXML生成
  • 分散 RSpec
    • Rubyのminitestにも同じ仕組みが欲しいですね(手元では@tasks(unit.rb)を単にソートするだけでも1:30だった実行時間が1:00程度になる)。
  • ユーザ指向サービスデザイン
  • クリアなコードの作り方
    • 最後のセッションにふさわしい、いいお話でした。
  1. 特にささださんには、いろいろと方向性についてアドバイスをいただきました。ありがとうございました。