[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日発売の雑誌群に違いない ^^

In This Thread

Prev Next