Поддержка 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 101

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++.

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

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

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

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

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

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. Sutter остается в 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, или на следующее поколение (поколения?) визуальной студии.

функции 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 могут использовать 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) есть "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 CTP:

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

  • лямбды,
  • авто,
  • static_assert,
  • 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 Основные Функции Языка: C99
  • x86 размеры контейнеров (байт)
  • x64 размеры контейнера (байт)

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