From: Tadashi Saito Date: 2007-02-25T02:00:15+09:00 Subject: [ruby-dev:30409] Re: [ruby_1_8] can't grub Digest::SHAxxx on powerpc-darwin こんばんは、斎藤です。報告遅れて申し訳ありません。 On Wed, 14 Feb 2007 22:24:04 +0900 "Akinori MUSHA" 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まですべて通る事を確認いたしました。 どうもありがとうございました。 -- 斎藤ただし