[ruby-list:549] Re: Vs. java
From:
matz@... (Yukihiro Matsumoto)
Date:
1996-09-20 17:58:28 UTC
List:
ruby-list #549
まつもと ゆきひろです。
In message "[ruby-list:548] Vs. java"
on 96/09/20, P nakawtse <nakawtse@syrinx.dq.isl.ntt.jp> writes:
|中渡です.
|
| もし何かお考えがあれば...
| rubyのobject指向について,javaやLimboなどとはどう違うのか
| 教えて欲しいです.
全然違う…じゃ答えになりませんよね。
LimboというのはAT&TのInfernoの言語ですよね。これはあまり詳し
くないんですが(私が見た時にはWebにもあまり情報がなかった),
Javaと比べるなら以下のように違います。
言語仕様
* C++に似ているか
JavaはC++に似ています。これを喜ぶ人は多いみたいです。
* 動的な型か静的な型か
Javaには変数に静的な型があります。これはコンパイル時に
発見できるエラーが増えて嬉しいことも多いのですが,手軽
にプログラムを書く時にはちょっとうっとうしいです。
* Mixinとinterface
どちらの言語も多重継承がありません。で,Javaには
interfaceがrubyにはmoduleを使ったMixinがあります。しか
し,interfaceが仕様だけの共有なのに対して,Mixinは主に
実装の共有を行うという目的の違いがあります。静的な型シ
ステムを持たないrubyには仕様の共有は必要ないですから。
私はJavaも実装の共有の仕組みを持った方が良いと思ってい
ます。Satherほど徹底する必要はないでしょうけど。
* thread機能
javaには言語仕様に組み込みのthread機能があります。ruby
にもthread機能がありますが,言語仕様には特別thread機能
を含んでいません。もっとも組み込みで持たないからといっ
て機能で劣っているわけではないですが。
* イテレータ
rubyにはイテレータというループの抽象化を行う機能があり
ます。Javaにはこれに相当する機能はありません。
* クロージャ
これもJavaには相当する機能がありません。
処理系の機能
* セキュリティ
Javaの処理系はセキュリティチェックの機能が組み込まれて
います。rubyではセキュリティに関する検討は始まったばか
りです。
* バイトコードインタプリタ
Javaは機種独立のバイトコードにコンパイルできます。ruby
は中間的な状態を外に吐き出す機能を持っていません。
* JIT
Javaのバイトコードインタプリタの中にはJIT(Just In Time)
Compilerというその場でバイトコードをマシン語に変換して
実行する機能を持つものがあります。rubyにはそんな機能は
ないです。
その他
* 話題性
* ユーザの数
どっちもはるかに負けています。
というわけで,まとめるとJavaはコンパイラ指向のプラットフォー
ム非依存の言語,rubyはインタプリタ指向のお手軽言語であると言
えるでしょう。後,javaの方はお金になりそうな分,いろいろ力が
入っていていろいろな機能(効率)のものがあると言うところでしょ
うか。
こう書くと負けているようですが,Javaとrubyで例えばフィルタを
書くこととかを考えて比べるとrubyが(書きやすさで)はるかに勝つ
と思います。rubyってのはそういうお手軽にプログラムを書ける言
語なのです。
勝っているところは
* 文字列処理の強力さ(perl譲り)
* 実行にコンパイルが必要ない
* 宣言がいらないし書きやすい
* ループ抽象化などレベルの高い記述ができる(lisp譲り)
でしょうか。
純粋に言語仕様の面からJavaを見ると,interfaceがあるのは良い
が実装の共有ができないこととか,静的な型を持つくせにパラメタ
ライズドタイプがないので型システムが不完全だとか,メソッドオ
ブジェクトも関数ポインタもクロージャもないので実行の抽象化や
オブジェクトとしての取扱(例えばコールバック)が面倒などの不満
をあげることができます。これらのうちのいくつかは改善が予定さ
れているようですけど。
まあ,適材適所ではないでしょうか。
| tclもNetscape上で動くようですが,rubyはいかがでしょう?
Plug-Inを作れば動かせるそうで,PythonのPlug-Inもあるようです。
rubyは…いつかはやってみたいんですけどねえ。
まつもと ゆきひろ /:|)
# 今回の中渡さんの情報源は18日発売の雑誌群に違いない ^^