2006-06-11 [長年日記]
λ. RubyKaigi2006 (2日目)
- dRubyは最近使ってなかったので懐かしいな。
- Railsで日本語を使う際の話なんかも出ていたので、むとうさんも来てRuby-Gettextを宣伝すればよかったのに、と思った。
- ActiveRecordでSyslogという名前のテーブルを作ってロギングするという話が少し面白かった。
- Haskellで書いたパーサをrubyから利用出来ないかと聞かれる。CからHaskellを呼ぶことは出来るので、拡張ライブラリを書けばRubyからHaskellを呼ぶことも出来る。ただ、パース結果のデータ構造をRuby側で扱える形に変換するのが結構大変そうな気がする。
- DHHの講演は英語は聞き取りやすかったし内容も面白かった。ただ、マイクの音が大きくて耳が痛くなった。
- しかし、Rails使いがこれほど多いとは思わなかった。別にRailsに文句があるわけではなく、Webアプリケーションに関わっている人がこれほど多いということに驚いた。
- RubyCocoaのhisaさんとお話した。
- Haskell で Cocoa を使うための HOC というものがあるそうだ。
λ. 時相論理メモ
萩谷先生の時相論理メモを読んだ。
練習問題
- 3人の哲学者問題に関して,(経路πにおいて) 0番目の哲学者が飢餓に陥るということをPLTLで表せ.
- π |= G(¬eating0) もしくは π |= ¬F(eating0)
- 0番目の哲学者が飢餓に陥る経路が存在するということをCTLによって表せ.
- s |= EG(¬eating0) もしくは s |= ¬AF(eating0)
- PLTLにおいて,経路πに対して「G F q」が成り立つことと,πの中でqが無限回成り立つことが等価であることを説明せよ.
- π |= G F q iff (∀k. πk |= F q) iff (∀k. ∃l. π(k+l) |= q) だから。ってことで説明になってる?
- 3人の哲学者問題に関して,PLTLでstrong fairnessを表せ.たとえば,0番目の哲学者が左のフォークを取るというアクションに対して,enabledとchosenはどのように表せるか.(picking0やeating2などを用いて表せ.)
- よくわかんない。後で考える。
- Petersonのアルゴリズムに対するunconditional fairnessを書き下せ.
- Petersonのアルゴリズムを知らないので、後で考える。
いやぁ、そんなおそれおおいッス(汗)。
おとといはどうもです!RubyCocoa の GC について http://www.fobj.com/hisa/d/20060613.html#p01 にざっと書いてみました。
>むとうさん<br>いや、歓迎されたと思いますよ。<br><br>>hisaさん<br>こちらこそ先日はどうもでした。GCについて聞いたのは、<br><br>1) RubyのオブジェクトとOBJオブジェクトに跨る循環参照の扱い。<br>参考)<br>http://www.tom.sfc.keio.ac.jp/~sakai/d/?date=20020802#c02<br>http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Gauche%3aGtk%e3%81%a8%e3%83%a1%e3%83%a2%e3%83%aa%e7%ae%a1%e7%90%86 <br><br>2) ユーザにはRuby側のラッパ=OBJCのオブジェクトに見えるようになっているのかどうか。普通に実装すると、Ruby側のラッパがGCされた後もOBJCオブジェクトが生き残っていて再びRuby側のラッパが生成されるような場合には、元のラッパのインスタンス変数などの情報が失われてしまい、Ruby側のラッパ=OBJCのオブジェクトには見えなくなってしまうけど……<br>参考)<br>http://www.tom.sfc.keio.ac.jp/~sakai/d/?date=20020629#p04<br><br>といったことが知りたかったからでした。
(1) 循環参照について、薄々、問題ありそうなことに気付いていたかもしれないけど、実際にはほとんど何もしてないです。この問題については、ちゃんと考えてみたいと思います。<br><br>(2) は、そのまま最初とは別のRubyオブジェクトを生成します。「Rubyオブジェクト」としては別で、Wrapperが保持する「ObjCオブジェクト」としては同じ、と解釈すればいいと考えています。
説明ありがとうございます。<br>(2)について、Ruby-Cocoaのソースを少し見てみたのですが、ocid_to_rbobjとocid_get_rbobjを見ると、(Ruby側のオブジェクトのラッパ等でない)一般のObjCオブジェクトをRuby側に持ってくるときは、毎回新しいオブジェクトを作っているみたいですね。