Почему компании по-прежнему используют действительно старые версии Visual Studio?

Я понимаю, почему используется C ++. Это не тот вопрос, о котором идет речь.

Когда я устанавливаю игры, обычно Steam (я в значительной степени использую только Steam в эти дни) будет устанавливать дистрибутив C ++ 2005 Runtime.

Мой вопрос: почему это так? В чем причина того, что среда исполнения, выпущенная более 8 лет назад, все еще распространена? Некоторые из игр, которые я установил недавно, немного старше, поэтому, предположив, что через пару лет вы можете сделать это, это был проверенный и проверенный стандарт в то время.

Почему игровые компании не используют более новую версию среды выполнения VC ++?

c++
9 голосов | спросил Ian 18 J000000Thursday13 2013, 22:42:50

1 ответ


20

Компании не обновляют VS волей-неволей. Мы используем 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. Домашние пользователи и hobbiest могут более легко оправдать обновления, и энтузиасты часто кричат ​​на них, но предприятия обычно хотят как можно меньше изменений.

Другим фактором сегодня является совместимость с XBox 360. Глупо покупать и устанавливать две версии IDE /компилятора, если вам нужно, в частности, для совместимости с XBox. Какая следующая версия VS станет популярной для игр, в значительной степени будет зависеть от того, какой компилятор XBox One рекомендует для версий релиза своих devkits (2012 год используется для бета-devkits, используемых для запуска игр, но 2013 может быть рекомендован в будущем, запускать титулы).

С точки зрения времени выполнения, используемого компиляторами, они должны точно совпадать с используемым компилятором. Отчасти это связано с тем, как работают C и C ++. Интерфейсы определяются файлами заголовков, которые на самом деле просто причудливый способ сделать cut-n-paste. Рассмотрим экспонат A:

void foo(char* name, int length);

А теперь рассмотрим экспонат B:

void foo(int length, char* name);

Если эти C-функции были включены в две разные версии runtimes, они оба были символом _foo, но код, скомпилированный для использование одного явно не работает для другого. Хотя проблемы совместимости, как правило, немного более сложны и тонкие, конечный результат все тот же: код, скомпилированный с VS2005, будет иметь заголовок из VS2005, который будет описывать только то, как работает среда исполнения VS2005. VS2012 поставляется с совершенно разными заголовками, нацеленными на совершенно другое время выполнения.

Microsoft не поддерживает настройку старых версий, так как это будет просто боль. Им придется отправить, а затем продолжить сохранение старых заголовков в дополнение к времени выполнения. Относительно мало оснований для этого, так как хорошая практика использования DLL в Windows позволяет разработчикам смешивать библиотеки с использованием разных сред выполнения. Если у вас есть VS2012, вы все равно можете ссылаться на библиотеки, созданные с помощью VS2005, если вы и библиотека следуете нескольким простым правилам.

Платформы, такие как GNU /Linux, прилагают определенные усилия, чтобы избежать этих проблем, но прошли через них, иногда на гораздо более глубоком уровне. Я все еще помню переход libc5 на glibc или частые перерывы libstdc ++ (это одна из причин, по которой разработчики Linux /UNIX на протяжении многих лет оставались относительно холодными по теме C ++).

Windows действительно поставляется с низкоуровневой «общей» версией C, называемой MSVCR.DLL, хотя каждая версия компилятора включает в себя собственную замену например MSVCRR110.DLL. Вы можете приложить все усилия, чтобы использовать только общую версию, но в ней отсутствует большая функциональность, в том числе большинство подпрограмм поддержки C ++, которые меняются с каждой версиейVisual Studio (и его постоянно развивающаяся поддержка C ++). Обычно это не стоит усилий и упущенных функций, если вы действительно не пытаетесь создать приложение с нулевой зависимостью (инструменты восстановления, инструменты ОС, инструменты безопасности и т. Д. Иногда попадают в этот класс).

Короче говоря, каждая Visual Studio имеет свою собственную библиотеку времени исполнения, и приложение, скомпилированное с этой версией, должно использовать. Игры, как правило, записываются с использованием меньше, чем у самого передового компилятора, и, следовательно, потребуется более старое время исполнения.

ответил Sean Middleditch 18 J000000Thursday13 2013, 22:57:31

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132