Shibuya.pm#9

すごく楽しかった。誘っていただいたTakesakoさんに感謝します。

OPコードについてやautobox内部についてはまったく知らなかったので非常にインスパイアされた。忘れないうちに思いついたことをメモしておく。

  • autoboxは今のところoverloadを扱えない -> 扱えるようにもできるのでは?
    • たとえば $aref = [1, 2, 3] * 2 # => [2, 4, 6]
    • あるいはRのように sqrt([1, 4, 9]) # => [1, 2, 3]
  • 文字列ベースの固定小数点数演算を動的にPerlコアに組み込めるかも
  • 多倍長整数/浮動小数点数/固定小数点数演算の高速な実装も

Inside Ruby.pm

資料:http://www.ipe.tsukuba.ac.jp/~s0710509/InsideRuby.pdf

ひたすら実装の話をしてきた。説明しているほうもしんどかったが聞いているほうはもっとしんどかったに違いない。「Ruby.pmの基本的な仕組みはすごく簡単」ということをアピールするつもりが,逆効果だった気がする。最初に「Perl世界 -> SV2VALUE -> Ruby世界 -> VALUE2SV -> Perl世界」という図でも入れればよかった。

Ruby.pmについてのTODO:
[BUG]

  • Rubyの拡張ライブラリが"undefined symbol: rb_cObject"で呼び出せない
  • SystemStackError(無限再帰などでよく出るエラー)がでる理由が分からない

[仕様]

  • 代入アクセサのインターフェイス(0.01, 0.03, 0.04で一通り試してみた)
    • $obj->{foo} = $bar; # via method call 0.04
    • $obj->foo = $bar; # Ruby的には自然だが実装が煩雑 0.01
    • $obj->{'@foo'} = $bar; # via rb_ivar_*() C-API 0.03 (危険なので不採用)
  • $obj->{foo}を[]/[]=にバインドする手もある
    • そうするとHash->new->{foo} = 1; 等が可能になるが,0.04のアクセサインターフェイスと合わない