企業がVisual Studioの本当に古いバージョンをまだ使用しているのはなぜですか?


9

C ++が使用されている理由を理解しています。それはこの質問についてではありません。

ゲームをインストールすると、一般的にSteam(最近はSteamのみを使用します)は、配布可能なC ++ 2005ランタイムをインストールします。

私の質問は、なぜこれが当てはまるのですか?8年以上前にリリースされたランタイムが依然として普及している理由は何ですか?私が最近インストールしたゲームのいくつかは少し古いので、2、3年の開発時間を想定すれば、それがその時点で実証済みのテストされた標準であると言えるでしょう。

ゲーム会社がVC ++ランタイムの新しいバージョンを使用しないのはなぜですか?


1
これは答えを探すのに問題のようには思えません。なぜそれが「好ましい」と仮定しているのですか?
テトラッド2013

あなたの質問は本当に「なぜ企業はなぜVisual Studioの本当に古いバージョンをまだ使用しているのですか?」 再頒布可能パッケージの実際については、こちらご覧ください
bobobobo 2013

回答:


20

企業は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には独自のランタイムライブラリがあり、そのバージョンでコンパイルされたアプリケーションを使用する必要があります。ゲームは通常、最先端のコンパイラよりも少ないものを使用して記述されるため、古いランタイムが必要になります。


さらにいくつかの理由:新しいコンパイラは古いプラットフォームとの互換性を損なう(たとえば、更新前1 VS2012はXPをサポートしていなかった)。古いコンパイラには十分に理解されたバグがありますが、新しいコンパイラには未知のバグがあります(まだコンパイラがバグのないという妄想の下にいる場合は、目を覚ましてコーヒーの匂いを嗅ぎましょう!
congusbongus

1

私の知る限り、Visual Studio 2008は、Windows MobileおよびWindows CEアプリケーションを構築できる最後のバージョンです。

CEデバイスで実行されているアプリをサポートする必要があるため、VS2008を引き続き使用します。

私のWindowsデスクトップアプリでは、ライセンスを所有するよりも単純な理由でVS2010 Proを使用しています。できます。私はそれが好きです。そして、なぜ私が実際にアプリを良くしない新しいバージョンにもっとお金を払わなければならないのかわかりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.