Поддержка Visual Studio для новых стандартов C/С++?
Я продолжаю читать о C99 и С++ 11 и все эти полностью сладкие вещи, которые добавляют к языковому стандарту, который может быть приятным использовать когда-нибудь. Тем не менее, мы в настоящее время томимся в стране написания С++ в Visual Studio.
Будет ли какой-либо новый материал в стандарте когда-либо добавляться в визуальную студию или Microsoft больше заинтересована в добавлении новых вариантов С# для этого?
Изменить: в дополнение к принятому ответу, я нашел блог команды Visual С++:
http://blogs.msdn.com/vcblog/
И конкретно, этот пост в нем:
http://blogs.msdn.com/vcblog/archive/2008/02/22/tr1-slide-decks.aspx
Очень полезно. Спасибо!
Ответы
Ответ 1
MS имеет ряд публичных ответов на это, большинство из которых обвиняют своих пользователей. Как этот:
http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx
Теперь команда компилятора Visual С++ получает иногда вопрос о том, почему мы не реализовали C99. Это действительно основано на интересе наших пользователей. Там, где weve получил много запросов для некоторых функций C99, мы пытались их реализовать (или аналоги). Пара примеров - это переменные макросы, long long
, __pragma
, __FUNCTION__
и __restrict
. Если есть другие функции C99, которые вы найдете полезными в своей работе, сообщите нам об этом! Мы не слышим много от наших пользователей C, поэтому говорите и слушайте себя.
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=345360
Привет. К сожалению, подавляющее чувство от большинства наших пользователей заключается в том, что они предпочли бы, чтобы мы сосредоточились на С++ - 0x, а не на C-99. У нас есть "избранные вишнями" некоторые популярные функции C-99 (переменные макросы, long long
), но помимо этого мы вряд ли будем делать гораздо больше в пространстве C-99 (по крайней мере, в краткосрочной перспективе).
Джонатанские пещеры
Команда компилятора Visual С++.
Это довольно печальное состояние дел, но также имеет смысл, если вы подозреваете, что 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.
Ответ 2
Herb Sutter - это и стул, и очень активный член компиляции стандартов С++, а также архитектор программного обеспечения в Visual Studio для Microsoft.
Он входит в число авторов новой модели памяти С++, стандартизованной для С++ 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 С++ 0x гарантировано, пока Х. Саттер остается в Microsoft.
Что касается C99, частично включенного в Visual Studio, я думаю, что это вопрос приоритетов.
- Самые интересные функции C99 уже присутствуют в С++ (встраивание, объявление переменных в любом месте, комментарии и т.д.) и, вероятно, уже можно использовать в C в Visual Studio (если только C-код в компиляторе С++). См. Мой ответ здесь для более полного обсуждения возможностей C99 на С++.
- C99 увеличивает расхождение между C и С++, добавляя функции, уже существующие на С++, но несовместимым способом (извините, но сложная реализация boolean на C99 смешна, в лучшем случае... See http://david.tribble.com/text/cdiffs.htm для получения дополнительной информации)
- Сообщество C в Windows кажется несуществующим или недостаточно важным для подтверждения.
- Сообщество С++ в Windows кажется слишком важным для игнорирования
- .NET - это то, как Microsoft хочет, чтобы люди программировали в Windows. Это означает, что С#, VB.NET, возможно, С++/CLI.
Итак, я бы стал Microsoft, зачем мне реализовывать функции, которые мало кто когда-либо будет использовать, когда одни и те же функции уже предлагаются на более активных языках сообщества, уже используемых большинством людей?
Заключение
С++ 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
Херб Саттер дал понять, что:
- Наша основная цель - поддерживать "большую часть C99/C11, которая является подмножеством ISO С++ 98/С++ 11".
- Мы также по историческим причинам поставляем компилятор C90, который принимает (только) C90, а не С++
- Мы не планируем поддерживать функции ISO C, которые не являются частью C90 или ISO С++.
В блоге добавляются ссылки и дальнейшие объяснения этих решений.
Источник: http://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/
Ответ 3
Начиная с VC2013 preview 1, C99, более диверсифицированный набор С++ 11 и некоторые новые стандарты С++ 14 поддерживаются, Оформить официальный блог для более подробной информации: http://blogs.msdn.com/b/vcblog/archive/2013/06/27/what-s-new-for-visual-c-developers-in-vs2013-preview.aspx
Update:
Из https://news.ycombinator.com/item?id=9434483 (Stephan T Lavavej aka: STL является сторонником команды STL @VC):
В частности, в 2015 году наша реализация стандартной библиотеки C99 завершена, за исключением tgmath.h(нерелевантно в С++) и макросов 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.
Ответ 4
Я участвовал в работе ISO С++ (2000-2005), и Microsoft внесла значительный вклад в этот язык. Нет сомнений, что они будут работать на С++ 0x, но им потребуется немного больше времени, чем Intel. Micosoft имеет дело с более крупной кодовой базой, которая часто использует свои проприетарные расширения. Это просто увеличивает срок тестирования. Тем не менее, они будут поддерживать большую часть С++ 0x в конце концов (экспорт все равно не нравится, хотя я так понимаю).
Когда дело доходит до ISO C, люди, работающие над стандартом, не являются репрезентативными для рынка Microsoft. Клиенты Microsoft могут использовать С++ 98, если они просто ищут лучшего C. Так почему Microsoft тратит деньги на C99? Конечно, Microsoft вишневые детали, но этот здравомыслящий бизнес. В любом случае, они нужны для С++ 0x, поэтому зачем ждать?
Ответ 5
Поддержка MSVC для C, к сожалению, очень не хватает. Он поддерживает только часть C99, которая является подмножеством С++... что означает, что физически невозможно скомпилировать ffmpeg или библиотеки libav * в MSVC, поскольку они используют многие функции C99, такие как именованные элементы структуры. Это усугубляется тем фактом, что libavcodec также требует компилятора, который поддерживает выравнивание стека, которого нет в MSVC.
Я работаю над x264, который, в отличие от ffmpeg, прилагает усилия для поддержки MSVC, хотя это часто было кошмаром и само по себе. Он не поддерживает выравнивание стека, даже если вы явно передаете наивысший вызов функции через явную функцию выравнивания стека на основе сборки, поэтому все функции, требующие совмещенного стека, должны быть отключены. Его также очень раздражало, что я тоже не могу использовать vararrays; возможно, это к лучшему, так как очевидно, что GCC массово пессимизирует их по производительности.
Ответ 6
Более поздняя публикация о совместимости MSVC С++ 11 для MSVC 2010 и 2011 теперь в сети.
Ответ 7
Microsoft никогда не проявляла никакого реального интереса к тому, чтобы поддерживать скорость до стандарта c99 (которая уже стареет). Печально для C-программистов, но я подозреваю, что Microsoft больше заботится о сообществе С++.
Ответ 8
Visual С++ 2008 SP1 по крайней мере содержит части TR1, и время от времени команда Visual С++ ведет блоги или говорит о С++ 0x, поэтому, я думаю, они будут поддерживать ее в течение некоторого времени в этой функции. Я не читал ничего официального, хотя.
Ответ 9
Обновленная информация об этом:
В настоящее время (10 ноября 2008 г.) представлен "Предварительный просмотр сообщества" (CTP) VS2010, который содержит предварительный просмотр VC10 с некоторыми компонентами С++ 0x (обратите внимание, что VC10 не будет иметь полный набор С++ 0x изменений, реализованных даже при выпуске VC10):
http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&displaylang=en
Некоторые подробности о том, что нового в CTP VC10:
Как уже отмечалось в этой статье, "Компилятор Visual С++ в Microsoft Community Visual Studio 2010 Preview (CTP) содержит поддержку четырех языков языка С++ 0x, а именно:"
- lambdas,
- авто,
- static_assert,
- ссылки rvalue
Ответ 10
Herb Sutter является председателем органа стандартов ISO С++, а также работает для Microsoft. Я не знаю о стандарте Visual Studio C - главным образом потому, что я никогда не использую простой C, но Microsoft уверен, что пытается продвинуть новый стандарт С++. Свидетельством этого является - как упоминалось в OregonGhost - TR1, который включен в последнюю версию службы Visual Studio.
Ответ 11
Команда Visual С++ выпустила таблицу функций С++ 0x, которую релиз 2010 поддерживает http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx. Поскольку между спецификацией и реализацией может быть время задержки, это кажется довольно разумным. В Википедии есть хорошая статья о спецификации. Это не закончилось в то время, когда я пишу это.
Ответ 12
Visual С++ Bloq предоставляет много информации о нескольких интересных моментах относительно поддержки С++ 11 в VС++ 11, включая несколько таблиц
- Функции основного языка С++ 11
- С++ 11 Основные функции языка: Concurrency
- С++ 11 Основные функции языка: C99
- x86 Размеры контейнера (байты)
- x64 Размеры контейнера (байты)