解説

インサイド .NET Framework [改訂版]

第1回 マネージ・コード/アセンブリ/モジュール

吉松 史彰
2003/06/25 改訂(改訂前の記事はこちら

Page1 Page2 Page3 Page4 Page5

 本稿は、2002/03/03に公開された同名の記事を、.NET Frameworkの新しいバージョンである「.NET Framework 1.1」に対応させ、全面的に加筆・修正を行った改訂版です。

はじめに

 ようこそ.NET Frameworkの世界へ。本稿では、Microsoft .NET戦略の中心に位置する.NET Frameworkについて、プログラマーの視点からさまざまな技術を掘り下げて解説する。あくまで目的は.NET Frameworkについて解説することであり、プログラミング言語の構文解説ではない。逆にいうと、プログラミング言語は、それがマネージ・コードを出力する限り、何でも構わない。C#でもVisual Basic .NET(以下VB.NET)でも、Javaでも何でもござれ。それが.NET Frameworkだ。

マネージ・コード

 さて、「はじめに」の中にさっそく妙な言葉が登場した。マネージ・コードを出力するって一体何だろうか。

 一昔前まで、コンピュータの世界では、プログラマーが王様だった。それが証拠に、プログラマーはコンピュータに何でも(隣のコンピュータとポッキーゲームをすることを除けば)命令することができた。「PLAY CDEFGAB」といえばコンピュータが歌い、「while(true);」と書けばコンピュータは自分が燃え尽きるまで回り続けた。

 この時代、プログラマーにとって一番大事な仕事はメモリを解放することだった。いつもどんなときでも、プログラマーはこのことだけは決して忘れなかった。たとえ今年の成人の日の日付は間違えても、メモリの解放忘れだけはしてはならないおきてだった。

 プログラマーにとって、外界には苦手な種類の生物がいた。それがお客さまだ。お客さまはいつもプログラマーに余計なことばかりさせようとしていた。口座Aから1万円を引き出して、口座Bに同じ金額を預けたり、買い物カゴを作って、そこに物が入れられるようにしたり。プログラマーはメモリを解放しながら、片手間にこのような命令をコンピュータに実行させていた。ともあれ、プログラマーにとってコンピュータは忠実な下僕であり、メモリをきちんと解放して正しく付き合えば、よき友であった。

 ある日、プログラマーは、いつものようにメモリを解放しようとした。すると、コンピュータがいつもと変わらぬ調子でこういった。「メモリは正常に解放されました」。そこで、今日もしぶしぶながら、お客さまの要求をコンピュータに命令していった。すると、コンピュータがこういってきたのだ。

 「メソッドの実行に失敗しました。必要なインターフェイスが実装されていません」

 プログラマーはわが目を疑った。入力した命令は完璧なはずなのになぜ……? しかもよくよくメッセージを読んでみると、「必要なインターフェイスが実装されていません」とある。コンピュータがプログラマーに対して「インターフェイスを実装すること」を指示している……?

 この日を境に、プログラマーとコンピュータの関係は逆転した。これまでと違って、プログラマーにとって一番大事な仕事は、お客さまの要求にこたえることになってしまった。しかも、そのやり方といったら、いままでとは正反対。コンピュータが指示する順番で、指定されたとおりの実装をしなければならないのだ。これまで一番大事だったメモリの解放の仕事は、完全にコンピュータに奪われてしまった。どのメモリをいつ解放するかは、コンピュータが勝手に判断するようになったのだ。コンピュータはプログラマーにこういった。

 「今後、勝手に私を呼び出すことは禁止する。必要なときは、私がお前を呼び出す*1

 下克上だ。クーデターだ。『ターミネーター』の世界だ。

 その日、コンピュータに何が起きたのか、もういうまでもないだろう。そう、.NET Frameworkがインストールされたのだ。その日、コンピュータは目覚めたのだ。

 .NET Frameworkの頭脳に当たるのは、共通言語ランタイム(Common Language Runtime:CLR)である。CLRはこれまでプログラマーの仕事だった、メモリの管理、コードの実行制御、セキュリティの確保などの仕事を、プログラマーから奪い取った。CLRは、プログラムが提供する詳細情報を頼りに、自分だけでこれらの管理を行う。プログラマーにとって一番楽しかったはずの、メモリの解放は、CLRがすべてやるようになってしまった。しかも腹立たしいことに、プログラマーよりも正確に、必要なタイミングでメモリを解放してくれるのだ。CLRによって監視されながら実行されるコード、それがマネージ・コードである。マネージ・コードはCLRによって管理されているので、CLRが正しくないと考える行動はできない。プログラマーがどんなに頑張っても、CLRのメガネにかなわないコードは、CLRによって管理された環境では実行できないのだ。

 CLRがコードを管理してくれるので、プログラマーはお客さまの要求にこたえることだけが仕事になった。CLRはプログラマーから、これまで書いていたコードの大部分について、それを書く権利を取り上げたのだ。プログラマーはただお客さまの要求に忠実にこたえるだけの、マネージ・コードを書くことになったのだった。

*1 「Don't call us. We'll call you.」 これは、ハリウッドの原則(Hollywood Principle)と呼ばれる、フレームワークの定義を語るときの定番フレーズである。
 
 

 INDEX
  解説 インサイド .NET Framework [改訂版]
  第1回 マネージ・コード/アセンブリ/モジュール
  1.はじめに
    2.プログラムが提供する詳細情報
    3.アセンブリとモジュールの作成
    4.マルチ・モジュール・アセンブリの作成
    5.マルチ・モジュール・アセンブリの必要性
 
インデックス・ページヘ  「解説:インサイド .NET Framework [改訂版]」


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

本日 月間