せかいや

いまいるここを、おもしろく http://sekai-in-the-box.appspot.com/

【Ruby】「RubyはCで実装されている」 の意味は?

色んなところで見る「RubyはCで実装されている」というワード。
PHPもそう。
パーフェクトPHPにも「PHPはCで実装されている」とありました。

これ、いったい何を指すのか、
いまいち分からず師匠に相談してみました。



「Rubyの実装はC言語で書かれている(※1)」って、
どのフォルダの中を見れば、C言語で実装されていることをを感じる
(理解するとまでは行かなくても)事ができるのでしょう?
(※1)いまは、自分のPCに入っているMRIに話を限っています。

 

あるかもしらんけど、なんで?普通は見せる意味もないから、無いと思うよ。
C言語で書かれてますというのは、その後に続く文のほうが大事で、C言語で書かれているから何?かが大事。
多分 ObjectクラスをRubyで実装はしていないと思いますよ。
(大体、Rubyでどうやって実装するのかって問題があります)

 

なんかいまいち、言語が言語で実装されていると言うのが、
良く分からないと言うか、もやっとしていて。

例えば「組み込み系のクラス(例えばObjectクラス)」はrubyで記述されていません。
 ⇒Rubyフォルダ内に「Object.rb」ファイルは存在しないことから、そう考えました。
なので、ObjectはC言語で実装されているのでは?
じゃあ、コアクラスがX言語で実装されているとき、
その言語はXで実装されている、と表現されるのか。。?と疑問に思っています。

 

ちょっと頑張って説明しましょう。携帯から。

「いえいえ まずは考えます!」と師匠を押しとどめ、
改めて考え直し。


 

ObjectクラスをCで実装しているから、
Rubyインタプリタ(C言語をコンパイルした実行ファイル)が
Objectクラスを理解できる、という流れですかね。

そうやって考えると、
インタプリタと組み込み系のクラス群はセットになりますね。
インタプリタがJavaで記述されていたら、組み込み系のクラス群は
Javaで記述されていないといけない(Object.classになるのかな)


 

そうです。普通はそうなってます。
なんせ、組み込みっすから。

ただ、言語のデザインによっては、X言語の基本的なクラスをX言語で記述するということも可能です。
例えば、 Java の StringクラスはJavaで書くことができます


 

なるほど
「標準ライブラリ」と「組み込み」の違いがぴんと来なかったのですが、
インタプリタが使うかどうかで考えると、違いが見えてきますね!

「RubyはCで実装されている」というのは、正確に言うと
「Rubyを評価できるプログラムをCで書いたよ」というだけで。
だから何って話ですね。その後につづく話があるのですね。


 

そうです。
Cで書かれてるから、チューニングとかできて早いですとか
Cで書かれてるけど、***です。とかそういうのがくる


 
なるほどね!
RubyはCで実装されている」の意味が分かったよ!