.NET Framework入門

5.Common Language Runtime(3)

― CLRによる複数言語サポート:サードパーティによってサポートが予定されている言語処理系 ―


デジタルアドバンテージ 遠藤孝信
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による複数言語のサポート ―― サードパーティによってサポートが予定されている言語処理系

 以上はマイクロソフトが開発し、提供する言語処理系である。しかしCLR上で利用可能な言語処理系は、たったこれだけではない。これ以外の言語処理系は、各サード・ベンダによって開発、提供される予定である。これらの中には、COBOLやPascal、SmallTalkなどの懐かしい顔ぶれに加え、Javaも含まれている。各サード・ベンダによって開発が進められている.NET Framework対応の言語処理系には次のようなものがある。

言語 主な特徴
APL(A Programming Language) APL記号と呼ばれる特殊な記号を用いた関数型インタープリタ言語。配列や行列計算が容易な科学技術計算用言語であり、研究用途などで利用されている
Eiffel 信頼性や拡張性、再利用可能性の高いアプリケーションを開発するために考案されたオブジェクト指向型言語。クラス、多重継承、多態性、静的型付けと動的束縛、総称性、例外メカニズム、表明など、オブジェクト指向の基本的なメカニズムを忠実に備えている。また契約による設計(Design by Contract)の概念を実装しており、ソース・コードにおいて、事前条件や事後条件、不変条件などの取り決めをプログラムで表明できるようになっている。ちなみEiffelという名前は、エッフェル塔を設計した技術者、Gustave Eiffel氏にちなんで付けられた
COBOL(COmmon Business Oriented Language) 事務処理用に開発された言語で、桁数の多い数値の扱いに長けている。数値入力用として、標準で右詰め入力機能、カンマ付き数値(桁指定のカンマ付き数値)の入力機能、ISAM形式のデータ・アクセス機能などを持つ。かつては銀行や企業の経理システムなどで広く使用されたが、リレーショナル・データベースが普及するにつれ、最近では以前ほどは使われなくなってきている。
PASCAL プログラミングの学習用言語として広く認知されている構造化言語。型や言語の書式が厳密であり、文、手続き、型の構造などはすべてブロック構造で統一されている。Windows用の開発ツール、「Delphi」はPASCALをベースとしている
Oberon Pascalの作者であるニクラウス・ヴィルト(Niklaus Wirth)氏が、Pascal、Modula-2に続いて開発したオブジェクト指向言語(プログラム言語だけでなく、OSも含めて設計された)。Modula-2言語を単純化しつつ、継承機能により型の拡張を可能とした。ちなみにOberonという名前は、天王星の衛星の名前である
Perl 現在最も普及しているスクリプト言語の1つ。C言語に似た構文を持ち、正規表現、連想配列の取り扱いなど非常に機能性が高く、処理速度も高速という特徴がある。特にUNIX系OS上で、ツールなどの記述用として用いられていると同時に、WebサーバでのCGI(Common Gateway Interface)用の言語としても広く使用されている。Perlでは省略形での表記が許されており、熟練プログラマにとっては少ないコード量で望みのコーディングが可能というメリットがあるが、その一方では、しばしばコードが読みづらくなることある
Python モジュール構造を持つオブジェクト指向スクリプト言語。言語の使用目的や動作環境はPerlに似ているが、Perlよりも読みやすく、高水準な言語であり、簡単なスクリプトの記述から大規模なソフトウェア開発にまで対応する。ちなみにPythonという名前は、開発者であるGuido van Rossum氏がファンであるBBCのTVショー、「モンティ・パイソン」にちなんでいるらしい
SmallTalk 1970年代に開発され、オブジェクト指向型言語の先駆け的な存在となった言語処理系。SmallTalkは純粋かつ完全なオブジェクト指向言語である。SmallTalkでは、すべてがオブジェクトであり、すべての処理はオブジェクトへのメッセージ送信で記述できる。オブジェクトの役割を分類するMVC(Model-View-Controller)モデルでも有名
Haskell Haskell はλ計算 (lambda calculus) という計算モデルに基づいた、型付きの関数型言語であり、関数型言語の標準を目指して設計された言語である。関数型言語では、プログラムは関数の集まりからなり、式の評価によってプログラムが処理される。Haskellという名前は論理学者Haskell Brooks Curry氏からとられている
Scheme Schemeは、人工知能言語として知られるLispの方言の1つで、手続き言語的な仕様も含まれているが、広義には関数型言語として評価されている。Schemeはシンプルな言語で、その仕様はCommon Lispよりもかなりコンパクトであるため、コンピュータ・サイエンスの教育やプログラミング言語の研究によく用いられる
ML 定理証明システム用のメタ言語(meta language)として開発された関数型言語であり、定理の自動証明を始めとする大規模かつ複雑なシステムの開発を支援するために使用される。手続き型関数の機能も持ち、例外処理や強力なモジュール・システムを併せ持つという特徴がある。現在、MLには、Standard MLとCamlの2つの異なるバージョンが存在する
Objective Caml MLから派生した言語のCamlにオブジェクト指向の機能を取り入れ、拡張したもの。関数型、手続き型、オブジェクト指向を組み合わせた汎用的なプログラミング言語となっている
Mercury 90年代に開発された新しい論理型言語。既存の論理型言語であるPrologなどと比較すると、強い型を持ち、コンパイル時に大部分のエラーを発見できるようにするなどして、効率的なプログラミングを可能にしている。また処理速度もPrologなどよりもかなり向上している
Java Sun Microsystems社が開発したオブジェクト指向型の言語。当初はインタープリタ型言語として開発されたが、その後はJIT(Just-In-Time)コンパイラを使用して、プログラムの実行時にネイティブ・コードに変換する実行方式が一般的となった。Javaは、インターネット/イントラネット環境などにおいて、特定のハードウェアシステムやOSに依存しないアプリケーションを作成することを目的として開発された
サポード・ベンダによってサポートが予定されている.NET Framework対応の言語処理系

 たとえばCOBOLの.NET Framework対応版は、国内の富士通が開発を進めている。これ以外にも、原稿執筆時点(2000年12月)で具体的な開発が公表されているものとしては、Effel(Effel#と呼ばれるらしい)、Python(Active Stateがすでに対応ソフトウェアを公開している)などがある。Javaが開発予定に含まれていることに対し、驚きを持った読者がいらっしゃるかもしれないが、つまりCLRは、特定の言語処理系に依存するものではなく、処理系の実装を進めるベンダーさえ現れれば、これ以外の言語処理系がサポートされる可能性もあるということだ。

 .NETプラットフォームでは、このように数多くのプログラミング言語の中から、プログラマが自分の最も得意な言語を選択してもよいし、開発対象から最適な機能性を持った言語を選択してもよい。また単一のシステムであっても、場面に応じて異なる言語処理系を使用し、それらを組み合わせることも可能だ。具体的には、異なる言語間でのクラスの継承が可能である。これにより、例えば、C#で記述したクラスをVisualBasic.NETで継承してサブクラス化するといった使い方ができる。またVisual Studio.NETを使えば、このように複数言語を組み合わせたソフトウェアでも、ソース・コードレベル・デバッグが可能になる。その昔、パソコンで動くゲーム・ソフトウェアと言えば、まず最初に画面の初期化処理など、煩雑だが1回しか実行しないので性能が要求されない処理をBASIC言語で行っておき、その後はマシン語コード・ルーチンに制御を渡して、最速でコードを実行するというスタイルが常套手段であった。.NETプラットフォームでは、これに近い感覚で、ユーザー・インターフェイス部分の設計ではVisualBasic.NETを使用し、メイン・ロジックはC#というような使い方が一般化するのかもしれない。

 これはある意味でJavaとは対極的な考え方である。Javaでは、Java言語でコードを記述しておけば、Java向けの仮想マシン環境が用意された任意の環境でプログラムを実行できることを特徴としている。しかし逆に言えば、Javaでコードを記述できなければ、その恩恵に浴することができない。Javaの言語仕様自体はシンプルなものだが、複雑なクラス・ライブラリを使いこなすのは簡単ではないし、オブジェクト指向設計に不慣れなプログラマも少なくないと聞く。このためJavaを活用した情報システムのニーズは非常に高いが、それに応えられるSEの絶対数が不足しているのが現実という。この点.NETプラットフォームなら、従来から使い慣れたプログラミング言語を使いながら、最新の環境に対応したソフトウェアを開発できる可能性がある。もっとも、Visual Basic.NETのように、プログラミング言語を.NETに対応させる過程では、言語仕様やキーワードの拡張が不可避だろうし、CLRなどの未知のクラス・ライブラリに対する理解も欠かせないので、簡単とまでは言えないだろうが…。


 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 記事ランキング

本日 月間