Microsoftは、開発者がC++に興味を持ってもらうように膨大な時間とリソースを費やしてきた。同社は "Going Native"プログラムで、C++開発を強調しているが、C99 標準で定義されたモダンなCのサポートが抜けている。C99のサポートは、業界内でも様々だが、Visual Studioがコンプライアンスに存在しないことが際立っている。
C99をサポートしないことで、長い間Visual Studioの標準との互換性を要求してきた開発者たちをいらだたせている。VSがC99をネイティブにサポートしたら、ユーザーがクロスプラットフォームのアプリケーションを開発し、移植するのが容易になるだろう。 Googleの開発者であるJosh Haberman氏は先日、Cで書かれたいくつかの有名なプロジェクトを挙げて、MicrosoftがC99を採用するように嘆願した。(メモ:Haberman氏のWebサイトはおそらくダウンしているが、Googleのコピーが利用可能だ。)
Microsoftのソフトウェアアーキテクトで、ISO C++標準化委員会の主席であるHerb Sutter氏は、先日、Visual Studio User Voiceフォーラムと彼の個人Webサイト上で、この状況についてコメントした。どちらのケースでも彼は同じメッセージを配信した:
- 私たちの主なコールは"ISO C++98/C++11のサブセットであるC99/C11のほとんどを"サポートすることである
- 私たちはまた歴史的な理由で、C90(だけ)を受け入れ、C++を受け入れないC90コンパイラーをリリースしていない
- 私たちはC90または、ISO C++のどちらの一部でもないISO Cの機能をサポートする予定はない。
これは以前、様々な方法で表明されたが、さらに興味深いのが、C99サポートを望むときの究極のソリューションだ:競合製品に切り替えるか、ISO C++標準化委員会でC99言語のサポートが向上する変更が採用されるかだ。現実的には、他のコンパイラに切り替えることがC99を使用する最速の方法だ。C99に関連する機能を追加することで、表面上はよく検討された言語仕様(C++11)を変更することは魅力が少ない。
エンドユーザーの反応は、それぞれのC99コードの必要性によってさまざまだ。
ユーザーのSven氏は以下のようにコメントしている:
...数年前、Cでのプログラミングは移植可能なコードを書くのに正しい決断だった(一度書けば – どこでも一度コンパイルして – どこでも実行)。でも今は、きちんとwindowsプラットフォームと統合されていないlinux/gccのC99コードが存在している。
C99を否定することは、C言語の断片化に繋がる。
C++ユーザーは、Sutter氏のよりポジティブなメッセージを受け取ることができる。Ivan氏曰く:
まあ、 [...] まったく気にならないが、私はMSがCに対してリソースを無駄にしないことには賛成だ。Bjarne氏はときどき横柄に見えるが、彼は正しい:“Cはほとんど”C++のサブセットであり、時代遅れだ。
ユーザーのKevin H氏は賛成している:
私はC++11をサポートすることには大賛成だ。あらためてネイティブ開発にフォーカスすると、C++はVisual Studioチームの中ではまだ二級市民だと感じる。C++11標準は新しく、VC2011のリリースはタイミングが悪いことは理解できる—(C++98/VS6と同じく)ちょうど標準化されたのと同時だった。しかしながら、C++11の機能はずっと前に確定していた。
確認はできていないがMicrosoft内部の"匿名"ソースからは:
...何人かの同僚は、本当の理由はISO C++標準化委員会にあると理論づけている。事実(そしてバラ色のメガネをかけた/視野の狭い人たち):Cはまだ生きており、フレームワークからアプリケーションまで、非常に広く使われている。C++が提供するものを一切必要としないが、C90が提供しないC99の主要な機能のすばらしい恩恵を得ることができる。Yeah, それは本当に簡単だ。
そうだから、— 開発者のため、そしてMicrosoftのために—考え直してください。ところで(長年、私は本当にはないにも関わらず、軸/重りを抱えてきたことに気づいた): 私はMicrosoft FTE (明らかにしたくて匿名を選んだ)である。あなたが理解できないと感じていたことを示せていたら幸いである。プレートまでステップアップしてRight Thing(tm)をして欲しい。もしあなたが“Right Thing(tm)”の意味がわからないとしたら、本当の問題はそこにある。