Express edition はOSSの姿勢を変えるか?
2006/05/12
ご承知のとおり、VisualStudio Express edition
は無料ダウンロードになりました。
いくらかのオープンソースプロジェクトが、コンパイラのサポートに関する姿勢を変えるように思えます。
あなたはVisualStudio.NET C++ Express
を使う際に.NET
を気にする必要はありません。無料のVisualStudio.NET
C++
でも、CLR(VM)
なしで実行可能なネイティブコードをビルドすることができます。[1]
OSS
プロジェクトは gcc
、Code::Blocks
、VisualStudio
C++ 6
などのフリーのコンパイラ、IDE
、および古い環境へのサポートを要求されがちです。しかし……今や
OSS
プロジェクトが、VisualC++ 2003
以下の古い IDE
をサポートする必要があるでしょうか? VisualStudio Express
edition
は、microsoft
の最新コンパイラを持っています。
VisualC++ 6
は古いコンパイラです。開発者はテンプレートを使うコードをうまく書くことができないケースがあります。私はMarijuana
さんからこの問題を聞いたとき、とても驚きました。なんと、次のようなコードを書くことができないのです:
std::List<SceneNode>::iterator
itr = ...
このコードは構文エラーを引き起こします。信じられません……これではSTL
を用いたプログラムを書くことは事実上不可能です。開発者は、この制限を避けるのに'typedef'
を使用しなければなりません。
typedef
std::List<SceneNode>
SCENENODE_LIST_T;
SCENENODE_LIST_T::iterator
itr = ...
VC++6
が現役だった頃に、VisualStudio
シリーズを使ったことがなかったので、私はこの問題を知りませんでした。
もちろん、gcc
やCodeWarrior
などでは、このような問題には遭遇しません。
VisualC++
6のこのような制約の下では、STLの本格的な使用は困難です。OSSプロジェクトが古いVisualC++のサポートを諦めるなら、彼らはこの制限から自分たちのソースコードを解放することができます。OGREプロジェクトは以下の意見を発表しました:
Lastly, if you use Visual C++, note that we have
dropped support for old versions and officially
support only VC7.1 (.Net 2003) and VC8 (.Net 2005)
with this release. The standards support in older
versions of VC++ (especially VC6) was just too bug
ridden to tolerate any longer since it was
constraining our development, and the upgrade path
to VC8 Express is free, so there is no reason to
continue to use outdated versions. You also have
the choice of Code::Blocks.
これは正しい判断のように思えます。
[1]このケースでは、プロジェクトを構成する際に「マネージコードの使用」にチェックを入れてはいけません。