.NET Framework入門

4.Common Language Runtime(2)

― CLRによる複数言語サポート:VS.NETで標準サポートされる言語処理系 ―


デジタルアドバンテージ 遠藤孝信
2000/12/14

p.1 p.2 p.3 p.4 p.5 p.6 p.7 p.8 p.9

本記事は改訂されました。改訂版の「.NETとは何か? ― 基礎解説:.NET初心者のための.NET入門【2011年版】」をご覧ください。

CLRによる複数言語のサポート ―― Visual Studio.NETが標準でサポートする言語処理系

 中間コードを、実行時に各ハードウェアのネイティブ・コード変換することで、プログラムの機種依存を回避するというこれまでの説明だけなら、数年前にJavaが提案したものと何ら変わらない。しかし.NET Frameworkでは、Javaでは得られなかった大きなメリットがプログラマに与えられる。それは、複数の言語処理系を1つのシステム内で混成的に組み合わせて使用可能になるということだ。

 オブジェクト指向プログラミング言語という観点からJavaを眺めれば、仕様的にも最も洗練された言語の1つであることは疑いないし、すでに多くのプログラマによって実用システムへの応用が進んでいる。しかしいくら言語仕様が優れていたとしても、Javaに初めて触れるプログラマは、その思想や表記規約を新しく勉強しなければならない。いい悪いは別問題として、現実に多くのプログラマは、手に馴染んだプログラミング言語から、ソフトウェア開発のアプローチや独自のプログラミング・スタイルを身に付けていくものだ。したがって、それがたとえ時代遅れの言語と言われようと、できうれば長年に渡って愛用してきた言語処理系を使いたいと考えるのは自然であるし、そのほうが短期的に見た効率は高い。

 また何より、こうした伝統的なプログラミング言語で記述された膨大なソフトウェア資産もある。既存のソフトウェア資産をそのまま新世代の情報システムに流用できるというほど甘くはないだろうが、できるだけ流用できる部分が多ければ、既存の情報システムを新しい情報システムに移行する際の時間および労力のコストを大幅に削減できるはずだ。この意味で、.NET Frameworkの多言語サポートが、マイクロソフトの説明どおりに機能するとすれば、経験豊富なプログラマのスキルやノウハウ、既存のソフトウェア資産を、新しいMicrosoft.NET環境でも活かせるようになるだろう。

 マイクロソフトが提供するグラフィカル・プログラム開発環境のVisual Studio.NETでは、次の4種類の言語処理系がサポートされる。

言語 主な特徴
Visual Basic.NET 現行のVisual Basicの後継にあたる言語処理系。.NET Framework環境における多言語対応のために、言語仕様が大幅に拡張され、本格的なオブジェクト指向言語に姿を変えた
Visual C++.NET Windowsアプリケーションの主力開発言語、Visual C++の後継にあたる言語処理系。次に述べるC#が利用可能になっため、Visual C++.NETが活躍する場は減少するものと思われるが、Visual Studio.NETがサポートする言語処理系の中では、唯一、システムのネイティブ・コードを生成させることができる
Visual C# Microsoft.NETプラットフォーム向けに、新たに開発されたオブジェクト指向型のプログラミング言語。C/C++言語を発展させたものだとされるが、実質的にはJavaを強く意識した仕様になっている
JScript.NET Webページなどで、簡易なプログラムを作成するために使用されていたスクリプト言語のJScriptの後継。ただしこのJScript.NETでは、単独の実行ファイル(.jsファイル)では、インタープリタでの逐次実行はできなくなり、コンパイルが必須となった
マイクロソフトがVisual Studio.NETで標準サポートする言語処理系

■Visual Basic.NET

 現行のVisual Basic 6.0の後継となるのがVisual Basic.NETである(以前はVisual Basic 7.0と呼ばれていたが、「Visual Basic.NET」という名称に落ち着いたようだ。これ以外にもMicrosoft.NETでは、多くの製品名やテクノロジの名前に「.NET」が付けられている)。マイクロソフトがサポートする既存の言語処理系の中で、最も大きく言語仕様が変更されたのはこのVisual Basicだろう。従来のVisual Basicでは、オブジェクト指向設計などを強く意識することなく、ダイアログボックスにActiveXコントロールをペタペタと張り付け、これらが操作された場合の処理を記述するだけで、見映えも機能性も高いアプリケーションを開発できる点が大きなメリットだった。しかしVisual Basic.NETは、.NET Frameworkにおける多言語対応をサポートするため、本格的なオブジェクト指向の言語処理系として生まれ変わっている。具体的には、C/C++言語や次に述べるC#言語とまったく同等に、プログラムからクラス・ライブラリにアクセスできるようになった。また従来では不可能だったマルチスレッド・プログラミングも可能になっている。さらにクラスの作成や既存クラスの継承(インヘリタンス)、クラス・メソッドのオーバーロード、ポリモルフィズム(多態)などもサポートされる。

 もちろん、Visual Basicの機能性が大幅に向上されたのは喜ばしいことだ。しかしその一方で、「手軽さ」が失われてしまったのも事実である。実際、ソース・コードを見ても、もはやVisual Basic言語で記述されたものと、次に述べるC#で記述されたものを見分けるのは困難なほどだ。現Visual Basicプログラマが.NET Frameworkに移行するときには、新しいVisual Basic.NETの言語仕様を新たに学習するか、それともいっそ、C#に移行するかの選択を迫られることになるだろう。

■Visual C++.NET

 Visual Basicの大幅な仕様変更に比較すれば、Visual C++から後継となるVC++.NETへの変更はわずかなものだ。これまでC/C++言語は、Windowsアプリケーション開発の中心的な処理系だったが、次に述べるC#が登場したことにより、その影響力を少なからずC#に奪われることになると思われる。しかしもちろん、存在価値がなくなったというわけではない。Visual Studio.NETにおいて、MSILではない、特定のプロセッサ向けのネイティブ・コードを生成できる言語処理系はこのVC++.NETしかない。デバイス・ドライバの開発を始め、システム性能を極限まで引き出す必要のあるプログラムは、VC++.NETで開発することになるだろう。

■Visual C#.NET

 Microsoft.NETに最適化された言語処理系として、マイクロソフトが新たに開発し、今回発表されたのがC#(シー・シャープ)言語である。C#はシンプルかつ強力なオブジェクト指向言語処理系であり、マイクロソフトの説明によれば、「C/C++を発展させたもの」ということになるが、客観的にみれば、Sun Microsystemsが開発したオブジェクト指向言語であるJavaの特徴を大幅に取り入れており、プログラムの応用分野もJavaに近い。

 たとえばC#では、プログラムによるメモリ管理を大幅に軽減するガーベジ・コレクションの機能が備えられており、プログラマはメモリ領域の解放やメモリ・リークなどを意識することなく、メモリを取り扱うことができる。このガーベジ・コレクションは、Javaの大きな特徴の1つでもある。もちろん、Javaより後発である分、Javaの欠点も補われた。たとえばJavaでは、パフォーマンスの都合上、単純な数値や文字列はオブジェクトとして扱われないが(オブジェクトとして取り扱いたければラッパ・オブジェクトを生成しカプセル化する必要がある)、C#では、boxing/unboxingという機構により、それが使われる場面をコンパイラが自動的に判別し、必要ならコンパイラがラッパ・オブジェクトを自動生成するようになっている。この一方でC#は、一定の制限を加えたうえで、インラインC関数による低レベルなシステム処理や、ネイティブ・ポインタも利用可能にしており、従来からのWindows APIやCOMをも使用できるようにしている。マイクロソフトは、このC#をMicrosoft.NET環境における中心的な開発言語として位置づけている(C#言語の詳細については、別稿の「Windows 2000 Insider:Insider's Eye .NET対応プログラム開発を容易にする新言語、C#登場」や「Master of Network:プログラム言語のパラダイムシフト 『C#』という提案」を参照のこと)。

■JScript.NET

 マイクロソフトは、Visual Basicの言語仕様をサブセット化したVisual Basic Script(VBScriptまたはVBSと略記されることが多い)をJScriptと並ぶWeb用のスクリプト言語として提供してきたが、今回のVisual Studio.NETでは、VBScriptのサポートが省略され、JScriptのみのサポートに切り替えられた。なおJScript.NETを単独の実行ファイル(.jsファイル)として使用するときには、従来のインタープリタではなく、ソース・コードをいったんコンパイルして実行するようになった。

関連リンク
Insider's Eye:.NET対応プログラム開発を容易にする新言語、C#登場
Master of Network:プログラム言語のパラダイムシフト 『C#』という提案
 

 INDEX
  [特集].NET Framework入門
    1.Microsoft.NETプラットフォームとWeb Service
    2..NETプラットフォームと.NET Framework
    3.Common Language Runtime(1)
   CLRの内部構造とプログラム実行の流れ
  4.Common Language Runtime(2)
   CLRによる複数言語サポート:
   VS.NETで標準サポートされる言語処理系
    5.Common Language Runtime(3)
   CLRによる複数言語サポート:
   サードパーティによってサポートが予定されている言語処理系
    6.ASP.NET(1)
    ASP.NETで何が変わるのか? まずは既存のASPと比較してみよう
    7.ASP.NET(2)
    VBライクなWebアプリケーション開発を可能にするASP.NETのサーバ・コントロール群
    8.ASP.NET(3)
    Web Service開発始めの一歩。サービス公開に必要なのはキーワード指定1つ 


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間