Вопрос

Я продолжаю читать о C99 и C++11 и обо всех этих замечательных вещах, которые добавляются в стандарт языка и которые, возможно, когда-нибудь будет полезно использовать.Однако в настоящее время мы томимся в стране написания C++ в Visual Studio.

Будут ли когда-нибудь добавлены какие-либо новые элементы стандарта в Visual Studio, или Microsoft больше заинтересована в добавлении для этого новых вариантов C#?

Редактировать:В дополнение к принятому ответу я нашел блог команды Visual C++:

http://blogs.msdn.com/vcblog/

А конкретно этот пост в нем:

http://blogs.msdn.com/vcblog/archive/2008/02/22/tr1-slide-decks.aspx

Очень полезно.Спасибо!

Это было полезно?

Решение

У MS есть ряд публичных ответов на это, большинство из которых обвиняют своих пользователей.Как этот:

http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx

Теперь команда компиляторов Visual C++ время от времени получает вопрос, почему мы не реализовали C99.Это действительно основано на интересе наших пользователей.Там, где мы получили много запросов на определенные функции C99, мы попытались реализовать их (или аналоги).Несколько примеров — вариативные макросы, long long, __pragma, __FUNCTION__, и __restrict.Если есть другие функции C99, которые могут оказаться полезными в вашей работе, сообщите нам об этом!Мы мало что слышим от наших пользователей C, поэтому говорите и будьте услышаны.

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=345360

Привет:К сожалению, подавляющее большинство наших пользователей говорят, что они предпочли бы, чтобы мы сосредоточились на C++-0x, а не на C-99.Мы выбрали некоторые популярные функции C-99 (вариативные макросы, long long), но помимо этого мы вряд ли сделаем что-то большее в пространстве С-99 (по крайней мере, в краткосрочной перспективе).

Джонатан Кейвс

Команда компиляторов Visual C++.

Это довольно печальная ситуация, но она имеет смысл, если вы подозреваете, что MS хочет заблокировать пользователей:это очень затрудняет перенос современного кода на основе gcc в MSVC, что, по крайней мере, я считаю крайне болезненным.

Однако существует обходной путь:Обратите внимание, что Intel гораздо более осведомлена в этом вопросе.Компилятор Intel C может обрабатывать код C99 и даже имеет те же флаги, что и gcc, что значительно упрощает перенос кода между платформами.Также в Visual Studio работает компилятор Intel.Таким образом, отказавшись от MS COMPILER, вы по-прежнему можете использовать MS IDE, которая, по вашему мнению, имеет какую-то ценность, и использовать C99 в свое удовольствие.

Честно говоря, более разумный подход — перейти на Intel CC или gcc и использовать Eclipse для своей среды программирования.По моему опыту, переносимость кода между Windows-Linux-Solaris-AIX и т. д. обычно важна, и, к сожалению, это вообще не поддерживается инструментами MS.

Другие советы

Херб Саттер является одновременно председателем и очень активным членом комитета по стандартизации C++, а также архитектором программного обеспечения Visual Studio для Microsoft.

Он является одним из авторов новой модели памяти C++, стандартизированной для C++0x.Например, следующие документы:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2669.htm
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2197.pdf

там есть его имя.Поэтому я предполагаю, что включение C++0x в Windows гарантировано, пока H.Саттер остается в Microsoft.

Что касается C99, включенного в Visual Studio лишь частично, то, думаю, это вопрос приоритетов.

  • Наиболее интересные функции C99 уже присутствуют в C++ (встраивание, объявление переменных в любом месте, // комментарии и т. д.) и, вероятно, уже доступны для использования в C в Visual Studio (если только выполнять код C в компиляторе C++).Смотрите мой ответ здесь для более полного обсуждения функций C99 в C++.
  • C99 увеличивает расхождение между C и C++, добавляя функции, уже существующие в C++, но несовместимым образом (извините, но логическое значение сложная реализация в C99 в лучшем случае смешна...Видеть http://david.tribble.com/text/cdiffs.htm Чтобы получить больше информации)
  • Сообщество C в Windows кажется несуществующим или недостаточно важным, чтобы его можно было признать.
  • Сообщество C++ в Windows кажется слишком важным, чтобы его игнорировать
  • .NET — это то, как Microsoft хочет, чтобы люди программировали в Windows.Это означает C#, VB.NET, возможно, C++/CLI.

Итак, будь я Microsoft, зачем мне реализовывать функции, которые мало кто когда-либо будет использовать, если те же функции уже предлагаются на более активных языках сообщества, которые уже используются большинством людей?

Заключение?

C++0x будет включен в качестве расширения VS 2008 или в следующее поколение (поколения?) Visual Studio.

Функции C99, которые еще не реализованы, не будут реализованы в ближайшие годы, если только не произойдет что-то драматическое (из ниоткуда не появится страна, полная разработчиков C99?)

Изменить 14 апреля 2011 г.

Судя по всему, «страна, полная разработчиков C99», уже существует: http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6415401
^_^

И все же последний комментарий: http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6828778 это достаточно ясно, я думаю.

Изменить 3 мая 2012 г.

Херб Саттер ясно дал понять, что:

  1. Наша основная цель — поддерживать «большую часть C99/C11, которая является подмножеством ISO C++98/C++11».
  2. По историческим причинам мы также поставляем компилятор C90, который поддерживает (только) C90, а не C++.
  3. Мы не планируем поддерживать функции ISO C, которые не являются частью C90 или ISO C++.

В сообщении блога добавлены ссылки и дополнительные объяснения этих решений.

Источник: http://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/

Начиная с Предварительный просмотр ВК2013 1, C99, поддерживается более разнообразный набор C++11 и некоторые недавно представленные стандарты C++14.Подробности смотрите в официальном блоге: http://blogs.msdn.com/b/vcblog/archive/2013/06/27/what-s-new-for-visual-c-developers-in-vs2013-preview.aspx

Обновлять:

От https://news.ycombinator.com/item?id=9434483 (Стефан Т. Лавей, он же:STL является сопровождающим команды STL @VC):

В частности, в 2015 году наша реализация стандартной библиотеки C99 завершена, за исключением tgmath.h (не имеет значения в C++) и макросов прагмы CX_LIMITED_RANGE/FP_CONTRACT.

Подробности смотрите в этом посте: http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015-rc.aspx.

Я участвовал в работе над ISO C++ (2000–2005), и Microsoft внесла значительный вклад в этот язык.Нет сомнений, что они будут работать на C++0x, но им понадобится немного больше времени, чем, скажем, Intel.Компании Micosoft приходится иметь дело с обширной кодовой базой, в которой часто используются собственные расширения.Это просто делает тестовую фазу более продолжительной.Тем не менее, в конечном итоге они будут поддерживать большую часть C++0x (хотя экспорт до сих пор не любим, насколько я понимаю).

Когда дело доходит до ISO C, люди, работающие над стандартом, не являются представителями рынка Microsoft.Клиенты Microsoft могут использовать C++98, если им просто нужен лучший C.Так зачем же Microsoft тратить деньги на C99?Конечно, Microsoft тщательно отобрала детали, но это разумный бизнес.Они в любом случае понадобятся для C++0x, так зачем ждать?

К сожалению, поддержка MSVC для C очень недостаточна.Он поддерживает только ту часть C99, которая является подмножеством C++...это означает, что, например, физически невозможно скомпилировать ffmpeg или его библиотеки libav* в MSVC, поскольку они используют множество функций C99, таких как именованные элементы структуры.Ситуация усугубляется тем фактом, что libavcodec также требует компилятора, поддерживающего выравнивание стека, чего нет в MSVC.

Я работаю на x264, что в отличие от ffmpeg делает приложите усилия для поддержки MSVC, хотя это само по себе часто было кошмаром.Он не поддерживает выравнивание стека, даже если вы явно передаете самый высокий вызов функции через явную функцию выравнивания стека на основе сборки, поэтому все функции, требующие выровненного стека, должны быть отключены.Еще меня очень раздражало то, что я не могу использовать vararrays;возможно, это и к лучшему, поскольку очевидно, что GCC сильно пессимизирует их производительность.

Более свежая публикация о совместимости функций MSVC C++11 с MSVC 2010 и 2011: сейчас онлайн.

Microsoft никогда не выражала реальной заинтересованности в том, чтобы идти в ногу со стандартом c99 (который уже устарел).Печально для C-программистов, но я подозреваю, что Microsoft больше заботится о C++-сообществе.

Visual C++ 2008 SP1 содержит по крайней мере части TR1, и время от времени команда Visual C++ ведет блог или рассказывает о C++0x, поэтому я думаю, что они когда-нибудь поддержат его в этой функции.Хотя я ничего официального не читал.

Обновленная информация по этому поводу:

Сейчас (10 ноября 2008 г.) существует «Технический предварительный просмотр сообщества» (CTP) VS2010, который содержит предварительный просмотр VC10, который имеет некоторый реализованы части C++0x (обратите внимание, что в VC10 не будет реализован полный набор изменений C++0x, даже когда VC10 будет выпущен):

http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&displaylang=en

Некоторые подробности о том, что нового в VC10 CTP:

Как отмечалось в статье выше, «Компилятор Visual C++ в сентябрьском выпуске Community Technology Preview (CTP) Microsoft Visual Studio 2010 содержит поддержку четырех функций языка C++0x, а именно:»

  • лямбды,
  • авто,
  • статический_утверждение,
  • ссылки на rvalue

Херб Саттер — председатель органа по стандартизации ISO C++, а также работает в Microsoft.Я не знаю о стандарте Visual Studio C — главным образом потому, что я никогда не использую простой C — но Microsoft наверняка пытается продвигать новый стандарт C++.Доказательством этого, как уже упоминалось в OregonGhost, является TR1, включенный в последнюю версию службы Visual Studio.

Команда Visual C++ опубликовала таблицу функций C++0x, которые поддерживает версия 2010. http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx.Поскольку между спецификацией и реализацией может пройти некоторое время, это кажется вполне разумным.В Википедии есть хорошая статья об этой спецификации.На момент написания этой статьи она еще не закончена.

Блок Visual C++ предоставляет много информации по нескольким интересным моментам, касающимся поддержки C++11 в VC++11, включая несколько таблиц.

  • Основные возможности языка C++11
  • Основные возможности языка C++11:Параллелизм
  • Основные возможности языка C++11:С99
  • Размеры контейнера x86 (байты)
  • Размеры контейнера x64 (байты)

Блог группы Visual C++, Возможности C++11 в Visual C++ 11

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top