Bug #1556

irb does not save history from 1.8.7-p83 and later

Added by no6v (Nobuhiro IMAI) almost 3 years ago. Updated about 1 year ago.

[ruby-dev:38563]
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.

Also available in: Atom PDF