解説インサイド .NET Framework [改訂版]第1回 マネージ・コード/アセンブリ/モジュール |
本稿は、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 [改訂版]」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|