トップページ⇒tech
1001コメント296KB

Rubyの実装に疑問あり!

■ このスレッドは過去ログ倉庫に格納されています
0001「真面目な」反対派(何が真面目なのか知らないが)NGNG
Rubyの実装は、バイトコード使用ではなく、
構文木をeval関数(巨大なswitch文)でたどっていく方法だが。
これでは速度的に不利だ。
また、そのせいで例外処理にsetjmpとlongjmpを使う風になっていて、
余計な負担がかかっている。
GCもスタックを勝手にサーチして「保守的ごみ集め」をやっているが
これも速度的に問題がある。
開発者のまつもと氏はいったいどう考えて作っているのか、
知りたいところだ、、、。
0153デフォルトの名無しさんNGNG
るんるんるるんるるんるんるるんるるるるんるんるるん♪
るびーはサイキョーーー西京最強斎京斉京ーーーーー!!
0154デフォルトの名無しさんNGNG
>>152は白痴
0155デフォルトの名無しさんNGNG
まともなスレだったからって一生懸命荒らさんでもいいのに。
0156シゲは去ねNGNG
 
0157156は氏ねNGNG
                   
0158157も死ねNGNG
 
0159158も市ねNGNG
   
0160 NGNG
ちんちん
0161デフォルトの名無しさんNGNG
うんこ
0162デフォルトの名無しさんNGNG
>>152
多言語ユーザが Ruby を陥れようとしているのもあるんじゃない?
まあ大半は白痴 Ruby ユーザがやってるんだろうが。
0163デフォルトの名無しさんNGNG
Del厨のしわざ。
0164デフォルトの名無しさんNGNG
たとえメジャーにならない言語でも日本人が作り出したことに価値があるのです!!
HSPマンセーーーーーーーーー!!!!!!!!!!!!
0165衝撃の真実NGNG
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0166デフォルトの名無しさんNGNG
実は、RubyとHSPの作者が兄弟って知ってました?
実務派の兄と論理派の弟ですが、HNが平仮名な所はそっくり!!
0167デフォルトの名無しさんNGNG
あーゆーきでぃんぐ?
0168デフォルトの名無しさんNGNG
Ruby vs HSP
...世も末だな。よりによってHSPと比較される日が来るとは...。
0169デフォルトの名無しさんNGNG
ってか、RubyがHSPに喧嘩をふっかけたんだろ
0170デフォルトの名無しさんNGNG
あーゆーきりんぐ?
0171デフォルトの名無しさんNGNG
RubyからHSPへステップアップ!!!!
0172デフォルトの名無しさんNGNG
るびはさくしゃのどきゅなぶぶんでそんしてる
えっちすぷはゆうざあがちゅう
0173エセrubyistNGNG
>>20
かなり遅レスだが、elseifってなによ?
0174デフォルトの名無しさんNGNG
VBの構文>173
0175デフォルトの名無しさんNGNG
叩きたい奴は叩くために敵のことをよく勉強しとけよ!
で、叩くのはいいけど煽り荒らしは勘弁な。
0176デフォルトの名無しさんNGNG
>>175
同意。でもよく勉強してる叩きさんたちはどこかへ行っちゃったみたい。
0177デフォルトの名無しさんNGNG
それで結局のところ、今あるRubyのVM実装って、
・まつもとさんVM(IPAの産物・性能検証用)
・木山さんVM(独自実装)
・JRubyで使ってるVM(JVMを利用)
の3つ、ということでいいのかな? でもJRubyのは
別に中間言語に落としてるわけじゃないみたいだから
ちょっと違うかもしれない。前二者のはまだ公開されて
ないし。

Robert FeldtってまだVMは書いてないよね? Parrotも
Rubyでは使ってなさそうだし。AuroraはVM使ってない
よね。……こんなとこ?
0178デフォルトの名無しさんNGNG
>>177
これがみんな、それぞれ独自にparser書いてるんですか?
Rubyでは再利用はできないということですね。
0179デフォルトの名無しさんNGNG
ただでさえ少数派なのに・・・
0180デフォルトの名無しさんNGNG
172はドキュ
0181デフォルトの名無しさんNGNG
>>177-178
こういうのって複数実装があった方がいいような気がするが。
唯一の実装がへぼかったら目も当てられんだろう。
178はただの煽りかな
ちなみに俺もRubyユーザーじゃない。興味はあるけどね。
0182ルビ厨な入NGNG
複数実装で思い出したけど、
WindowsでのRubyは複数有るんだよね、、コンパイラによって、、
mswin32、mingw、cygwinって、、、(他にもあるらしいが、、、)
まあ、mswin32とmingwはバイナリ的に全く同じらしいけど、、、
でも、どうやら、mingw版に統一することで話が進んでいるらしい。
確かに、複数有ると、初心者は迷ってしまうかも知れないけど、
まだまだ、Rubyは初期の段階なのだから、
そう言うのが複数合ってもいいと思う。
複数の中から、いいものがどれかって残っていくと思うし、、、
0183ruby知らずNGNG
なんでvisual c++とかIntel C++コンパイラとかでビルドしないの?
MatzがPOSIX APIにこだわってWin32APIに移植する気がないってことか、
ほかにライセンスとかの理由がある?
0184デフォルトの名無しさんNGNG
>>183
mswin32版はVC++でコンパイルしたもの。
mingw版はmswin32版とほぼ同じソースをMinGWでコンパイルしたもの。

Intel C++でビルドしてる人がいないのは、誰も持ってないんだろ、きっと。
0185デフォルトの名無しさんNGNG
>>178
Parserは別の話。これはVMね。
つーか、まつもとさんも木山さんもCで書いてるんじゃないの?

>>183
MatzはWindowsは使わないからWinに関することはぜんぶ他のひとにお任せ。
0186タコNGNG
>>177
もうVMの開発は進行していたのですか。
まつもとさんと木山さんのものはまだ未公開なのですか?
JRubyのソースって手に入れられるのでしょうか?
これからRubyのHPに行ってみます。でもそれ以外のとこかにあるのでしたら、URLを教えてもらえますか、すみません。

「まつもとさんのVM」のところに記されている「IPA」って何ですか?
ひょっとして、まつもとさんが受けた「国からの助成」(奨励だったかな?)と関係ありますか?

JRubyって、JavaでC言語版の本家Rubyを書き直したものなのでしょうか?
(そうでないとすると、以下の質問は私の勘違いというか無意味に
なってしまいますが。すみません)

JRubyも構文木をたどって解釈実行する方式だとすると、
インタプリタが実行するのはC言語の標準ライブラリ(で作られたまつもとさんの関数群)ではなく、JavaAPIを実行するのでしょうか?
たとえば、Rubyの文字列構造体(RString?)と文字列ライブラリ(string.c?)の代わりに、
Javaの文字列クラスを使用するとか。

それと、JRubyはJava記述だから、GCのコードはないんでしょうか?(当然そうなりますよね?)

あと、例外処理とかはどうしているのでしょうか?
本家Rubyはsetjmpを使っているそうだけど(1の人によると)、
Javaのコードではどのように処理しているのでしょうか?

>Robert FeldtってまだVMは書いてないよね? Parrotも
>Rubyでは使ってなさそうだし。AuroraはVM使ってない
>よね。……こんなとこ?
これは海外の開発者の方たちですか?

>>181
わたしも複数実装の存在はいいのではないかと思います。
(でも、それが将来統合されると、もっといいと思います。)
0187デフォルトの名無しさんNGNG
>>186
文章が長い上に「?」だらけ。

>まつもとさんと木山さんのものはまだ未公開なのですか?
>JRubyのソースって手に入れられるのでしょうか?
>「まつもとさんのVM」のところに記されている「IPA」って何ですか?
>JRubyって、JavaでC言語版の本家Rubyを書き直したものなのでしょうか?
・・・
>これは海外の開発者の方たちですか?

本当に知りたきゃGoogleで検索してみろ。
本当にRubyのことが知りたいなら、RubyのHPに逝け。

あまりに酷いんで、ネタかと思うぞ。
0188デフォルトの名無しさんNGNG
複数実装は良いんだけど、Rubyの仕様ってちゃんと決まってるの?
distributionについてくるRuby Language Referenceは互換性を保
証できるほどちゃんとしたものでは全然ないし。

「まつもと処理系のソースが仕様です」なのかな?
0189sageNGNG
>>186
そんなにへりくだるこたねぇそ。どーせネットなんだからよ。
「すみません」とかいってる奴、久々見たよ。

JRubyの例外処理。
俺は知らんけど、Javaで書かれとるんなら、
Javaの例外処理を使ってるんと違う。
最近SQLしかいじっとらんで知らんわ。

でも、JavaかましてるんならフツーのRubyより、遅いんとちゃうんか。
0190デフォルトの名無しさんNGNG
>>189
SQLシコシコやってるような坊やが、Ruby語るなっつーの。
>>187
だから、この程度の質問にも答えられない厨房が、Ruby語るなっつーの。
0191デフォルトの名無しさんNGNG
>>190
じゃ、おめー答えてみろよ。
0192デフォルトの名無しさんNGNG
>>191
お前が言えよ。
0193デフォルトの名無しさんNGNG
>>186
まつもとさんVMは試作というか、検証用で、Rite用のは別に書き始める予定
なんじゃないのかな。本当のところは本人に聞かないとわからんけど。
IPAは未踏で正解。
JRubyは http://jruby.sf.net/ にソースも含めて全部あるから見てみ。
Parrotは http://www.parrotcode.org/ にある。auroraはRAA。

>>189
確かにかなり遅いが、JavaのオブジェクトをRubyから利用できるのが
メリットか。
0194デフォルトの名無しさんNGNG
>>186
噂では、まつもとさんのVMのコードはFTPで手に入るそうだ。
木山さんのはインタプリタとは分離して開発してるようで、
まだバイトコードを手で書くような感じだった。LC2001のと
きの話だが。
どっちもまだ実験段階。

IPAというのは通産省(今はなんてんだっけ)の外郭団体。情報
処理振興なんとかかんとか。忘れた。

JRubyはRAAに登録されてなかったかな。
http://jruby.sourceforge.netがメイン。
ちらっと見た感じでは、eval.c同様構文木を自前で辿ってる
ようで、バイトコードは使っていない。
0195デフォルトの名無しさんNGNG
ここもそろそろねたぎれだな。
では
0196デフォルトの名無しさんNGNG
191 名前:デフォルトの名無しさん :01/11/08 15:25
>>190
じゃ、おめー答えてみろよ。

192 名前:デフォルトの名無しさん :01/11/08 15:27
>>191
お前が言えよ。

恥ずかしすぎ!
0197デフォルトの名無しさんNGNG
Rubyの意義は 2chでネタにされる事
そんだけ
0198デフォルトの名無しさんNGNG
>>197 がいいこと言った!
0199デフォルトの名無しさんNGNG
で結局Rubyはなんのために存在してるんだ?
0200デフォルトの名無しさんNGNG
粘着質は嫌いだ
0201デフォルトの名無しさんNGNG
>>199
他の数千の言語が存在するのと同じ理由だろ。

なんで自分の好きな言語以外を排斥しようとする連中がいるのか理解に
苦しむなぁ。
誰がどんな言語を作ってどんな言語を使おうがそいつの勝手だろうに。
0202デフォルトの名無しさんNGNG
>なんで自分の好きな言語以外を排斥しようとする連中
それってRubyユーザ?
0203デフォルトの名無しさんNGNG
>>202
違います。Rubyユーザはそんなことしません。
よく、まつもと氏が書いた文章を持ち出して「そんなことない」と批判する人が
いますが、あれは、他言語と比べての優位性をアピールしているだけ。
優位であると主張することと、排斥することは全く違います。
0204201NGNG
>>202
なんでそうやってレッテルを貼りたがるんだ?
Ruby厨房もアンチも同じだ。
0205デフォルトの名無しさんNGNG
はやく取り締まってほしいものだ。
0206デフォルトの名無しさんNGNG
>>203
なんでRubyユーザーは優位性をアピールしたがるわけ?
どの言語にアドバンテージを感じるかなんて人それぞれなんだからさ。
うちの言語の方が優位なんて発言は新興宗教の勧誘文句と変わらないよ。
0207デフォルトの名無しさんNGNG
>>203
だって、あの文章今となっては嘘っぱちだもん。
とくにpythonのところなんて酷いもんだよ。
今でも正しいのは優位なのか優位じゃないのかわからんところだけだし。
0208デフォルトの名無しさんNGNG
>>206
どの言語を選ぼうか迷ってる人、あるいは、Rubyをやろうかどうか
迷ってる人向けだから。

Perlだって、Pythonだってやってるでしょ。というか、ありとあらゆるものが
やってる。Rubyが特別なのではありません。

「新興宗教の勧誘文句」なんて受け取るほうがおかしい。
0209LisperNGNG
Rubyなんてどうでもいい!!
0210デフォルトの名無しさんNGNG
>>208
迷ってる人を引き込む勧誘文句なんだろ。
0211デフォルトの名無しさんNGNG
>>210
そうだよ。
で?
0212デフォルトの名無しさんNGNG
つーか実装の話をすれ。
それ以外は撲滅スレで。
ruby撲滅スレ
http://pc.2ch.net/test/read.cgi/tech/1001125342/
0213デフォルトの名無しさんNGNG
その勧誘文句がひときわ大声で傲慢な雰囲気を醸し出してるから
ここまで煽られるんじゃないかな。
0214デフォルトの名無しさんNGNG
エバンジェリスト(wが日本人だから勧誘文句が
ドキュなちゃんころにも聞こえやすいだけと思われ。
0215デフォルトの名無しさんNGNG
つーか、今更あの文章をネタにされてもねぇ・・・
0216デフォルトの名無しさんNGNG
まつもとがDQNなだけ?
0217デフォルトの名無しさんNGNG
まつもと=諸悪の根元
でファイナルアンサー!
0218デフォルトの名無しさんNGNG
意味も無く言語増やすのは素人。
手の込んだ単発ギャグのようなもの。
0219デフォルトの名無しさんNGNG
>>218
作者が言語ヲタを標傍してるからねぇ。
既存の言語でRuby以外にどういうプログラムを作ったのか知らないけど。
0220デフォルトの名無しさんNGNG
実装というよりは言語仕様なのかもしれないが、
「メタクラス」というのがわからない。
Rubyだけじゃなく、ほかのオブジェクト指向言語、Smalltalk
とかにもあるらしいが、まず、これってなんのためにあるのだ?
(ま、知らんでも、使えるのだろうが、何となくすっきりしないのだ)

「普通のクラス」(class宣言でユーザーが作成するクラス)と
インスタンスの関係はわかるような気がするのだが、
その「普通のクラス」はメタクラスのインスタンスなのか?

作者のRuby本も立ち読みしてみたが、この部分の
継承関係を図示してあったが、よくわからん。
(まず最初にObjectがあって?それからどーなるんだ?)

この厨房に誰か教えてくれ。
ちなみに俺は普段C++を使っているが、この言語には
メタクラスという概念はないような気がするのだが。
0221デフォルトの名無しさんNGNG
正解。
0222デフォルトの名無しさんNGNG
ヴァカ逝ってよし!
0223デフォルトの名無しさんNGNG
>>220
UML でのメタクラスだが考え方は同じ。
http://www.asahi-net.or.jp/~dp8t-asm/java/tips/UMLClassDiagramMetaClass.html

class Foo
@@baz = nil
attr_accessor :foo
def Foo.baz; end
def foo; end
end

例えば上のクラス Foo には
クラス変数 baz、クラスメソッド baz、インスタンス変数 foo、メソッド foo などがある。
が、特定のあるクラスではなく、「クラス」そのものはどう表現すればいいのか。
その答えがメタクラス。
この考えではメタクラスのインスタンスがクラスとなる。
メタクラスでは、クラス変数が定義できる、
インスタンスメソッドが定義できる、などが定義される(これは概念上ね)。
0224デフォルトの名無しさんNGNG
>>219
http://www.st.rim.or.jp/~fuku/cmail/intro.html
0225デフォルトの名無しさんNGNG
で、Ruby でのメタクラスのクラスは Class クラス。
Class.public_instance_methods #=> ["new", "superclass"]
でわかるように Class のインスタンスであるクラス(例えば上の Foo クラス)は
new や superclass といったメソッドを持つ。
これらのメソッドはクラスの視点ではクラスメソッドとなる。

例えばメタクラスがあることで動的にクラスを作成することができる。
223 の Foo クラスの作成は以下のコードでできる。
Foo = Class.new
Foo.class_eval "@@baz=nil; attr_accessor :foo; def foo; end; def Foo.baz; end"
0226デフォルトの名無しさんNGNG
>>223, 225
220だ。ありがとよ。
でも、やっぱ、わかんねえ。
Rubyの奴らって、みんなこんな概念わかってるのか。
だとしたらすげえな。
なんかC++の方が、単純に思えてきた。Javaもメタクラスってあるのか。

Ruby Hacker's Guide
http://www9.xdsl.ne.jp/~aamine/ja/ruby/hack/class.html
も読んでみたのだが、
そこにあった下記の図が、ますます混乱に拍車をかけている。
(上手く表示されていないかもな)

+--------+
| |
Object -------> (Object)
^ ^ | ^ ^
| | | | |
+------------------+ | | | |
| +-----|------|------+ |
| | | | |
AnyClass ------> (AnyClass)| | |
| | |
Module -------> (Module)
^ ^ | ^
| | | |
AnyModule ---> (AnyModule) | | |
| | |
Class -------> (Class)
^ |
| |
+------+

ダメだ。
なんだか循環しているようで、
アタマがこんがらかってきた。逝ってしまいそうだ。

まずもって、メタクラスが何のためにあるのか、どうしても理解できない。
Classにnewがあるのはなぜなのか。また、そのおかげで
動的にクラスを作成することができる、というのもわからない。
0227デフォルトの名無しさんNGNG
わりい、やっぱ上手く表示されてなかった。
0228デフォルトの名無しさんNGNG
>>226
みんながみんな、メタクラスの概念を完全に理解している訳じゃないと思うよ。
実際、クラスがClassのインスタンスだって事を意識することはあまり無いよ。
余談だけど、クラスのメタクラスClassはClassのインスタンスでもあるらしいんだけど、、、
こう言うのを考えるともっと混乱してくる思うので、気にせずに逝こう!
0229デフォルトの名無しさんNGNG
>>226
クラスってのはオブジェクトの属性と振る舞い(メソッド)を定義したものってのは
判るよな?

で、JavaとかRubyとかはクラスそのものをプログラム上でいろいろ操作
できる。
たとえばクラスに含まれる属性やメソッドの種類と数を調べたり
Rubyだとメソッドを削除したりできる。
で、そのクラスそのものを操作するメソッドとかが定義してあるのがメタクラス
メタクラスはクラスのクラスだ
0230223NGNG
OMG の MOF だとメタメタクラスなんてのまであって頭が痛くなるね。
http://www.tech-arts.co.jp/oo/uml2.html

>>226
Ruby の実装で考えると混乱するよ。
単純にクラスの意味を定義する階層が上にあるとだけ認識すればいい。
0231デフォルトの名無しさんNGNG
インタプリタ型でクラスの概念を備えている言語の処理系を作ると仮定して
その時にクラスがどう表現されるかを考えると自然と分かる。
0232デフォルトの名無しさんNGNG
メタクラスって、
クラス自体もオブジェクトだと看倣した時に
その「クラス」オブジェクトのクラスは何かって考えると
わかりやすいよ。
ただし、クラスについて考える時に
例えばIntegerなら
Integerという名前のオブジェクトか
Integerクラスのオブジェクトか
をきちんと区別しないと混乱するから注意。

ちなみにSmalltalkでは
1
-> SmallInteger
-> SmallInteger class(SmallInteger classはClassのサブクラス)
-> Metaclass
-> Metaclass class(Metaclass classはClassのサブクラス
-> Metaclass
以下無限に続く
っとなっとりますです。
ついでにクラス階層は
-Object
- Behavior
- Metaclass
- Class
- Object class
- Behavior class
- Metaclass class
- Class class
- Magnitude class
- Number class
- Integer class
- SmallInteger class
- Magnitude
- Number
- Integer
- SmallInteger
0233厨房質問NGNG
で、結局メタクラスって実用上どんな時に役立つの?
>>231の言ってることは解るけど、内部の仕組みをわざわざ言語仕様として
ユーザーに扱わせるからには何か利点があるんだと思うけど。
0234デフォルトの名無しさんNGNG
>>233
まずクラスをオブジェクトとして扱うのなら、
そのクラスのクラスが必要になるってのはOK?
0235232NGNG
やっぱ崩れた...欝だ...
0236226NGNG
226だ。ありがとよ。

なるほど。だんだんわかってきたような気がする。
要するにメタクラスというのは、「動的」つまり実行時に、クラスの情報を取得したり、
クラスを操作したりするために存在するものなのだろう。
そして、クラス−インスタンス関係は

インスタンスオブジェクト --> 通常のクラス --> メタクラス

となる。
以上が俺の理解した「メタクラス」の一般だ。間違っているかもしれんが。

ここで、Rubyのクラス継承図
http://www9.xdsl.ne.jp/~aamine/ja/ruby/hack/class.html
を見ると、Objectを含む通常のクラスはそれぞれメタクラスを持っている。
メタクラス間にも通常のクラスと同様の継承関係がある。
だからメタクラスの根っこ(何て言うんだ?)は、Objectのメタクラスとなる。
ところで、この根っこのObjectのメタクラスは、通常クラスのClassから継承されている。
このClassにクラス操作のメソッドが存在するのだろう。
ということは、このClassは「メタメタクラス」ということになるのだろうか。
Classは通常のクラスなので、Objectから継承されている。
(このことによって、ClassはObjectの性質を持つ)
そして、そのObjectはメタクラスObjectのインスタンスであるから、
(スーパークラスである)Classの性質を持つ。
ということになるのだろうか。

これも間違っているだろうか。それ以前に説明が下手だったかもしれんが。
なんだか、「メビウスの輪」のように循環しているような部分があるからな。ObjectとClassの間で。
しかし、要するにそれは、全てのクラスを動的に操作可能にするための仕掛けなのだろうか。
つまり、誰かが言っていたように、全てをオブジェクトとして扱う、とか。

しかし、、、。
>>228
>余談だけど、クラスのメタクラスClassはClassのインスタンスでもあるらしいんだけど、、、
>こう言うのを考えるともっと混乱してくる思うので、気にせずに逝こう!
やっぱ、わかんなくなってきた。
もちろんメタクラスのことを考えなくとも、Rubyを使うことは可能だろうが、何か気になってすっきりしねえ。
0237デフォルトの名無しさんNGNG
>>233
メタクラスがあると、クラスも他のオブジェクトと同じように扱える。
返り値でクラスを返したり、変数にクラスを入れたりできるってこと。
0238デフォルトの名無しさんNGNG
>>236
ObjectとClassの間で循環しているってのはイイ線ついてる。
ただ、

> ところで、この根っこのObjectのメタクラスは、通常クラスのClassから継承されている。
> このClassにクラス操作のメソッドが存在するのだろう。
> ということは、このClassは「メタメタクラス」ということになるのだろうか。

継承関係とメタ関係を混同しているような...
Hogeというクラスがあったとして、
(Hoge)が(Object)から継承しているということが
(Hoge)のメタが(Object)だというわけではない。
それは、
HogeがObjectから継承していても
HogeのメタがObjectじゃないのと同じ。
Hogeのメタは(Hoge)だよね。

Rubyはよく知らないけど、もし
「ClassはClassのインスタンスでもあるらしい」が本当なら
(Hoge)のメタはClassという通常クラスで、Classはメタメタクラスになる。
ただ、これは継承関係とは全く別の話。

例えばSmalltalkだと
hogeのクラスはHogeで
Hogeのクラスは(Hoge)で
(Hoge)のクラスはMetaclassで、かつ、(Hoge)はClassのサブクラスで
Metaclassのクラスは(Metaclass)で
(Metaclass)のクラスはMetaclass
ってなってる。
つまり(Hoge)をメタクラスと呼ぶのは
「(Hoge)はMetaclassのインスタンスである」という意味。
これは1は整数と呼ぶのは
「1は整数のインスタンスである」ってのと同じ。
メタクラスの話をするときは、「1」と「整数」の混同に気を付けないと
わけわからなくなるから注意。
0239238NGNG
> (Hoge)が(Object)から継承しているということが
> (Hoge)のメタが(Object)だというわけではない。
じゃなくて
> (Hoge)がClassから継承しているということが
> (Hoge)のメタがClassだという理由ではない。
ね。スマソ。
0240デフォルトの名無しさんNGNG
長い→読まない
0241デフォルトの名無しさんNGNG
「長い→読まない」→読まない
0242デフォルトの名無しさんNGNG
はっきり言ってわざと難解に書いているのかと思う。
0243デフォルトの名無しさんNGNG
世の中、一言で簡単に説明できることばかりではない。
0244デフォルトの名無しさんNGNG
SmalltalkのMetaclassのあたりはグチャグチャで汚らしいよね。
なんでMetametaclass、Metametametaclassがなくて、ClassとMetaclass
の2段だけなのか? 答:特に理由はない。
なんでいっそJavaみたいにClassだけにしなかったのか? 答:特に理由はない。

自分自身を(間接的に)要素に持つ集合なんて言うのを安直に考えた型システ
ムは健全でなくなるが、ちゃんと考慮されてるのか? 答:深く考えてない。
0245デフォルトの名無しさんNGNG
>>244
再帰的に考えられないの?
CLOSとかのシステムはmetaclassの生成対象がmetaclassに
なることもある。
0246デフォルトの名無しさんNGNG
244 はコボラー
0247228NGNG
なんか、僕の所為で混乱している人が多数、、、
僕が言った、メタクラスというのは、プログラミング上で実際、
そのオブジェクトのクラスに見えるクラスのことであって、
実装におけるklassが示すクラスの事じゃなかったんだけど、、、
と言うことで、用語が混乱しておかしかったと、、、すいません。

RubyではClassのクラスはClassだよ。
klassが示すものとしてのメタクラスの意味ではClassのメタクラスは(Class)だけど。

class Hoge; end
hoge = Hoge.new
hoge.type #=> Hoge
Hoge.type #=> Class
Class.type #=> Class

ってね。
0248デフォルトの名無しさんNGNG
>>244
MetaclassがあることによってClass操作の柔軟性が増す。
同様にMetametaclassによってMetaclassの操作も可能にしたいと考えるが、
それを認めてしまうと無限のメタを許容することにもなってしまう。
そこで、全ての基底クラスにObjectを置き
作る作られるの関係を重視してMetaclass/Classという形にした、という話では?
プロトタイプ型の言語でプロトタイプの一種としてクラスの概念を導入した
と考えれば納得のいく構成だと思う。
0249デフォルトの名無しさんNGNG
Metaclassだってクラスなんだから、Metametaclassなんて要らないんじゃないの?
Metametaclass=Metaclassで不都合なかろう。
>>244で、”スモールトークでは”って書いてあるのがきになるんだが、本当にこのことが問題になってたんですか?
0250デフォルトの名無しさんNGNG
っていうか、
メタクラスの概念についてはいろいろ説明してる文章もあるけど
SmalltalkのClass,Metaclass周りのsource以上にわかりやすいものは
見たことないんだよね、正直言って。
つまり、
Metaclass自体がSmalltalkでどれだけ役に立ってるかというより、
OOにおけるメタ階層という概念の提示として
とても歴史的な意義があるんじゃないかと思う。

rubyなりpythonなりのメタ階層を設計する上で、
SmalltalkのClassやMetaclassは参照標準として
かなりの貢献をしたんじゃないかと思うよ。
0251厨房質問NGNG
これまでで
>>234 >>237 等
メタクラスの概念でクラスをオブジェクトとして扱えるのは
解ったんだけど、
それが実用上どんな利点をもたらすんでしょ?
人工知能で自己書き換えでもするんなら役立ちそうだけど。
0252デフォルトの名無しさんNGNG
>>251
動的なコード生成で使える。
XML文書を読み込んでオブジェクト化する時とか。
■ このスレッドは過去ログ倉庫に格納されています