Unternehmen aktualisieren VS nicht ohne weiteres. Wir verwenden 2010SP1 beispielsweise für ein Projekt, das mehrere Jahre lang nicht ausgeliefert werden soll. Die Verwendung einer neueren Version würde den Kauf neuer Lizenzen für die IDE, die Möglichkeit des Kaufs neuer Lizenzen für von uns verwendete Plugins und natürlich das Risiko einiger auffälliger Fehler bedeuten, die nicht behoben wurden. Wir haben bereits für 2010 bezahlt und wissen, dass 2010 für unsere Bedürfnisse funktionieren wird.
Ich gebe zu, es nervt mich manchmal; Ich hätte wirklich gerne die neueste C ++ 11/14-Unterstützung, AMP-Unterstützung und verbesserte Optimierungen, aber diese Art von "Upgrade auf die neue glänzende" Mentalität passt nicht gut zu größeren, ernsthafteren Projekten.
Die meisten Unternehmen sind sehr, sehr konservativ in Bezug auf die Aktualisierung von Software, sei es Visual Studio, Office, Windows, Perforce oder was auch immer. Während die Verwendung von Visual Studio 2005 für Spiele heutzutage ziemlich selten ist, ist 2008 immer noch ziemlich verbreitet. Sehr, sehr wenige verwenden 2012. Es ist durchaus möglich, dass die Aufnahme von 2012 niemals massenhaft erfolgen wird und dass die nächste beliebte Version von Visual Studio 2013 oder 2014 sein wird.
Sehen Sie zum Beispiel, wie schnell die gängige, auf Enthusiasten ausgerichtete Linux-Distribution Versionen im Vergleich zur Release-Trittfrequenz von Redhat Enterprise oder Ubuntu LTS aktualisiert. Heimanwender und Hobbys können Upgrades leichter rechtfertigen, und Enthusiasten verlangen oft nach ihnen, aber Unternehmen möchten in der Regel so wenig Änderungen wie möglich.
Ein weiterer Faktor ist heute die XBox 360-Kompatibilität. Es ist albern, zwei Versionen der IDE / des Compilers zu kaufen und zu installieren, wenn Sie eine speziell für die XBox-Kompatibilität benötigen. Welche nächste Version von VS für Spiele populär wird, hängt weitgehend davon ab, welchen Compiler die XBox One für die Release-Versionen ihrer Devkits empfiehlt (2012 wird für die Beta-Devkits verwendet, die für Startspiele verwendet werden, aber 2013 wird möglicherweise später für Post-Spiele empfohlen) Titel starten).
In Bezug auf die von den Compilern verwendeten Laufzeiten müssen diese genau mit dem verwendeten Compiler übereinstimmen. Ein Teil davon ist darauf zurückzuführen, wie C und C ++ funktionieren. Schnittstellen werden durch Header-Dateien definiert, die eigentlich nur eine ausgefallene Methode zum Ausschneiden und Einfügen sind. Betrachten Sie Exponat A:
void foo(char* name, int length);
Betrachten wir nun Exponat B:
void foo(int length, char* name);
Wenn diese C-Funktionen in zwei verschiedenen Versionen der Laufzeiten enthalten _foo
wären, wären sie beide Symbole, aber der für die Verwendung einer kompilierte Code würde für die andere eindeutig nicht funktionieren. Während die Kompatibilitätsprobleme im Allgemeinen etwas komplizierter und subtiler sind, ist das Endergebnis immer noch dasselbe: Mit VS2005 kompilierter Code enthält einen Header von VS2005, der nur die Funktionsweise der VS2005-Laufzeit beschreibt. VS2012 wird mit völlig unterschiedlichen Headern ausgeliefert, die auf eine völlig andere Laufzeit abzielen.
Microsoft unterstützt es nicht, ältere Versionen zu verwenden, da dies wirklich nur ein Schmerz wäre. Sie müssten zusätzlich zu den Laufzeiten alte Header versenden und dann weiter pflegen. Es gibt relativ wenig Gründe dafür, da Entwickler mithilfe guter DLL-Verwendungspraktiken in Windows Bibliotheken mit unterschiedlichen Laufzeiten mischen können. Wenn Sie über VS2012 verfügen, können Sie weiterhin Links zu Bibliotheken erstellen, die mit VS2005 erstellt wurden, sofern Sie und die Bibliothek einige einfache Regeln befolgen.
Plattformen wie GNU / Linux haben einige Anstrengungen unternommen, um diese Probleme zu vermeiden, haben sie jedoch durchlaufen, manchmal auf einer viel tieferen Ebene. Ich erinnere mich noch an den Übergang von libc5 zu glibc oder an die häufigen Unterbrechungen von libstdc ++ in dieser Zeit (dies ist einer der Gründe, warum Linux / UNIX-Entwickler in Bezug auf C ++ über die Jahre relativ kalt geblieben sind).
Windows wird mit einer "generischen" C-Laufzeit auf niedriger Ebene ausgeliefert MSVCR.DLL
, obwohl jede Version des Compilers einen eigenen Ersatz enthält, z MSVCRR110.DLL
. Sie können sich bemühen, nur die generische Version zu verwenden, aber es fehlen viele Funktionen, einschließlich der meisten C ++ - Unterstützungsroutinen, die sich mit jeder Version von Visual Studio (und der sich ständig weiterentwickelnden Unterstützung von C ++) ändern. Der Aufwand und die verlorene Funktionalität sind im Allgemeinen nicht wert, es sei denn, Sie versuchen wirklich, eine Anwendung ohne Abhängigkeit zu erstellen (Wiederherstellungstools, Betriebssystemtools, Sicherheitstools usw. fallen manchmal in diese Klasse).
Kurz gesagt, jedes Visual Studio verfügt über eine eigene Laufzeitbibliothek, und die mit dieser Version kompilierte Anwendung muss verwendet werden. Spiele werden normalerweise mit weniger als dem modernsten Compiler geschrieben und erfordern daher eine ältere Laufzeit.