Bug #1556
irb does not save history from 1.8.7-p83 and later
| Status: | Closed | Start date: | 06/02/2009 | |
|---|---|---|---|---|
| Priority: | Normal | Due date: | ||
| Assignee: | - | % Done: | 0% |
|
| Category: | - | |||
| Target version: | - | |||
| ruby -v: | ruby 1.8.7 (2009-01-12 patchlevel 83) [i686-linux] |
Description
1.8.7-p83 以降(p167 でも)、irb がヒストリを保存してくれないようです。 ファイナライザが呼ばれる条件とタイミングが変わった影響でしょうか? チケットを探しきれなかったのですが、既出だったらごめんなさい。 $ rm -f ~/.irb_history $ irb -f irb(main):001:0> require "irb/ext/save-history" => true irb(main):002:0> context.save_history = 3 => 3 irb(main):003:0> RUBY_DESCRIPTION => "ruby 1.8.7 (2009-01-12 patchlevel 83) [i686-linux]" irb(main):004:0> p 83 83 => nil irb(main):005:0> exit $ cat ~/.irb_history cat: /home/nov/.irb_history: No such file or directory p82 だと保存されます。 $ rm -f ~/.irb_history $ irb -f irb(main):001:0> require "irb/ext/save-history" => true irb(main):002:0> context.save_history = 3 => 3 irb(main):003:0> RUBY_DESCRIPTION => "ruby 1.8.7 (2009-01-11 patchlevel 82) [i686-linux]" irb(main):004:0> p 82 82 => nil irb(main):005:0> exit $ cat ~/.irb_history RUBY_DESCRIPTION p 82 exit
History
Updated by keiju (Keiju Ishitsuka) almost 3 years ago
けいじゅ@いしつかです.
ruby-1.8.7 系のバグのような気がします. ファイナライザーが呼び出されな
いような?
下記のプログラムで,
---
obj = Object.new
def fin
proc{p 1}
end
ObjectSpace.define_finalizer(obj, fin)
#obj = nil
--
1.8.7最新版のみファイナライザが実行されません. 他の, 1.8.8, 1.9系は呼
ばれます. ちなみに obj = nil を入れると呼び出されるので, その辺りの問
題では?
In [ruby-dev:38563] the message: "[ruby-dev:38563] [Bug #1556] irb
does not save history from 1.8.7-p83 and later", on Jun/02 21:47(JST)
Nobuhiro IMAI writes:
>Bug #1556: irb does not save history from 1.8.7-p83 and later
>http://redmine.ruby-lang.org/issues/show/1556
>
>起票者: Nobuhiro IMAI
>ステータス: Open, 優先度: Normal
>ruby -v: ruby 1.8.7 (2009-01-12 patchlevel 83) [i686-linux]
>
>1.8.7-p83 以降(p167 でも)、irb がヒストリを保存してくれないようです。
>ファイナライザが呼ばれる条件とタイミングが変わった影響でしょうか?
>チケットを探しきれなかったのですが、既出だったらごめんなさい。
>
>$ rm -f ~/.irb_history
>$ irb -f
>irb(main):001:0> require "irb/ext/save-history"
>=> true
>irb(main):002:0> context.save_history = 3
>=> 3
>irb(main):003:0> RUBY_DESCRIPTION
>=> "ruby 1.8.7 (2009-01-12 patchlevel 83) [i686-linux]"
>irb(main):004:0> p 83
>83
>=> nil
>irb(main):005:0> exit
>$ cat ~/.irb_history
>cat: /home/nov/.irb_history: No such file or directory
>
>p82 だと保存されます。
>
>$ rm -f ~/.irb_history
>$ irb -f
>irb(main):001:0> require "irb/ext/save-history"
>=> true
>irb(main):002:0> context.save_history = 3
>=> 3
>irb(main):003:0> RUBY_DESCRIPTION
>=> "ruby 1.8.7 (2009-01-11 patchlevel 82) [i686-linux]"
>irb(main):004:0> p 82
>82
>=> nil
>irb(main):005:0> exit
>$ cat ~/.irb_history
>RUBY_DESCRIPTION
>p 82
>exit
>
>
>----------------------------------------
>http://redmine.ruby-lang.org
>
>
__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---
Updated by matz (Yukihiro Matsumoto) almost 3 years ago
まつもと ゆきひろです In message "Re: [ruby-dev:38566] Re: [Bug #1556] irb does not save history from 1.8.7-p83 and later" on Thu, 4 Jun 2009 17:47:50 +0900, keiju@ishitsuka.com (石塚圭樹) writes: |ruby-1.8.7 系のバグのような気がします. ファイナライザーが呼び出されな |いような? |1.8.7最新版のみファイナライザが実行されません. 他の, 1.8.8, 1.9系は呼 |ばれます. ちなみに obj = nil を入れると呼び出されるので, その辺りの問 |題では? なるほど。調べてみます。 ただ、プロセス終了時におけるファイナライザの信頼できる実行は なかなか難しいので、将来的にはhistoryのセーブのような重要なタ スクはファイナライザからではなく、at_exitのようなフックで実現 していただけると助かります。
Updated by no6v (Nobuhiro IMAI) almost 3 years ago
いまいです。
From: Yukihiro Matsumoto <matz_at_ruby-lang.org>
Date: Thu, 4 Jun 2009 18:21:02 +0900
> |ruby-1.8.7 系のバグのような気がします. ファイナライザーが呼び出されな
> |いような?
>
> |1.8.7最新版のみファイナライザが実行されません. 他の, 1.8.8, 1.9系は呼
> |ばれます. ちなみに obj = nil を入れると呼び出されるので, その辺りの問
> |題では?
>
> なるほど。調べてみます。
>
> ただ、プロセス終了時におけるファイナライザの信頼できる実行は
> なかなか難しいので、将来的にはhistoryのセーブのような重要なタ
> スクはファイナライザからではなく、at_exitのようなフックで実現
> していただけると助かります。
irb のプロセスの寿命と、obj(IRB::Context の @io)の寿命とが同じぐらいな
のであれば、単純に at_exit を使うようにするだけでいいでしょうか。今の
ところ、手元では問題なく動いています。とりあえず ruby_1_8{,_[67]} ブラ
ンチにはそのままあたると思います。
--
Nobuhiro IMAI <nov@yo.rim.or.jp>
Key fingerprint = F39E D552 545D 7C64 D690 F644 5A15 746C BD8E 7106
Index: lib/irb/ext/save-history.rb
===================================================================
--- lib/irb/ext/save-history.rb (revision 23644)
+++ lib/irb/ext/save-history.rb (working copy)
@@ -51,7 +51,7 @@
include Readline
def HistorySavingAbility.create_finalizer
- proc do
+ at_exit do
if num = IRB.conf[:SAVE_HISTORY] and (num = num.to_i) > 0
if hf = IRB.conf[:HISTORY_FILE]
file = File.expand_path(hf)
@@ -66,7 +66,7 @@
end
def HistorySavingAbility.extended(obj)
- ObjectSpace.define_finalizer(obj, HistorySavingAbility.create_finalizer)
+ HistorySavingAbility.create_finalizer
obj.load_history
obj
end
Updated by keiju (Keiju Ishitsuka) almost 3 years ago
けいじゅ@いしつかです. 今日つつかれたのをもう一件. In [ruby-dev:38580] the message: "[ruby-dev:38580] Re: [Bug #1556] irb does not save history from 1.8.7-p83 and later", on Jun/08 09:18(JST) Nobuhiro IMAI writes: >いまいです。 >> |ruby-1.8.7 系のバグのような気がします. ファイナライザーが呼び出されな >> |いような? >> >> |1.8.7最新版のみファイナライザが実行されません. 他の, 1.8.8, 1.9系は呼 >> |ばれます. ちなみに obj = nil を入れると呼び出されるので, その辺りの問 >> |題では? >> >> なるほど。調べてみます。 まつもとさん, この件どうなりました? 1.8.7系のファイナライザのバグだと思っているのですが? それとは別に: >> ただ、プロセス終了時におけるファイナライザの信頼できる実行は >> なかなか難しいので、将来的にはhistoryのセーブのような重要なタ >> スクはファイナライザからではなく、at_exitのようなフックで実現 >> していただけると助かります。 > >irb のプロセスの寿命と、obj(IRB::Context の @io)の寿命とが同じぐらいな >のであれば、単純に at_exit を使うようにするだけでいいでしょうか。今の >ところ、手元では問題なく動いています。とりあえず ruby_1_8{,_[67]} ブラ >ンチにはそのままあたると思います。 これはこれでその通りだと思いますので, 採用したいと思います. __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---
Updated by matz (Yukihiro Matsumoto) almost 3 years ago
まつもと ゆきひろです In message "Re: [ruby-dev:38818] Re: [Bug #1556] irb does not save history from 1.8.7-p83 and later" on Sat, 18 Jul 2009 01:08:03 +0900, keiju@ishitsuka.com (keiju ISHITSUKA) writes: |>> なるほど。調べてみます。 | |まつもとさん, この件どうなりました? |1.8.7系のファイナライザのバグだと思っているのですが? ファイナライザのバグなのは確かです。ただし、ファイナライザを 必ず呼ぶのはかなり困難なので、at_exitでの対応をお願いしたい ところです。よろしく。
Updated by keiju (Keiju Ishitsuka) almost 3 years ago
けいじゅ@いしつかです. In [ruby-dev:38819] the message: "[ruby-dev:38819] Re: [Bug #1556] irb does not save history from 1.8.7-p83 and later", on Jul/18 01:43(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです >ファイナライザのバグなのは確かです。ただし、ファイナライザを >必ず呼ぶのはかなり困難なので、at_exitでの対応をお願いしたい >ところです。よろしく。 at_exitだと, 組み込まれているときに対応できないので, irbから抜けたとき に実行するようにしました. それで, trunkの方には反映しましたが, 1.8.7への反映はどうすればよいんで しょう? 何か手続きとかあります? __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---
Updated by matz (Yukihiro Matsumoto) almost 3 years ago
まつもと ゆきひろです In message "Re: [ruby-dev:38839] Re: [Bug #1556] irb does not save history from 1.8.7-p83 and later" on Wed, 22 Jul 2009 00:42:09 +0900, keiju@ishitsuka.com (石塚圭樹) writes: |それで, trunkの方には反映しましたが, 1.8.7への反映はどうすればよいんで |しょう? 何か手続きとかあります? 1.8 HEADに突っ込んでください。各ブランチのメンテナがバックポー トするでしょう。
Updated by no6v (Nobuhiro IMAI) almost 3 years ago
いまいです。 From: keiju_at_ishitsuka.com (石塚圭樹) Date: Wed, 22 Jul 2009 00:42:09 +0900 > at_exitだと, 組み込まれているときに対応できないので, irbから抜けたとき > に実行するようにしました. lib/irb.rb が更新されていないようです。 $ svn log -v -r24229 ------------------------------------------------------------------------ r24229 | keiju | 2009-07-22 00:39:51 +0900 (Wed, 22 Jul 2009) | 4 lines Changed paths: M /trunk/ChangeLog M /trunk/lib/irb/ext/save-history.rb M /trunk/lib/irb/init.rb * lib/irb.rb, lib/irb/init.rb, lib/irb/ext/save-history.rb: add IRB::irb_at_exit. no use finalizer saving history. [ruby-dev-38563] ------------------------------------------------------------------------ $ svn log -l1 lib/irb.rb ------------------------------------------------------------------------ r23985 | keiju | 2009-07-07 20:36:20 +0900 (Tue, 07 Jul 2009) | 3 lines * bin/irb, lib/irb.rb lib/irb/*: irb-0.9.6, extend inspect-mode ------------------------------------------------------------------------ -- Nobuhiro IMAI <nov@yo.rim.or.jp> Key fingerprint = F39E D552 545D 7C64 D690 F644 5A15 746C BD8E 7106
Updated by keiju (Keiju Ishitsuka) almost 3 years ago
けいじゅ@いしつかです. In [ruby-dev:38841] the message: "[ruby-dev:38841] Re: [Bug #1556] irb does not save history from 1.8.7-p83 and later", on Jul/22 01:49(JST) Nobuhiro IMAI writes: >いまいです。 >> at_exitだと, 組み込まれているときに対応できないので, irbから抜けたとき >> に実行するようにしました. > >lib/irb.rb が更新されていないようです。 申し訳ない. 追加しました. __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---
Updated by shyouhei (Shyouhei Urabe) over 1 year ago
- Status changed from Open to Closed
Fixed in 1.8.7-p196.