企業はVS willy-nillyをアップグレードしません。たとえば2010SP1を、数年間出荷する予定のないプロジェクトで使用しています。新しいバージョンを使用することは、IDEに新しいライセンスを購入すること、私たちが使用するプラグインに新しいライセンスを購入する可能性、そしてもちろん、まだ解決されていないいくつかの見事なバグを危険にさらすことを意味します。2010年はすでに支払い済みですが、2010年も私たちのニーズに対応できることはわかっています。
私は時々私を困らせることを認めます。私は本当に最新のC ++ 11/14サポート、AMPサポート、および改善された最適化を望みますが、そのような「新しい光沢へのアップグレード」の考え方は、より大きく、より深刻なプロジェクトとうまく一致しません。
ほとんどの企業体は、Visual Studio、Office、Windows、Perforceなど、あらゆるソフトウェアの更新について非常に保守的です。今日のゲームではVisual Studio 2005の使用はかなりまれですが、2008年はまだかなり一般的です。2012を使用している人はごくわずかです。2012の普及が一斉に発生することはなく、Visual Studioの次の人気のバージョンは2013または2014になる可能性があります。
たとえば、一般的な愛好家向けのLinuxディストリビューションが、Redhat EnterpriseやUbuntu LTSのリリースケイデンスと比較してどれだけ迅速にバージョンを更新するかをご覧ください。ホームユーザーと趣味の人はアップグレードをより簡単に正当化でき、愛好家はしばしば彼らを強く要求しますが、企業は通常、できるだけ小さな変更を望んでいます。
今日のもう1つの要因は、XBox 360の互換性です。特にXBoxの互換性のために1つ必要な場合、IDE /コンパイラの2つのバージョンを購入してインストールするのはばかげています。どのVSの次のバージョンがゲームで人気になるかは、XBox Oneがその開発キットのリリースバージョンに推奨するコンパイラーに大きく依存します(2012は、起動ゲームに使用されるベータ版の開発キットに使用されますが、2013年は、タイトルを起動します)。
コンパイラーによって使用されるランタイムに関しては、これらは使用中のコンパイラーと正確に一致する必要があります。これの一部は、CおよびC ++の動作方法によるものです。インターフェイスはヘッダーファイルによって定義されます。ヘッダーファイルは、実際にはカットアンドペーストを行うための優れた方法です。展示Aを検討してください。
void foo(char* name, int length);
次に、展示Bについて検討します。
void foo(int length, char* name);
これらのC関数が2つの異なるバージョンのランタイムに含まれている場合、それらは両方ともシンボルです_foo
が、一方を使用するようにコンパイルされたコードは、もう一方では機能しません。互換性の問題は一般に少し複雑で微妙ですが、最終結果は同じです:VS2005でコンパイルされたコードには、VS2005ランタイムの動作のみを説明するVS2005からのヘッダーがあります。VS2012には、まったく異なるランタイムを対象とするまったく異なるヘッダーが付属しています。
Microsoftは古いバージョンをターゲットにすることをサポートしていません。彼らは出荷し、ランタイムに加えて古いヘッダーを維持し続ける必要があります。WindowsでのDLLの適切な使用方法により、開発者は異なるランタイムを使用してライブラリを混在させることができるため、比較的理由はほとんどありません。VS2012を使用している場合でも、あなたとライブラリがいくつかの簡単なルールに従っている限り、VS2005で作成されたライブラリに対してリンクすることができます。
GNU / Linuxのようなプラットフォームは、これらの問題を回避するためにいくらかの努力を払っていますが、時にははるかに深いレベルでそれらを通過しました。私はまだlibc5からglibcへの移行、または頻繁なlibstdc ++の中断を思い出します(これは、Linux / UNIX開発者が長年C ++のトピックについて比較的冷静であった1つの理由です)。
Windowsにはと呼ばれる低レベルの「汎用」Cランタイムが同梱されてMSVCR.DLL
いますが、コンパイラの各バージョンには独自の置換が含まれていMSVCRR110.DLL
ます。ジェネリックバージョンのみを使用するように努力することはできますが、Visual Studioの各バージョンで変更されるほとんどのC ++サポートルーチン(および進化し続けるC ++のサポート)など、多くの機能がありません。依存関係のないアプリケーション(回復ツール、OSツール、セキュリティツールなどがこのクラスに分類されることもあります)を実際に作成しようとしている場合を除いて、これは通常、労力と機能の損失に値しません。
つまり、各Visual Studioには独自のランタイムライブラリがあり、そのバージョンでコンパイルされたアプリケーションを使用する必要があります。ゲームは通常、最先端のコンパイラよりも少ないものを使用して記述されるため、古いランタイムが必要になります。