[#44725] Set[Set[1]]==Set[Set[1]] は偽? — "5.5" <5.5@...>

5.5 です。

22 messages 2008/03/04

[#44782] $stdin.rewind が exec した子プロセスに伝わらない? — SATOH Fumiyasu <fumiyas@...>

さとうふみやす @ OSS テクノロジです。

11 messages 2008/03/17
[#44783] Re: $stdin.rewind が exec した子プロセスに伝わらない? — Kazuhiro NISHIYAMA <zn@...> 2008/03/17

西山和広です。

[ruby-list:44722] Re: パイプ経由コマンド実行?

From: 小西 弘将 <konishi@...>
Date: 2008-03-03 09:01:49 UTC
List: ruby-list #44722
 小西 弘将です。

GC時にオブジェクトが廃棄されるときにはクローズされるかと。ただ、処理終了
(スコープアウト)の瞬間にGCで回収されるというのは間違いです。
意図的にGCさせるときは、GC.startですが、それ以外の場合は、Rubyにとって適
当なタイミングでGCがおきますので、スコープを監視してGCするわけではないこ
とに注意が必要です。
パイプは明示的にCloseあるいはFlushする習慣をつけた方が、びっくりがないと
思います。

>まつもと様
>
>もりた です。懇切丁寧なご説明ありがとうございます。
>> |  open("foo","w").write("a\n")
>> |  open("foo","w").write("b\n")
>> 
>> 上のプログラムでは最初の行でopenしていますが、一度writeしたあ
>> と放置されていますので、IOオブジェクトは今後書き込みがあるか
>> もしれないので、バッファをflushしません。openの戻り値を他で参
>> 照していないので、人間は「もう終わった」と思うかもしれません
>> が、それはRubyの関知するところではないからです。
>そうでしたか、わかりました。IO オブジェクトは変数と別管理になって
>いるのですね。
>
>私の思い違いは「open の際に局所的な変数(オブジェクト)を生成して、
>その変数がバッファを内包していると思っていて、それがソース上の
>スコープにある変数に代入されなければ、処理終了後その変数は GC 
>対象であり、その時点で終末処理できる」でした。
>
>> どのように思っていらっしゃったかは知る由もないのですが、はっ
>> きり言えることは「なんらかの方法でちゃんとcloseしてください」
>> です。
>はい。アドバイスありがとうございます。



In This Thread

Prev Next