2005-08-23 (Tue) [長年日記]
_ Coroutines in C
anthy-devより。
Cで、
switch (count % 8) { case 0: do { *to = *from++; case 7: *to = *from++; case 6: *to = *from++; case 5: *to = *from++; case 4: *to = *from++; case 3: *to = *from++; case 2: *to = *from++; case 1: *to = *from++; } while ((count -= 8) > 0); }
のように書けることを利用してコルーチンを実現するという話。 Cは奥が深いな。*1
そういえば、と思って、前にScrapBookで取りこんでおいた 以下の記事を見に行ったら、すでにページがなくなっていた。
どこかに移動したんだろうか。
*1 褒め言葉ですよ。
_ Method Finder
Method Finder というのは、振る舞いからメソッドを探す(!)ためのある種“逆引き”ユーティリティ。「3. 4. 7」とかいうふうに、レシーバ、引数、(期待される)返値の順にリテラル(あるいは値を生成する式)をピリオドで区切って入力すると、該当するメソッドを列挙してくれます。
[sumim’s smalltalking-tos - Ruby の <=>より引用]
へえ。Rubyだとこんな感じかなあ。
def find_method(recv, args, ret) return Thread.start { $SAFE = 4 recv.methods.select { |method| begin recv.send(method, *args) == ret rescue Exception false end } }.value end p find_method(3, [4], 7) p find_method("foo", ["f", "F"], "Foo") p find_method("foo", [], "Foo")
実行結果:
$ ruby findmethod.rb ["+", "|", "^"] ["sub", "tr", "gsub", "tr_s"] ["capitalize"]
すごくいやな予感がしたので、一応$SAFE = 4にしてみたけど、 Squeakではどうやって実現してるんだろうか。
_ Re: Method Finder for ruby
すでにあったらしいorz....
id:shinichiro_h さんが、Squeak の Method Finder にヒントを得て、さっそく Ruby で使える Method Finder をこしらえて公開してくださいました。動的言語 and/or 動的システム、万歳!ですね。w