観察日記 2010-07-13

Fiber#root?

Fiber使いだして疑問が湧いたのだけれど、root fiberかどうか(要はFiber.yield出来るかどうか)の簡単な判別方法はないんかな?
Fiber.yieldしたいんだけどできるかどうかわからない -> やってみればいいじゃない!
Fiber.yieldしないでできるかどうかを知りたい -> なぜ?
こんな感じだろうか。
書いてみたけど汚いw ←やってみてrescueする
まあ、ユースケースを示せば(実装可能であれば)通りそうな提案とは思うのですが。
とか言ってなんかあったりして
Thread.passみたいな感じで使えないだろうかという 気持ち なので Fiber#passを定義してみた
Fiberさんの実装はどこにいるんだっけ
cont.cさんっぽいな
rb_fiber_s_yield() を見たら rb_fiber_yield() を呼んでるだけだった。ふむふむ。
rb_fiber_yield() を見たら rb_fiber_transfer() を呼んでるだけだった。
そこ酷いw
rb_fiber_transfer() を見たら fiber_switch() を呼んでるだけだった。
さすがに3回続くとイラッとするよねw
まあわかるんだけどさ。
で、私もreturn_fiber()と問題の例外に辿りつきましたよ、と。
return_fiber() は2箇所から呼んでるのか。
引数として例外にするか戻り値で示すかを渡すようにした上で流用するのがいいんすかね。
とかいうことを考えてたんじゃないかと思いますがあたりですか
いや、 rb_fiber_terminate ではroot_fiberは渡らないので
仕様変更するなら、戻り値一択にするかな。。
なるほど。
まあなんにせよ、こういう構造なら、パッチ付きですぐに提案できますね!
Fiber.yieldの仕様変更を出すかどうかとFiber#root_fiber?みたいなのを提案するかどうかと
断然後者
やっぱそうかな
既存メソッドの挙動を変えるのはやっぱ抵抗がありんすね。
追加ならおk
その名前には反対するけど。
私的にもfiberが重なってるのがいや
個人的にはFiber#root? でいいかな。どうでしょう?
と、思います。

Fiber の実装が cont.c にいる理由

Fiberさんの実装はどこにいるんだっけ
わかりにくいソース分割だなちくしょう
cont.cさんっぽいな
おお
このソース分割はセンスねーな! とか誰かさんをdisったりしたら後でブーメランを食らいそうだ。
いやでもさすがになんだかなー、だよな。
Init_Contの中身とか見ると探しにくくするために喧嘩売ってんのかとか思わないでもない。
歴史的経緯ってやつだろうか、この分割は。
たぶんそうですね。
きっとその辺はext/continuationを見ると何かがわかるんだけど、
それはそれとして名前変えようぜとか
...
分割ってなんだろ
Init_Cont()の下にある二つの関数のことを指す
ファイルの話じゃなかったのか
そこはInit_Cont()の話だったので。
良い案があれば教えて下さい
ええ、Init_Fiber()に名前を変えてください。
以上。
Init_Fiber って今無いのか
歴史的にはInit_Cont()はContinuationのInitだったのだけど、後からFiberが来て、さらにContinuation部分が別関数に分割されたのだろうと思われるが、
で,何を Init_Fiber に変えるんですか
だったらもうContinuation部分がないんだからInit_Cont()とか名乗るなよボケ
という話をしていたつもりだった。
ほんとだ,Fiber 関係しか無かった
Incontinuation
ふむ
Continuationの対義語ってin-? un-?
難しいこというなあ、なかださんは。
ext/continuationとext/fiberで使ってるinitがcont.cに入っているのと、cont.cに継続とfiberが詰め込まれてる状況 という意味だとおもってた。
cont.cであるのはぎりぎり我慢の範囲かなーと。実装共有してるし。
どっちかというと、今やfiber.cであるべきだと思うが。
まとめると、
* fiberとcontinuationが実装を共有して同じ.cの中にいるのはまあやむを得ない。
* 今どっちが主かと言ったら明らかにfiber
* どう見てもInit_Cont()は名前が不適切
* ゆえにcont.cも名前が不適切
こんな感じですね!
そんな感じかなー
そもそもFiberが組み込みでcontinuationは拡張なの?
ext/continuation の中身が酷いw
ext/fiberの中身も酷い
でぃすられてる
そいつらは意図的にそうなので酷くないよ!
擁護してみた。
両方組み込みにすればいいんじゃないですか? 処理の本体は全部組み込まれてるのに。
それは
「お前ら覚悟してから使えよ」
っていう意味なんです。
お前は本当に Continuation を使う覚悟があるのか?
マジで。
踏み絵か

linenoise

http://github.com/antirez/linenoise
へー、こんなものが
なんとruby.hを要求された
nurse: 見ようと思って忘れてた。評価よろしく
とりあえず「でもASCIIだけなんでしょう?」という疑問の答えを探る
readlineは強制的に作らされた
テストまできたー
うん、ASCIIだけだな、いらね
はいさようなら。

ちなみに、A small self-contained alternative to readline and libedit らしいです。