[#30408] Ruby 1.8.6 preview2 has been released — "Akinori MUSHA" <knu@...>

 Ruby 1.8.6 preview2 をリリースしました。

20 messages 2007/02/24
[#30414] fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Hidetoshi NAGAI <nagai@...> 2007/02/25

永井@知能.九工大です.

[#30418] Re: fail to autoload at $SAFE==4 (Re: Ruby 1.8.6 preview2 has been released) — Nobuyoshi Nakada <nobu@...> 2007/02/25

なかだです。

[ruby-dev:30409] Re: [ruby_1_8] can't grub Digest::SHAxxx on powerpc-darwin

From: Tadashi Saito <shiba@...2.accsnet.ne.jp>
Date: 2007-02-24 17:00:15 UTC
List: ruby-dev #30409
こんばんは、斎藤です。報告遅れて申し訳ありません。

On Wed, 14 Feb 2007 22:24:04 +0900
"Akinori MUSHA" <knu@iDaemons.org> wrote:

>  デバッグしてみたんですが、 const_missing に行く前に
> rb_const_get_0 -> rb_autoload_load -> Init_sha2 ->
> rb_define_class_under -> rb_const_get_0 と再入しているところで
> method_missing に入って行ってエラーとってしまうようです。
> (Pure Ruby のコードでは再現しない模様)
(snip)
>  autoload なので、定数として定義されます。内部的には中身は
> Qundef で、参照されると見えないインスタンス変数 __autoload__ を
> 引いて autoload 処理を行い、定義された値を返します。

なるほど、その後コードを再度少し読み直して、勉強になりました。
ほんとはautorequireだとか、autoload専用に(見えてはいけないQundef含め)
内部で独自にテーブル管理をやってるので、単純な(?)const_missingとは
似てるように見えてもやはり違うんだなぁ、とまでは理解できました。

>  とりあえず autoload を外す回避策を trunk および ruby_1_8 に
> 入れました。

1.8.6-preview1に加え、先程preview2でも、Digest::SHA384の評価

$ ./ruby-1.8.6 -rdigest -ve 'p Digest::SHA384'
ruby 1.8.6 (2007-02-24 patchlevel 0) [powerpc-darwin8.8.0]
Digest::SHA384

とmake test-allまですべて通る事を確認いたしました。
どうもありがとうございました。

--
斎藤ただし

In This Thread

Prev Next