Java/Swing世界から「JNI(つまりCレベル)で結合した」Ruby世界の諸々が正しいことを期待できる気がしないんだけど、それは単に想像力の問題か。空間的な思考力が低いんだよな俺。
うーん…?
特に何もしなければRubyにはmain_threadしかないはずなので、スレッドコンテキストは切り替わらないのでは。むしろコンテキストとスタックで言っている「ローカル変数iの参照」なら、「いまのフレームのiをください」という命令があるだけで、「このフレームのiをください」とは書かない
なので、Ruby世界からRubyオブジェクトのメソッドとかブロックを使う場合は、Rubyが自分でいいようにスタックを積み替えるのでiを参照できるが、Rjbの場合(特にカーネルスレッドな)Java側から唐突にコールバックされるので参照できない、というのがこの場合の問題なのでは。青木さん曰く、
Rubyの実行も基本的にはメソッドつまり手続きの呼び出しの連鎖に他ならないから、本質的にはこれと同じ実行イメージを持っている。つまりコードは同じで、アクセスされる側のローカル変数スコープやブロックローカル変数スコープのほうが変化する。そしてそういうスコープはスタックで表現される。
[RHGより引用]
ただしRubyではイテレータやProcを使うと以前に使ったスコープに一時的に戻れたりするからスタックの単純なプッシュ・ポップだけでは実装できない。そのためRubyスタックは実行中に複雑に積み変えられる。だからいちおうスタックとは言ってはいるが単なるリストと考えたほうがいいかもしれない。
[RHGより引用]
らしいし。YAJBだと何故Swingがふつうに動くか(主にGCまわり)はよくわかんないが。GCは手動だったかも。まあともかく、Javaからコールバックされたときにスレッドとかスタックとかスコープの状態が変でなければいい(GCは…)んだけど、なんというか脳味噌がついていきませんよ。
いつのまにか見れなくなっている。tDiaryのWikiもエラー発生中。
紙を挟めるマウスパッドとかに入れておくといいかもしれない。
概ね同意だけど、作業をするかぎりミスはなくならない。バグを入れない完璧な方法は作らないことだけだ。なので、ちらっとしか書いてないけどプログラマが直接電話を受けて直接対応しているので、営業もテスト部隊もどんな修正がなされたかを全く把握できてい
ないほうが問題じゃないかと。作ったが最後、徹底的にテストする以外、完璧に近付く方法はない。