Domanda

Continuo a leggere su C99 e C ++ 11 e tutte queste cose totalmente dolci che vengono aggiunte allo standard linguistico che un giorno potrebbero essere belle da usare. Tuttavia, attualmente languiamo nella terra della scrittura di C ++ in Visual Studio.

Qualcuno dei nuovi elementi dello standard verrà mai aggiunto a Visual Studio o Microsoft è più interessata ad aggiungere nuove varianti di C # per farlo?

Modifica: oltre alla risposta accettata, ho trovato il blog del team di Visual C ++:

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

E in particolare, questo post in esso:

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

Molto utile. Grazie!

È stato utile?

Soluzione

MS ha una serie di risposte pubbliche a questo, la maggior parte delle quali incolpa i propri utenti. Come questo:

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

  

Ora, il team di compilatori di Visual C ++ riceve occasionalmente la domanda sul perché non abbiamo implementato C99. È davvero basato sull'interesse dei nostri utenti. Laddove abbiamo ricevuto molte richieste per alcune funzionalità C99, abbiamo cercato di implementarle (o analoghi). Un paio di esempi sono macro variadiche, long long , __pragma , __FUNCTION__ e __restrict . Se ci sono altre funzionalità di C99 che potresti trovare utili nel tuo lavoro, faccelo sapere! Non sentiamo molto dai nostri utenti di C, quindi parla e fatti sentire

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

  

Ciao: sfortunatamente il travolgente feadback che riceviamo dalla maggior parte dei nostri utenti è che preferirebbero che ci concentrassimo su C ++ - 0x anziché su C-99. Abbiamo selezionato "ciliegie" alcune caratteristiche C-99 popolari (macro variadiche, long long ) ma oltre a ciò è improbabile che facciamo molto di più nello spazio C-99 (almeno a breve termine).

     

Jonathan Caves

     

Team di compilatori Visual C ++.

Questo è uno stato di cose piuttosto triste, ma ha senso anche se si sospetta che MS voglia bloccare gli utenti: rende molto difficile il porting del moderno codice basato su gcc in MSVC, che almeno trovo estremamente doloroso.

Tuttavia, esiste una soluzione alternativa: nota che Intel è molto più illuminata al riguardo. il compilatore Intel C è in grado di gestire il codice C99 e ha persino gli stessi flag di gcc, rendendo molto più semplice il porting del codice tra piattaforme. Inoltre, il compilatore Intel funziona in Visual Studio. Quindi, eliminando MS COMPILER, puoi ancora utilizzare l'IDE MS che ritieni abbia un qualche tipo di valore e utilizzare C99 per il contenuto del tuo cuore.

Un approccio più sensato è onestamente passare a Intel CC o gcc e usare Eclipse per l'ambiente di programmazione. La portabilità del codice su Windows-Linux-Solaris-AIX-etc è di solito importante nella mia esperienza, e sfortunatamente non è affatto supportata dagli strumenti MS.

Altri suggerimenti

Herb Sutter è sia la sedia che un membro molto attivo del comitato di standardizzazione C ++, nonché architetto del software su Visual Studio per Microsoft.

È tra gli autori del nuovo modello di memoria C ++ standardizzato per C ++ 0x. Ad esempio, i seguenti documenti:

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

ha il suo nome sopra. Quindi immagino che l'inclusione su Windows di C ++ 0x sia garantita fintanto che H. Sutter rimarrà in Microsoft.

Per quanto riguarda C99 incluso solo in parte in Visual Studio, immagino che si tratti di una priorità.

  • Le funzionalità più interessanti di C99 sono già presenti in C ++ (inline, dichiarazione delle variabili ovunque, // commenti, ecc.) e probabilmente già utilizzabili in C in Visual Studio (se solo eseguono il codice C all'interno del compilatore C ++). Vedi la mia risposta qui per un discussione più completa sulle funzionalità di C99 in C ++.
  • C99 aumenta la divergenza tra C e C ++ aggiungendo funzionalità già esistenti in C ++, ma in modo incompatibile (scusate, ma l'implementazione complessa booleana in C99 è ridicola, nella migliore delle ipotesi ... Vedi http://david.tribble.com/text/cdiffs.htm per ulteriori informazioni )
  • La comunità C su Windows sembra inesistente o non abbastanza importante per essere riconosciuta
  • La comunità C ++ su Windows sembra troppo importante per essere ignorata
  • .NET è il modo in cui Microsoft vuole che le persone programmino su Windows. Ciò significa C #, VB.NET, forse C ++ / CLI.

Quindi, dovrei essere Microsoft, perché dovrei implementare funzionalità che poche persone useranno mai quando le stesse funzionalità sono già offerte in più lingue attive della comunità già utilizzate dalla maggior parte delle persone?

Conclusione?

C ++ 0x sarà incluso, come estensione di VS 2008, o sulla prossima generazione (generazioni?) di Visual Studio.

Le funzionalità C99 non già implementate non saranno disponibili nei prossimi anni, a meno che non accada qualcosa di drammatico (un paese pieno di sviluppatori C99 appare dal nulla?)

Modifica 14/04/2011

Apparentemente, il "paese pieno di sviluppatori C99" esiste già: http: / /blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6415401
^ _ ^

Comunque, l'ultimo commento a: http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6828778 è abbastanza chiaro, immagino.

Modifica 03/05/2012

Herb Sutter ha chiarito che:

  
      
  1. Il nostro obiettivo principale è supportare " la maggior parte di C99 / C11 che è un sottoinsieme di ISO C ++ 98 / C ++ 11. "
  2.   
  3. Spediamo anche per motivi storici un compilatore C90 che accetta (solo) C90 e non C ++
  4.   
  5. Non prevediamo di supportare le funzionalità ISO C che non fanno parte di C90 o ISO C ++.
  6.   

Il post sul blog aggiunge collegamenti e ulteriori spiegazioni per tali decisioni.

Fonte: http: // herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/

A partire da Anteprima 1 VC2013 , C99, sono supportati un set più diversificato di C ++ 11 e alcuni standard C ++ 14 recentemente introdotti. Controlla il blog ufficiale per maggiori dettagli: http://blogs.msdn.com/b/vcblog/archive/2013/06/27/what-s-new-for-visual-c-developers-in -vs2013-preview.aspx

Aggiornamento:

Da https://news.ycombinator.com/item?id=9434483 (Stephan T Lavavej aka: STL è manutentore del team STL @VC):

  

In particolare, nel 2015 l'implementazione della nostra libreria standard C99 è stata completata, ad eccezione di tgmath.h (non pertinente in C ++) e delle macro pragma CX_LIMITED_RANGE / FP_CONTRACT.

Dai un'occhiata a questo post per i dettagli: http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015 -rc.aspx .

Sono stato coinvolto nel lavoro ISO C ++ (2000-2005) e Microsoft ha dato un contributo significativo a quella lingua. Non c'è dubbio che funzioneranno su C ++ 0x, ma avranno bisogno di un po 'più di tempo rispetto a Intel. Micosoft ha a che fare con una base di codice più ampia che spesso usa le loro estensioni proprietarie. Questo rende semplicemente una base di prova più lunga. Tuttavia, alla fine supporteranno la maggior parte di C ++ 0x (l'esportazione non è ancora amata, o almeno così capisco).

Quando si tratta di ISO C, le persone che lavorano su standard non sono rappresentative per il mercato di Microsoft. I clienti di Microsofts possono utilizzare C ++ 98 se sono solo alla ricerca di una migliore C. Quindi perché Microsoft dovrebbe spendere soldi per C99? Certo, Microsoft ha scelto i pezzi di ciliegio, ma questo è un affare sano. Avrebbero comunque bisogno di quelli per C ++ 0x, quindi perché aspettare?

Purtroppo il supporto MSVC per C è molto carente. Supporta solo la parte di C99 che è un sottoinsieme di C ++ ... il che significa che, ad esempio, è fisicamente impossibile compilare ffmpeg o le sue librerie libav * in MSVC, perché usano molte funzionalità di C99 come gli elementi strutturati. Ciò è aggravato dal fatto che libavcodec richiede anche un compilatore che mantenga l'allineamento dello stack, cosa che MSVC non ha.

Lavoro su x264, che a differenza di ffmpeg fa uno sforzo per supportare MSVC, anche se farlo spesso è stato un incubo in sé e per sé. Non mantiene l'allineamento dello stack anche se si passa esplicitamente la chiamata di funzione più alta attraverso una funzione di allineamento dello stack basata su assembly esplicita, quindi tutte le funzioni che richiedono uno stack allineato devono essere disabilitate. È stato anche molto fastidioso il fatto che io non possa usare Vararrays; forse questo è per il meglio, dal momento che apparentemente GCC li pessimizza massicciamente dal punto di vista delle prestazioni.

Un post più recente sulla compatibilità delle funzionalità C ++ 11 di MSVC per MSVC 2010 e 2011 è ora online .

Microsoft non ha mai espresso alcun reale interesse a tenersi aggiornati con lo standard c99 (che ormai sta invecchiando). Triste per i programmatori C, ma sospetto che Microsoft si preoccupi di più della comunità C ++.

Visual C ++ 2008 SP1 contiene almeno parti di TR1 e, di tanto in tanto, il team di Visual C ++ sta bloggando o parlando di C ++ 0x, quindi suppongo che lo supporteranno a volte nella funzionalità. Non ho letto nulla di ufficiale però.

Informazioni aggiornate su questo:

Esiste ora (10 novembre 2008) un'anteprima tecnica della community " (CTP) di VS2010 che contiene un'anteprima di VC10 che ha alcune parti di C ++ 0x implementate (si noti che VC10 non avrà il set completo di modifiche C ++ 0x implementate anche quando VC10 viene rilasciato ):

http: // www ? .microsoft.com / downloads / Details.aspx FamilyID = 922B4655-93D0-4476-BDA4-94CF5F8D4814 & amp; displaylang = it

Alcuni dettagli sulle novità del CTP VC10:

Come indicato nell'articolo precedente, "Il compilatore Visual C ++ in Microsoft Visual Studio 2010 settembre Community Technology Preview (CTP) contiene il supporto per quattro funzionalità del linguaggio C ++ 0x, vale a dire: "

  • lambdas,
  • auto
  • static_assert,
  • riferimenti di valore

Herb Sutter è il presidente del corpo degli standard ISO C ++ e lavora anche per Microsoft. Non conosco lo standard Visual Studio C - principalmente perché non uso mai il semplice C - ma Microsoft sta sicuramente cercando di spingere in avanti il ??nuovo standard C ++. La prova di ciò è - come menzionato OregonGhost - il TR1 incluso nell'ultima versione di Visual Studio Service.

Il team di Visual C ++ ha pubblicato una tabella di funzionalità C ++ 0x che la versione 2010 supporta in http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c -0x-core-lingua-caratteristiche-a-VC10-the-table.aspx . Dal momento che può esserci un ritardo tra la specifica e l'implementazione, sembra abbastanza ragionevole. Wikipedia ha un bell'articolo sulle specifiche. Non è finito al momento in cui sto scrivendo questo.

Visual C ++ Bloq fornisce molte informazioni su diversi punti di interesse riguardanti il ??supporto di C ++ 11 in VC ++ 11, incluse diverse tabelle

  • Funzionalità del linguaggio C ++ 11
  • Funzionalità del linguaggio C ++ 11: concorrenza
  • Funzionalità del linguaggio C ++ 11: C99
  • Dimensioni contenitore x86 (byte)
  • Dimensioni contenitore x64 (byte)

Blog del team di Visual C ++, Funzionalità C ++ 11 in Visual C ++ 11

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top