Insider's Eye

.NET対応プログラム開発を容易にする新言語、C#登場

―― 新しくも懐かしさを感じさせる、Microsoftの新世代プログラミング言語、C#とは? ――

デジタルアドバンテージ 小川 誉久
2000/06/28

 2000年6月26日、米Microsoftは、Forum 2000において発表したMicrosoftの次世代戦略、Microsoft .NET(マイクロソフト・ドット・ネット)に対応したオブジェクト指向の新しい言語処理系として「C#(シー・シャープ)」を発表した。Microsoftが発表したニュース リリースの言葉を借りれば、これは「C/C++プログラマが.NET対応のプログラムをより容易に開発できるようにする言語」ということになるが、マーケティング的な観点はともかく、公表されたドキュメントをつぶさに比較するかぎり、少なくとも言語仕様の点では、C#はJavaの兄弟のように思える。ここでは、くだんのニュース リリースや、Webページにて公開されたドキュメントから、この新しい言語処理系の姿を追ってみよう。

Microsoftの辞書に「Java」という言葉はない

 言うまでもなくJavaは、Sun Microsystems社が開発したオブジェクト指向型言語である。Java VM(Virtual Machine:仮想マシン)と呼ばれるソフトウェアでハードウェアを仮想化することで、異なるハードウェア上でも同じJavaプログラムを実行できることが大きな特徴である。さまざまな種類のコンピュータが接続されるインターネット/イントラネット環境が発展し、特定システムによらないプログラム言語へのニーズが高まったこと、ECシステムなどのミドルウェア用開発言語として採用されるケースが増えたことから、ITの分野では、Javaはもはや欠かせない言語処理系となっている。

 当初Microsoftは、WindowsのJava対応を進め、優れたWindows版のJava VMを開発した(このJava VMは、現在でもWindows OSに標準搭載されている)。Visual J++という、実質的なJavaプログラムの開発環境も提供した。同時にMicrosoftは、Windows環境向けのJavaの独自拡張、具体的には、JavaプログラムからWin32 APIをダイレクトに呼び出すことが可能なJ/Directや、Direct X3、ActiveXのサポートを施した。環境非依存をうたい文句にするJavaの根幹を揺るがすようなこの動きに対し、Javaの開発元であるSunは抗議の声をあげ、紆余曲折の末Microsoftのプログラマは、自社製品に組み込み始めていたJava対応コード部分をとって返して削除。同社の辞書から「Java」の文字を消し去った。

 その後業界関係者の間では、Java対抗の言語処理系をMicrosoftは独自に開発中と噂されていた。それがC#なのだろうか?

 今回Microsoftが発表したC#のニュース リリースを見ても、「Java」の文字はどこにもない。しかしホワイト ペーパーによれば、C#は「Visual C++とVisual Basicとともに、(統合開発環境である)Visual Studio 7.0の一部として提供される」ものだとしている。これを聞いただけでも、空席となったJ++の後がまなのではないかと勘ぐりたくなるところだ。さらにC#では、Javaの大きな特徴であるガーベジ コレクション(細かく分断されたメモリ領域をひとまとめにしたり、使用済みのメモリ領域を回収して、新しい空きメモリ領域を作りだす機能)や変数の自動的な初期化がサポートされている。

 極めつけとして、次にC#で記述したHello Worldプログラムと、Javaで記述したHello Worldプログラムのコードを比較してみよう。

class Hello
{
  static void Main(string[] args) {
    System.Console.WriteLine("Hello, World");
  }
}
C#で記述したHello Worldプログラム

public class Hello
{
  public static void main(String[] args) {
    System.out.println("Hello, world");
  }
}
Javaで記述したHello Worldプログラム

 C#では、Helloクラスの定義における「public」指定が省略されていることや(多分public指定を入れても動作すると思われるが、C#処理系がないので未確認)、コンソール出力のためのメソッドが「System.out.println」ではなく「System.Console.WriteLine」となっていることなど、細かい違いはあれど、まるで間違い探しをしているような気分になるのは筆者だけではないだろう。

言語仕様書を眺めたプログラマの率直な意見:「C/C++プログラマがJavaでのプログラミングを始めたときに、いろいろ不足を感じる部分を拡張したJava言語」

 C#について、原稿執筆時点で入手可能な情報は、2つのニュース リリースと、ごく手短に概要をまとめたWebページ、やや詳しく概要をまとめたホワイト ペーパー、そして250ページを超えるC#の言語仕様書である(いずれもリンク先は本稿の最後に一覧している)。

 このようにC#の言語仕様については、すでにほぼ全貌が明らかになっている。この仕様書をざっと眺めたプログラマの第一声は、「C/C++プログラマがJavaでのプログラミングを始めたときに、いろいろ不足を感じる部分を拡張したJava言語」というものだった。これを素直に解釈すれば、C#はJava言語の拡張と見ることもできるし、逆から見れば、Microsoftが主張する「C/C++プログラマが、既存のスキルを活かして、洗練されたXMLベースの.NETアプリケーションを開発可能にする言語処理系」ということになる。このプログラマの意見が正しいかどうかは、実際に仕様書を御自分で見て判断していただくことにしよう。

 現在公開されているC#の言語仕様書は、MicrosoftからECMA(European Computer Manufacturers Association:ヨーロッパをベースとして、情報通信分野の標準化を推進する国際機関)に提出され、プレビューが行われている。Microsoftは、将来的にはC#を新しいインターネット プログラミング言語のオープンな標準仕様として、さまざまなプラットフォームやデバイスへの利用を促すつもりである。

XMLベースのWebサービスをわずかなコードで開発でき、一方ではシステムの低レベルな処理も記述可能

 白日のもとにさらされた言語仕様とは異なり、C#プログラムの実行環境がどのようにWindows環境に実装されるのかはまだ明らかではない。これらは、ニュース リリース上にちりばめられた断片的な記述から類推するしかない。

 まずC#は、「Webアプリケーションとコンポーネントを開発するための1つの選択肢」であり、「他の言語で記述するよりも少ないコードで、新しいXML標準ととともに機能するプログラムを作成可能」だとする。また「XMLベースのWebサービスから、ミドル ティアのビジネス オブジェクト、システム レベルのアプリケーションまでを開発することが可能」である。そして「こうしてC#で開発したWebサービスは、どのようなプラットフォーム上のどのような言語で記述されたプログラムからもインターネットを経由してアクセス可能である」とする。これらの表現からは、クライアント サイドよりも、サーバ サイドで実行されるプログラムの開発に重点が置かれているものと考えてよいだろう。ちなみにここ最近、Javaプログラムの活躍の舞台も、当初騒がれたクライアント サイドから、サーバ サイドに移行しつつある。

 「コード中で『Webメソッド』というコマンド1つをタイプするだけで、インターネットを経由した検索を行うシステム プログラムを作成できる」という記述は興味深い。詳細は不明なれど、インターネットをXMLデータの情報倉庫として機能させるというMicrosoft .NETの遠大な計画の一端を覗かせるものだろう。C#では、XMLデータを高速に処理するために、これをクラスではなく、直接構造体データとしてマップできるという。

 しかし複雑な処理を簡単なコードで記述できるからといって、C#は、抽象度が高く小回りのきかない高級言語ということではなさそうだ。リリースによれば、C#では、インラインC関数を使うことで、メモリの操作などに代表される低レベルなシステム処理も完全に制御可能である(制限つきながらも、ネイティブ ポインタも使用可能)。またWindows APIやCOM(Component Object Model)サポートもあり、C#では、すべてのオブジェクトが自動的にCOMオブジェクトとなるという。

詳細はPDCで明らかに

 最終的にC#は、現在開発中の次世代プログラム開発環境、Visual Studio 7の一部として出荷される予定だ。現時点の予定では、Visual Studio 7は、本年中に開発者向けにベータ版が配布される。

 しかしこのベータリリースに先駆けて、7月11日に米国フロリダ州オーランドで開催されるプログラマ向けのカンファレンス、Microsoft Professional Developers Conference(PDC)において、参加者にC#の早期テクニカル プレビュー版が配布される模様だ。C#のさらなる詳細は、このPDCにて明らかになるだろう。End of Article

関連記事
  Insider's Eye:米Microsoft、新世代インターネット戦略を発表(Windows Server Insider)
  Insider's Eye:将来はパッケージ販売から「購読サービス」ビジネスへと移行する(Windows Server Insider)
   
  関連リンク
  Microsoft .NET Webサイト(米Microsoft)
  C#の概要/C#のホワイト ペーパー/C#の言語仕様[英文](米Microsoft)
  Microsoft Introduces Highly Productive .NET Programming Language: C#[ニュースリリース、英文](米Microsoft)
  Microsoft's C# Programming Language Offers Developers Greater Productivity and Potential of .NET Platform[ニュースリリース、英文](米Microsoft)
  Microsoft Introduces Highly Productive .NET Programming Language: C#[ニュースリリース、英文](米Microsoft)
     
 「Insider's Eye」
Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

スキルアップ/キャリアアップ

.NET管理者虎の巻

- PR -
- PR -