[#7102] Ruby 1.3.4-990611 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.4-990611 is out, check out:

20 messages 1999/06/11

[#7223] Ruby 1.3.4-990625 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.4-990625 is out, check out:

14 messages 1999/06/25
[#7224] -Wl,-rpath on Linux (Re: Ruby 1.3.4-990625) — Ryo HAYASAKA <hayasaka@...21.u-aizu.ac.jp> 1999/06/25

早坂@会津大学です。

[ruby-dev:7113] [Q] caller and binding [Re: [BUG?] load in thread]

From: keiju@... (石塚圭樹)
Date: 1999-06-15 04:02:29 UTC
List: ruby-dev #7113
けいじゅ@日本ラショナルソフトウェアです.

だいぶ遅れてしまいましたが...

In [ruby-dev :7094 ] the message: "[ruby-dev:7094] Re: [BUG?] load in
thread ", on Jun/09 17:48(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

>|上記のスクリプトを, 他のファイルからrequireして実行してみてください. きっ
>|と, 止ると思います.
>あ、なるほど。

>現状のRubyは複数のスレッドから同時にrequireすることは保証し
>てますが(適当にシリアライズしてる)、require中に別スレッドを
>上げてそこからまたrequireすることは保証してません(ネストして
>るとシリアライズできない)。ま、バグと呼んでも良いんですが、
>当面解決できる自信はないです。
>
># なんでそんな複雑なことを...

irbで defined? の問題を解決する方法はわかったんですが, もう1つ気になるこ
とがあります. それが, caller(0)なんですね.

いまのirbでcaller(0)すると相当長い配列がかえりますよね. それをどうにかで
きないかと色々試していたのでした.

In [ruby-dev :7095 ] the message: "[ruby-dev:7095] Re: [BUG?] load in
thread ", on Jun/09 18:20(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

>しょうがないんで require するファイル名をキーにして、ファイ
>ル毎にシリアライズを行うことにしました。

うーん. よくわからん....

>なんとなく動いているように見えます。

たしかに動作しました.

それはともかく本題です:

caller(0)とバインディングについて教えてください.

まず以下のスクリプトを見てください.

--
require "thread"
require "readline"

STDOUT.sync = true

Q = Queue.new

def bind
  binding
end
b = bind

Thread.start do
  loop do
    r = Q.pop
    p eval r, b
  end
end

i = 0
loop do
  i += 1
  print i, ">> "
  r = Readline.readline
  Q.push r
end
--

これを実行すると.

1>> caller(0)
["(eval):1:in `bind'", "eval-thread.rb:10:in `eval'", "eval-thread.rb:17", "eval-thread.rb:16:in `loop'", "eval-thread.rb:16", "eval-thread.rb:16:in `start'", "eval-thread.rb:16"]

こんな感じの結果になります. このバックとレースの結果が何か理解できないん
ですよね. というのも

Thread.start do...の中の 
  p eval r, b 
を
  p eval r, TOPLEVEL_BINDING
に変えると

1>> caller(0)
["(eval):1"]

って感じになるんですね.

何でこういう違いが出るのでしょう?

__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju@rational.com <<---

In This Thread