Підтримка Visual Studio для нових стандартів C / C ++?


102

Я продовжую читати про C99 та C ++ 11 та всі ці цілком приємні речі, які додаються до мовного стандарту, які, можливо, колись приємно використовувати. Однак ми зараз знемагаємо на землі написання C ++ у Visual Studio.

Чи будь-який новий матеріал у стандарті коли-небудь буде доданий до візуальної студії, чи Microsoft більше зацікавлений у додаванні нових варіантів C # для цього?

Редагувати: Окрім прийнятої відповіді, я знайшов блог команди Visual C ++:

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

І конкретно, ця публікація в ній:

https://web.archive.org/web/20190109064523/https://blogs.msdn.microsoft.com/vcblog/2008/02/22/tr1-slide-decks/

Дуже корисний. Дякую!


3
Я не розумію, що корисного ви знайшли у статті 2008/02 від vcblog, оскільки описані там функції вже давно існують у прискореному стані та досить добре відомі. Світозмінні особливості C ++ 0x різні: лямбда-функції, ініціалізатори тощо, перелічені на сайті en.wikipedia.org/wiki/C%2B%2B0x .
аміт

Дивіться blogs.msdn.com/vcblog/archive/2009/04/22/… останню статтю теж (я знаю, це пізніше, ніж тоді, коли питання було задано)
amit

1
Це було значно покращено в останніх версіях Visual Studio, як-от 2015 Update 2: visualstudio.com/en-us/news/vs2015-update2-vs.aspx#Cdoubleplus
Рікардо Перес

Подумайте про спробу MinGW-64
Basile Starynkevitch

Відповіді:


103

MS має низку публічних відповідей на це, більшість із них звинувачують своїх користувачів. Як ця:

https://devblogs.microsoft.com/cppblog/iso-c-standard-update/

Тепер команда компілятора Visual C ++ періодично отримує запитання, чому ми не реалізували C99. Це дійсно засновано на інтересах наших користувачів. Там, де ми отримали багато запитів щодо певних функцій C99, ми спробували їх реалізувати (або аналоги). Пара прикладів є VARIADIC макросів long long, __pragma, __FUNCTION__, і __restrict. Якщо є інші функції C99, які можуть бути корисними у вашій роботі, повідомте нас! Ми мало що чуємо від наших користувачів C, тому говоріть і чуйте себе

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

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

Джонатан Печери

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

Це досить сумний стан справ, але також має сенс, якщо ви підозрюєте, що MS хоче заблокувати користувачів: це дуже важко переносити сучасний код на основі gcc в MSVC, що, принаймні, мені здається надзвичайно болісним.

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

Більш розумний підхід - це чесно перейти на Intel CC або gcc і використовувати Eclipse для свого програмного середовища. Переносимість коду в Windows-Linux-Solaris-AIX-тощо, як правило, важлива для мого досвіду, і це, на жаль, не підтримується засобами MS.


42
Але я думаю, що їх справжня причина - це саме те, що вони сказали: C-спільнота в Windows, мабуть, майже не існує або є незначною, якщо порівнювати зі спільнотою C ++ / C # /. Таким чином, вони мають дійсну точку. Незважаючи на те, що у мене є Linux, і, як і g ++, я не буду брати в обмін MSVC ++ лише через C99, вибачте.
paercebal

11
Якби вони хоч би дали нас за (int i ;;) і в рядку.
Нік Ван Брунт


2
Найкраща їх відповідь, що стосується розробки, орієнтованої на C ++ 0x, полягає в тому, що зараз, через 4 роки, вони ще майже не мають підтримки C ++ 11. (Тим часом gcc підтримує майже всю справу.)
GManNickG

10
FWIW, VC2013 попередній перегляд підтримує стандарти C ++ 11 та C99. Перевірте, що нового для C / C ++ розробників .
вулкан ворон

37

Herb Sutter є і головою, і дуже активним членом комітету зі стандартизації 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 гарантується до тих пір, поки Х. Саттер залишається в 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, з'явиться з нізвідки?)

Редагувати 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/


1
Справедливості - булева реалізація в C99 була зроблена, щоб дозволити сумісність з зворотним кодом (тобто код, який визначав bool, щоб мати булевий характер).
Maciej Piechotka

19
Це: "Найцікавіші функції C99 вже є в C ++" - це просто помилково. Шістнадцяткові форматори з плаваючою комою та літерали. Функції бібліотеки математики C99. Названі ініціалізатори для структур / об'єднань. restrictКлючове слово. Є багато чудових функцій C99, яких у C ++ не вистачає, і це функції, які я використовую щодня як програміст на C.
Стівен Канон

1
@Stephen Canon: Будь ласка , прочитайте мою відповідь на: stackoverflow.com/questions/3879636 / ... . Звичайно, це відповідь C ++ для розробників C ++, тому він не підходить для розробників C, які не бажають використовувати класи, конструктори або перевантажені математичні функції (кому потрібні tgmath.h в C ++?). Суть у тому, що: важливо, це вже є, або це легко здійснити. Що стосується restrictключових слів, ви можете використовувати в C ++, по- видимому: stackoverflow.com/questions/776283 / ... . . .
paercebal

5
@paercebal: Ви маєте право на цю точку зору, але в С ++ немає нічого, що могло б закликати мене відмовитися від шестинадцяткових літералів з плаваючою комою. Це саме моя думка. Звичайно, програмісти C ++ не цікавляться функціями C99; це, мабуть, тому вони програмісти C ++. І навпаки, є цілий світ програмістів на C, які взагалі не піклуються про функції C ++, і просто хочуть, щоб Microsoft надав компілятор C, який хоча б намагається дотримуватися стандарту, як це роблять всі інші.
Стівен Канон

13
@paercebal: "еквіваленти" марні. Є мільйони рядків портативного коду С, які добре працюють на будь-якій іншій платформі. Ви пропонуєте їх переписати? Спільнота користувачів C99 достатньо велика, щоб кожен інший великий постачальник компіляторів хоча б намагався забезпечити сумісність: IBM, HP, Apple, Intel, GNU, Sun, ARM, незліченну кількість вбудованих компіляторів пристроїв тощо. C99 може не бути важливим для програмістів Windows , але програми Windows являють собою невелику частку всього написаного коду.
Стівен Канон

11

Починаючи з попереднього перегляду 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. асп

Оновлення:

З https://news.ycombinator.com/item?id=9434483 (Stephan T Lavavej aka: 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 .


Наскільки я можу сказати, лише часткова підтримка C99: blogs.msdn.com/b/vcblog/archive/2013/07/19/… "... Ми знаємо, що це не повна підтримка функцій бібліотеки C99".
sdfqwerqaz1

@ sdfqwerqaz1, дивіться коментар STL тут : "команди компілятора та бібліотеки розглядають їх у кожному конкретному випадку, але наш головний пріоритет - відповідність C ++. Наприклад, оскільки C ++ 11/14 містить стандарт C99 Бібліотека за посиланням, 2015 Preview повністю підтримує стандартну бібліотеку C99 (єдиний недолік - tgmath.h, який вимагає магії компілятора C і не стосується C ++, який має перевантаження, і CX_LIMITED_RANGE / FP_CONTRACT, які також потребують підтримки компілятора) " .
вулкан ворон

8

Я брав участь у роботі ISO C ++ (2000-2005), і Microsoft зробила вагомий внесок у цю мову. Немає сумнівів, що вони працюватимуть на C ++ 0x, але їм знадобиться трохи більше часу, ніж скажімо Intel. Micosoft має справу з більшою кодовою базою, яка часто використовує їх фірмові розширення. Це просто сприяє більш тривалому тестуванню. Тим не менше, вони з часом підтримуватимуть більшість C ++ 0x (експорт все ще не любить, або я так розумію).

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


7

Підтримка MSVC для C, на жаль, дуже не вистачає. Він підтримує лише частину C99, яка є підмножиною C ++ ... це означає, що, наприклад, фізично неможливо скласти ffmpeg або його бібліотеки libav * в MSVC, оскільки вони використовують багато функцій C99, таких як названі структури елементів. Це погіршується тим, що libavcodec також вимагає компілятор, який підтримує вирівнювання стека, чого MSVC не робить.

Я працюю над x264, який, на відміну від ffmpeg , докладає зусиль, щоб підтримати MSVC, хоча це часто було само собою кошмаром. Він не підтримує вирівнювання стека, навіть якщо ви явно передаєте виклик найвищої функції через явну функцію вирівнювання стека на основі складання, тому всі функції, які потребують вирівняного стеку, повинні бути відключені. Це також дуже дратувало, що я також не можу використовувати варари; можливо, це найкраще, оскільки, очевидно, GCC масово песимізує їх ефективність.



4

Microsoft ніколи не висловлювала реальної зацікавленості підтримувати швидкість із стандартом c99 (який старіє на сьогодні). Сумно за програмістів на C, але я підозрюю, що Microsoft більше піклується про C ++ - спільноту.


4

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


4

Оновлена ​​інформація про це:

Зараз (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 вересневого перегляду технологій спільноти (CTP) містить підтримку чотирьох мовних функцій C ++ 0x, а саме:"

  • лямбда,
  • авто,
  • static_assert,
  • rvalue посилання

3

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


3

Команда 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 . Оскільки між специфікацією та впровадженням може бути затримка, це здається досить розумним. У Вікіпедії є приємна стаття про специфікацію. Не закінчено в той час, коли я це пишу.


1

Блок Visual C ++ надає багато інформації про декілька цікавих моментів щодо підтримки C ++ 11 у VC ++ 11, включаючи кілька таблиць

  • C ++ 11 Особливості основної мови
  • C ++ 11 Основні мовні особливості: Паралельність
  • C ++ 11 Основні мовні особливості: C99
  • Розміри контейнерів x86 (байти)
  • Розміри контейнерів x64 (байти)

Блог команд Visual C ++, C ++ 11 Особливості в Visual C ++ 11

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.