Поддержка Visual Studio для новых стандартов C / C++?

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

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

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

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

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

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

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

12 ответов


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

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

Джонатан Пещеры

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

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

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

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


Херб Саттер является председателем и очень активным членом комитета по стандартизации 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

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

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

  • наиболее интересные функции C99 уже присутствуют в C++ (встраивание, объявление переменных в любом месте, / / комментарии и т. д.) и, вероятно, уже используется в C в Visual Studio (Если только делает C-код в компиляторе c++). Смотрите мой ответ здесь для более полного обсуждения функций C99 в C++.
  • C99 увеличивает расхождение между C и c++, добавляя функции, уже существующие в C++, но несовместимым образом (извините, но boolean сложная реализация в 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, появляется из ниоткуда?)

изменить 2011-04-14

по-видимому, "страна, полная разработчиков 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 достаточно ясно, я думаю.

изменить 2012-05-03

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

  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/


начиная от VC2013 просмотр 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 (Stephan T Lavavej aka: STL является сопровождающим STL @VC команда):

в частности, в 2015 году наша стандартная реализация библиотеки C99 завершена, за исключением tgmath.h (не относится к C++) и макросы pragma 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 имеет дело с более крупной кодовой базой, которая часто использует свои собственные расширения. Это просто делает для более длинного testfase. Тем не менее, они будут поддерживать большую часть C++0x в конечном итоге (экспорт все еще не любим, хотя, Или я так понимаю).

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


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

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


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


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


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


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

теперь (10 ноября 2008 года)" Community Tech Preview " (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:

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

  • лямбды,
  • авто,
  • static_assert,
  • rvalue references

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


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


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

  • В C++11 Основные Функции Языка
  • C++11 Основные Функции Языка: Параллелизм
  • C++11 Основные Особенности Языка: C99
  • x86 размеры контейнеров (байт)
  • x64 размер контейнера (байт)

Visual C++ Team Blog, функции C++11 в Visual C++ 11