| Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
閑話休題。
タイトルに「その存在意義に疑問を抱きながら」と入っているように、実際には、こんなものを書いている僕自身、managed C++にどれほどの有用性があるかは疑問を感じています。
僕が卒研で作るシステムにmanaged C++を使っているもっとも大きな理由は、これを使うことによってC#とC++のシームレスな連携が可能になるからです。たしかにこれはmanaged C++の大きな利点ではあるのですが、実際には、わざわざC#、あるいはVB.NETやJ#.NETとC++を併用することが検討されるプログラムなんて数少ないでしょう。今回managed C++を使うに至った流れはここにある通りなのですが、現在の情勢だと、僕のような立場であればMFCを使うのが自然な選択です。わざわざC# & .NET frameworkを使おうとするのは僕の個人的な趣味によるところが大きく、この組み合わせでシステムを書くというのは他人に勧められるものではありません。
事実、その普及の度合いを見れば、managed C++が世のプログラマたちに受け入れられていないのは明らかです。googleのヒット数も少ないし、BBSでもちっとも話題になっていない。日本のプログラマにとっては、日本語で読める本が一冊もないというのが痛いです(部分的に章を割いて触れられている本ならいくつかあるのですが)。
何故managed C++は使われないのでしょう。まず、言語仕様が非常に入り組み、分かりにくいものになってしまっていることがあります。managed C++はC++に対してオブジェクト試行的な拡張(抽象クラス、インターフェース、イベントetcのサポート)と.NET対応のための拡張(.NET framework、ガベージコレクタ、ボクシングetcのサポート)とを施した言語ですが、C++との整合性の維持のためか、複雑で扱いづらい言語になっていると感じます。まだ僕自身がmanaged C++の言語仕様をあまり理解できていないということもあり、コンパイル時に思いも寄らない箇所でエラーが出て、その意味が分からずに悩まされることが多々あります。
また、わざわざ拡張したにもかかわらず、.NETへの親和性はC#、VB.NETに比べて低いと言わざるを得ません。特にフォームデザイナを使えないのが致命的で、コードレベルでGUIを作る煩雑さを考えるだけで使う気が起きないという人は多いとおもいます。.NETを新しく勉強しようとするときに、言語にmanaged C++を選択するひとがほとんど居ないのもやむを得ないというところでしょう。反面、C#はJavaを模倣してMicrosoftが新しく作った言語で、過去の余計な遺産を引きずることもなく、.NETとの高い親和性を持っていますから。
加えて、C#やVB.NETに比べてオフィシャル・アンオフィシャルの両面でドキュメントの数が少ないことや、言語自体の将来が正直あやしい(VisualJ++のようになるのではないか?)こともあるでしょう。
結局、少なくとも現状では、managed C++を使う理由は、
・既存のC/C++で書かれたコードを.NETに移植したい
・Win32APIとの親和性の高さを活かしたい
といった限定的なものになってしまうというのが結論です。ただ、個人的には面白い言語だと思うし、現在のような位置に居るのは残念だと感じます。
#それにしても、ですます調は書きにくくて疲れる。それに、ですます調はより読者の存在を意識した文体で、こんなほとんど読まれない文章に使うことはないという感じ。次回からは元に戻そうっと。

