Warum verwenden Unternehmen immer noch wirklich alte Versionen von Visual Studio?

9

Ich verstehe, warum C ++ verwendet wird. Darum geht es in dieser Frage nicht.

Wenn ich Spiele installiere, installiert normalerweise Steam (ich benutze heutzutage so ziemlich nur Steam) die verteilbare C ++ 2005 Runtime.

Meine Frage ist, warum dies der Fall ist. Was ist der Grund, warum eine vor über 8 Jahren veröffentlichte Laufzeit immer noch weit verbreitet ist? Einige der Spiele, die ich kürzlich installiert habe, sind etwas älter. Wenn Sie also ein paar Jahre Entwicklungszeit voraussetzen, können Sie davon ausgehen, dass dies der bewährte Standard zu dieser Zeit war.

Warum verwenden Spielefirmen keine neuere Version der VC ++ - Laufzeit?

Ian
quelle
1
Dies ist kein Problem bei der Suche nach einer Antwort. Warum setzen Sie voraus, dass es "bevorzugt" ist?
Tetrad
Ich denke, Ihre Frage lautet wirklich: "Warum verwenden Unternehmen immer noch wirklich alte Versionen von Visual Studio?" Sehen Sie hier, was das weiterverteilbare Paket wirklich ist.
Bobobobo

Antworten:

20

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 _foowä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.

Sean Middleditch
quelle
Einige weitere Gründe: Neuere Compiler beeinträchtigen die Kompatibilität mit älteren Plattformen (z. B. Pre-Update 1 VS2012 unterstützte XP nicht ). Alte Compiler haben gut verstandene Fehler, während neue Compiler unbekannte Fehler haben (wenn Sie immer noch den Eindruck haben, dass Compiler fehlerfrei sind, wachen Sie auf und riechen Sie den Kaffee! )
Congusbongus
1

Soweit ich weiß, ist Visual Studio 2008 die letzte Version, mit der Windows Mobile- und Windows CE-Anwendungen erstellt werden können.

Ich muss Apps unterstützen, die auf CE-Geräten ausgeführt werden, damit ich immer noch VS2008 verwende.

Für meine Windows Desktop-Apps verwende ich VS2010 Pro aus dem einfachen Grund, als ich die Lizenz besitze. Es klappt. Ich mag das. und ich verstehe nicht, warum ich mehr Geld für eine neuere Version ausgeben sollte, die meine Apps nicht besser macht.

Mike RO Soft
quelle