[#43353] 丸数字の文字コード変換 — Masuda Yoshihisa <sacong@...>
マスダといいます。
10 messages
2007/04/02
[#43363] 特定のmoduleに属しているかの判別 — "西塔伸一郎" <sinsaihy@...>
初めまして
5 messages
2007/04/04
[#43369] dRuby に CGI を渡す→script_uri が上手く取得出来ない — 石井 大海 <banzaida@...>
こんばんは、konnです。
10 messages
2007/04/05
[#43373] Re: dRuby に CGI を渡す→script_uri が上手く取得出来ない
— Masatoshi SEKI <m_seki@...>
2007/04/06
咳といいます。
[#43374] Re: dRuby に CGI を渡す→script_uri が上手く取得出来ない
— 石井 大海 <banzaida@...>
2007/04/06
こんにちは、konnです。
[#43376] Re: dRuby に CGI を渡す→script_uri が上手く取得出来ない
— Masatoshi SEKI <m_seki@...>
2007/04/06
咳といいます。
[#43382] VB6からrubyを呼び出す際の問題について — "takumi iino" <trot.thunder@...>
はじめまして。飯野と申します。
11 messages
2007/04/06
[#43383] Re: VB6からrubyを呼び出す際の問題について
— rubikitch@...
2007/04/06
From: "takumi iino" <trot.thunder@gmail.com>
[#43384] Re: VB6からrubyを呼び出す際の問題について
— "takumi iino" <trot.thunder@...>
2007/04/06
飯野です。
[#43385] Re: VB6からrubyを呼び出す際の問題について
— "takumi iino" <trot.thunder@...>
2007/04/06
飯野です。
[#43407] オブジェクトのインスタンス変数名の取得 — pegacorn <subscriber.jp@...>
こんにちは。
8 messages
2007/04/10
[#43408] Re: オブジェクトのインスタンス変数名の取得
— Yukihiro Matsumoto <matz@...>
2007/04/10
まつもと ゆきひろです
[#43409] Re: オブジェクトのインスタンス変数名の取得
— pegacorn <subscriber.jp@...>
2007/04/10
07/04/10 に Yukihiro Matsumoto <matz@ruby-lang.org> さんは書きました:
[#43410] Re: オブジェクトのインスタンス変数名の取得
— Yukihiro Matsumoto <matz@...>
2007/04/10
まつもと ゆきひろです
[#43415] Gtk::TreeView でドラッグ — Takeshi Honda <moecho21@...>
お世話になります。
5 messages
2007/04/10
[#43428] ClassのクラスはClass自身でない? (RHGの疑問点) — Yoshino <ysnmin@...>
初めまして。吉野と言います。
5 messages
2007/04/12
[#43435] ruby から C/C++ の利用法 — ohrsts@...
小原と申します。
6 messages
2007/04/14
[#43450] Fwd: 「オープンソースカンファレンス2007 Hokkaido」開催のお知らせ — "SHIMADA Koji" <snoozer.05@...>
しまだ@Ruby札幌です。
4 messages
2007/04/20
[ruby-list:43428] ClassのクラスはClass自身でない? (RHGの疑問点)
From:
Yoshino <ysnmin@...>
Date:
2007-04-12 13:43:09 UTC
List:
ruby-list #43428
初めまして。吉野と言います。
青木さんの書かれたRuby Hacking Guideを読んでいて、疑問に思う点
があったので質問させて下さい。(長文失礼します。)
第4章 クラスとモジュール
http://www.loveruby.net/ja/rhg/book/class.html
上記ページに、以下のような記述があります。
[クラスの無限連鎖]
このことを踏まえて現実に実装することを考えてみよう。まず最
も素朴な方法として、ClassのクラスはClassClass、ClassClass
のクラスは ClassClassClass……というふうに、クラスのための
クラスを次々と連鎖することが考えられる。しかし論理的にはと
もあれ、こんなものは効率的には実装できない。そういうわけで
クラスがオブジェクトであるオブジェクト指向言語は、 Classの
クラスをClass自身にしてしまうことでループを作りだし、無限
のインスタンス〜クラス関係を仮想的に作りだすのが常套手段な
のである。
これを読んで、実際にrubyのソースも見てみて、なるほどと納得して
いたのですが、読み終わったあと正誤表ページに以下のように書いて
あるのを見つけました。
『Rubyソースコード完全解説』正誤表
http://www.loveruby.net/ja/rhg/errata.html
p.128 中程、クラスの連鎖について 「しかし論理的にはともあ
れ、こんなものは効率的には実装できない」とあるが、 最新の
1.8 の実装だと「効率的には実装できない」はずの実装になって
いる。 つまり効率的に実装できる。
私は、以下のソースから、「ClassのクラスはClass自身」という記述
に納得していました。
[RHG解説対象のruby (1.7.3 2002-09-12) の object.c]
1237 : Init_Object()
略 :
1245 : rb_cClass = boot_defclass("Class", rb_cModule);
⇒ ruby起動時にInit_Object()関数から boot_defclass()関数が
コールされ、rb_cClass (= Classクラスの実体) が作成され
る。
[同 object.c]
1221 : boot_defclass(name, super)
略 :
1226 : VALUE obj = rb_class_boot(super);
略 :
1231 : return obj;
⇒ boot_defclass()関数は、中でrb_class_boot()関数をコール
し、そのreturn値を返却している。rb_class_boot()関数で何
を行っているかというと、
[同 class.c]
22 : rb_class_boot(super)
略 :
25 : NEWOBJ(klass, struct RClass);
26 : OBJSETUP(klass, rb_cClass, T_CLASS);
略 :
34 : return (VALUE)klass;
⇒ NEWOBJでオブジェクトの実体を作成し、OBJSETUPでflagsと
klassを設定している。つまり、新規生成したオブジェクト
klassのklass->klassにrb_cClassを設定している。そして、
rb_class_boot()関数のreturn値は最終的に、rb_cClassに代
入される。
まとめると "rb_cClass->klass == rb_cClass" となり、前述の
「ClassのクラスはClass自身」という処理が実装されているんだな〜
と思っていました。
このあたりの処理は、RHG解説対象のruby (1.7.3 2002-09-12) でも1.
8.0版rubyでも1.8.6版rubyでも、変わりは無いようです。
しかし正誤表ページには、
最新の 1.8 の実装だと「効率的には実装できない」はずの実装
になっている。
とあり、1.8のrubyでは「ClassのクラスはClassClass」となっている、
と訂正されています。
ということで、最新の (1.8の) rubyにおいて、
ClassのクラスはClass自身?
ClassのクラスはClassClass?
のどちらが正しいのでしょうか?
参照すべきソースや関数なども、ヒント程度に示して頂けると嬉しい
です。よろしくお願いします。
--
Yoshino <ysnmin@gmail.com>