トップ 最新 追記   RSS 1.0 FEED  

Journal InTime


2013-05-30 (Thu) [長年日記]

_ RubyKaigi2013(1日目)

RubyKaigi2013に参加して発表した。 とりあえず資料を↓に置いておきます。

発表では喋らなかったけど、どっちかというとpackrat parserの実装の方が大変だった。

しかも、遅いし入力が大きいと落ちる。理由は、

  • 末尾呼出しの最適化がデフォルトでオフになっている。
  • 末尾呼出しの最適化を有効化しても、Procの呼出しの場合は効果がない(多分Proc#callでCの関数をまたぐため最適化が効かない)。
  • Immutable::Promiseを使うと、内部的にトランポリンを使っているので、末尾呼出しの最適化ができるけど、Parser#bindなどの実装ではそもそも末尾再帰の形になっていない。しかもPromise使うと余計遅くなる。
  • 加えて、Rubyだともともと関数型言語に比べて再帰呼出し回数の上限が低い。 (Ruby 2.0では環境変数RUBY_THREAD_VM_STACK_SIZEで調整できる。)

といった感じかなあ。

Rubyだと提供するインタフェイスは関数型っぽくする場合でも、内部的な実装は命令型にしないと実用的でない気がする。 Scalaも割とそんな感じだし、もともとOOPLだから仕方ないかなあ。

Tags: Ruby

2013-05-31 (Fri) [長年日記]

_ 型システム入門

型システム入門 −プログラミング言語と型の理論−

遠藤さんがサイン会してたので、いい機会だと思って型システム入門を買った! レジのお姉さんに7000円と言われて一瞬ひるんだけど、いい大人なのでやっぱりやめますとも言えず。

本棚の飾りに7000円は高いので頑張って読むぞ。

サイン