.NETのエッセンス

<.NETのエッセンス>第4回 実行効率のC# 美しさのJava

2003/01/27 16:04

週刊BCN 2003年01月27日vol.975掲載

 マイクロソフトの.NETとサン・マイクロシステムズのJavaはどう違うのか。今回は開発者の視点から、コンピューティング環境、とくにプログラミング言語に話題を絞って.NETとJavaを比較してみたい。つまり、 .NETに対応した言語「C#(シー・シャープ)」とJavaとの比較である。JavaとC#の違いは、「実行効率のC#」、「美しさのJava」とまとめることができる。まず、オブジェクト指向(さまざまな事象を『もの』同士の関係性でモデル化する方法論)について見てみよう。

.NETとJavaはどう違うのか(その1)

 マイクロソフトの.NETとサン・マイクロシステムズのJavaはどう違うのか。今回は開発者の視点から、コンピューティング環境、とくにプログラミング言語に話題を絞って.NETとJavaを比較してみたい。つまり、 .NETに対応した言語「C#(シー・シャープ)」とJavaとの比較である。JavaとC#の違いは、「実行効率のC#」、「美しさのJava」とまとめることができる。まず、オブジェクト指向(さまざまな事象を『もの』同士の関係性でモデル化する方法論)について見てみよう。

 JavaもC#も、オブジェクト指向を採用している。純粋なオブジェクト指向は、全てをオブジェクトとして扱う。しかし、コンピュータにとってオブジェクトの操作は少々複雑な仕事である。従来のプログラミング言語では単なるデータだったものを、オブジェクトにすると必要なスピードが出ないこともある。Javaでは、数や文字といった基本的なデータを除くほとんど全てがオブジェクトである。一方、C#では、オブジェクトでないデータも自由に作ることができる。C#では、純粋なオブジェクト指向の枠組みに従うのか、実行効率を優先するのかを、開発者が選択することができるのだ。

 次に、プログラム言語の文法を比べてみる。Javaの文法は洗練されており、一貫性があって分かりやすい。その代わり機能を単純化しており、ある動作を実現するのに少々まわりくどい記述が必要となることもある。一方、C#は、Javaで採用しなかった機能をいくつか採用、プログラムを比較的簡単に記述できるが、文法はJavaより複雑である。最後に実行環境について比べる。JavaもC#も、仮想マシンと呼ばれるソフトウェアを動作させる。コンピュータシステムの内部を直接操作する必要がなくなるので、開発生産性やシステムの堅牢性が高まる。

 Javaの仮想マシンは、携帯電話や家電などさまざまなハードウェアでJavaを実行する、つまり、「一度書いたらどこでも動く」という理想を実現させるためのものである。C#における仮想マシンは、.NET フレームワークがさまざまなプログラム言語をサポートするためのものである。特定の環境(ウィンドウズ)を前提とした設計になっているが、それを受け入れられる場合は効率や機能などさまざまな恩恵がある。これらの差は、マイクロソフトとサンのターゲットの違いを反映している。XMLウェブサービスというシステム共存の道具もあるので、.NETとJavaは、「何を実現させたいのか」によって住み分けていくだろう。
  • 1