らしさ

全然脈絡のない引用で申し訳ないですが,ちょうど以下の部分を拝見しているときに思い付いたので……

「.NETらしさ」とは何か?と考えた時、真っ先に浮かぶのは充実したツール群が思い浮かぶ人って多いんじゃないかと思います。

確かにツール群や膨大なヘルプといった具体的なソフトウェア資産を思い浮かべることもありますが,私の印象としての「.NETらしさ」というか「Microsoftらしさ」というと……

「軍曹! ダメです,このままでは戦線は崩壊します!」
「もう少しだ! もう少し待てば本国で開発中の新兵器が完成する! それまで耐えろ!」
「軍曹! この戦況を一変させられる新兵器とは一体どんなものでありますか!」
「私もあちこち塗りつぶされた計画書を見ることができたに過ぎん……たとえ全てを見ることが出来たとしても動作原理不明の新技術がいくつも使われておって完全に理解することは出来なかったであろう.しかしあれが計画通りの性能を発揮すれば我が軍は無敵だ! 完成すれば画期的で地上に二つとない代物となる! 分かったらそれまで耐えろ!」

といったごっこ遊びを毎年のように楽しめるところでしょうか*1.引用元の記事と関連がない展開ですいません.
さて,先日の TechEd 2005 Yokohama で色々な MVP さんとお話ししているときに小井土さんから S2.NET の名前が出てきて「おっ」と思ったりしたのも思い出した*2ついでに,今回は .NET 開発のこの先について勝手なイメージでも書き連ねてみます.当たるも八卦当たらぬも八卦.
.NET Framework にはその当初から「属性」や「Remoting (に絡むフックメカニズム)」など色々おもちゃが仕込まれていたのは国内でも Essential .NET によって広く知られるようになり,その AOP 的応用に関心が集まったのも確かです.確かにこれはこれで面白い代物ではありましたが.しばらく使っているうちに以下のような疑問点も見えてきたように思います.

  • 使い勝手の悪さ
    • MarshalByRefObject から派生したクラスまたは interface にしか使えないこと
    • 動的に生成されたコードと .NET の Evidence 機構と相性が悪いこと
    • 読み込まれた型・動的に生成された型を破棄する方法が AppDomain のアンロードしかないこと
  • パフォーマンス

まあ近い将来に手に入る方法(Method の IL ストリームを得る)を利用したり,Debug API を駆使したりしてがんばればいい線までは行けそうな気もしますが,ここいらでもう一歩踏み込んだ風景を見てみたいのも確かです.
そんな中 Software Factories に関する最近の萩原さんの講演や C# 3.0 界隈の動きを見ていると,どうやらそろそろ次のおもちゃが登場するんじゃないかという予感がしてきます.Software Factories 実現のためには萩原さんの言うところの「可変性を実現する複合化技術」が潤沢であるに越したことはありませんが,実際その方面で Microsoft が研究を行っている楽しそうなおもちゃがいくつか見え隠れしているようです.
例えば,MD3 2005 (id:NyaRuRu:20050617:p1)の荻原さんのプレゼンテーションでは,現在注目されている技術として「code rewriting」の名前を挙げ,以下のような応用の可能性と将来の CLR でのサポートの可能性について示唆されていました.

  • code rewriting (実行時コード書き換え)

他にも,「コード自動生成」や「関数型言語」といったキーワードも最近よく耳にします.

もっとも,私が荻原さんの話を何とか理解しようとした限りでは,プログラマにこれらのおもちゃを与えること自体は Software Factories の目的では無いように思います.
言い換えれば,単純にプログラマ関数型言語や強力なAOP機構を与えたとしても,直ちにそれが安定したソフトウェア開発のレールにはならないよ,というふうに聞こえなくもないというか……ま,この辺はもうちょい勉強して出直したいです.
とまあ Vista もいいですが,Microsoft が言うところの新しいソフトウェア開発の時代を肴に遊ぶのもそろそろいい頃合いではないでしょうか.「OS が Managed API をフル装備で簡単お手軽アプリケーション開発」と言っていた頃とはまた関心領域が違うっぽいですよ?

*1:そうそう,Windows Vista はもうアレですね,あんまり新兵器っぽく無くなってきましたし,そろそろ井戸端会議の話題はその先に移りつつあるのかもしれません.一方 C# 2.0 が製品としてリリースされる前に人々の関心が C# 3.0 に行ってしまいそうなあたりはさすがです.

*2:「.NET ならではの部分で困ることがあるので詳しい人がもっと増えるといいなぁ」みたいな話だったように記憶しています.