Pergunta

Eu continuo lendo sobre C99 e C ++ 11 e todas estas coisas totalmente doces que estão sendo adicionados ao padrão de linguagem que pode ser bom para uso algum dia. No entanto, atualmente definhar na terra de escrever C ++ no Visual Studio.

Será que algum do material novo no padrão já são adicionados ao estúdio visual, ou seja Microsoft mais interessado em adicionar novo C # variantes para fazer isso?

Edit: Além da resposta aceita, eu encontrei o Visual C ++ blog da equipe:

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

E, especificamente, este post em que:

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

Muito útil. Obrigado!

Foi útil?

Solução

MS tem uma série de respostas públicas a isso, a maioria deles culpando seus usuários. Como esta:

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

Agora, a equipe compilador Visual C ++ recebe o ocasionalmente questão de saber por que não implementaram C99. É realmente com base no interesse de nossos usuários. Onde temos recebido muitos pedidos para determinadas características C99, nós tentamos implementá-las (ou análogos). Alguns exemplos são macros variádicos, long long, __pragma, __FUNCTION__ e __restrict. Se há outras características C99 que você acharia útil em seu trabalho, avise-nos! Nós não ouvimos falar muito de nossos usuários C, então falar e fazer-se ouvido

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

Hi: infelizmente, a esmagadora feadback que recebemos da maioria dos nossos usuários é que eles prefeririam que nos concentramos em C ++ - 0x em vez de C-99. Temos certas características "escolhidos a dedo" populares C-99 (macros variádicos, long long) mas, além disso nós não são susceptíveis de fazer muito mais no espaço C-99 (pelo menos no curto prazo).

Jonathan Caves

Visual C ++ Compiler Team.

Este é um estado muito triste de coisas, mas também faz sentido se você suspeitar MS quer bloquear usuários em: torna-se muito difícil de porto moderno código baseado em gcc em MSVC, que pelo menos eu acho extremamente dolorosa.

Existe uma solução alternativa, no entanto: Nota que a Intel está muito mais esclarecido sobre este assunto. o compilador Intel C pode lidar com código de C99 e ainda tem as mesmas bandeiras como gcc, tornando muito mais fácil portar o código entre plataformas. Além disso, o compilador Intel trabalha no estúdio visual. Então, por demolição MS compilador que você ainda pode usar o MS IDE que você parece pensar que tem algum tipo de valor, e usar C99 para seu índice dos corações.

Uma abordagem mais sensata é honestamente para passar para Intel CC ou gcc, e usar o Eclipse para o seu ambiente de programação. Portabilidade de código em Windows-Linux-Solaris-AIX-etc geralmente é importante na minha experiência, e que não é de todo suportado por ferramentas de MS, infelizmente.

Outras dicas

Herb Sutter é tanto a cadeira e um membro muito ativo do C ++ comitee padronização, bem como arquiteto de software no Visual Studio da Microsoft.

Ele está entre o autor do modelo de memória do novo C ++ padronizado para C ++ 0x. Por exemplo, os seguintes documentos:

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

tem o nome dele. Então eu acho que a inclusão no Windows de C ++ 0x é assegurada enquanto H. Sutter permanece em Microsoft.

Quanto C99 apenas parcialmente incluído no Visual Studio, eu acho que isso é uma questão de prioridades.

  • A maioria dos recursos C99 interessantes já estão presentes em C ++ (inlining, variável declaração em qualquer lugar, // comentários, etc.) e provavelmente já utilizável em C no Visual Studio (Se apenas fazendo código C dentro do compilador C ++). Veja a minha resposta aqui para uma discussão mais completa sobre C99 apresenta em C ++.
  • C99 aumenta a divergência entre C e C ++, adicionando funcionalidades já existentes em C ++, mas de uma forma incompatível (desculpe, mas o boolean implementação complexa no C99 é risível, na melhor das hipóteses ... See http://david.tribble.com/text/cdiffs.htm para mais informações )
  • A comunidade C no Windows parece inexistente ou não importante o suficiente para ser reconhecido
  • A comunidade C ++ no Windows parece demasiado importante para ser ignorado
  • .NET é a forma como a Microsoft quer que as pessoas programa no Windows. Este meio C #, VB.NET, talvez C ++ / CLI.

Então, eu seria Microsoft, por que eu iria implementar recursos poucas pessoas nunca vai usar quando as mesmas características já são oferecidos em mais idiomas ativos da comunidade já utilizados pela maioria das pessoas?

Conclusão?

C ++ 0x serão incluídos, como extensão do VS 2008, ou na próxima geração (gerações?) Do Visual Studio.

O C99 não apresenta já implementadas não será nos próximos anos, a menos que algo dramático aconteça (um país cheio de desenvolvedores C99 aparece do nada?)

Editar 2011-04-14

Aparentemente, o "país cheio de desenvolvedores C99" já existe: http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6415401
^ _ ^

Ainda assim, o último comentário em: http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6828778 é clara o suficiente, eu acho.

Editar 2012-05-03

Herb Sutter deixou claro que:

  1. O nosso principal objectivo é apoiar "a maioria de C99 / C11 que é um subconjunto do ISO C ++ 98 / C ++ 11".
  2. Também por razões históricas enviar um compilador C90 que aceita (apenas) C90 e não C ++
  3. Nós não planejamos oferecer suporte a recursos ISO C que não fazem parte de qualquer C90 ou ISO C ++.

Os links Adicionar mensagem de blog e outras explicações para essas decisões.

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

A partir VC2013 visualização 1 , C99, um conjunto mais diversificado de C ++ 11 e alguns recém-introduzido C ++ 14 padrões são suportados. Saída do blog oficial para mais detalhes: http://blogs.msdn.com/b/vcblog/archive/2013/06/27/what-s-new-for-visual-c-developers-in -vs2013-preview.aspx

Update:

A partir https://news.ycombinator.com/item?id=9434483 (Stephan T Lavavej aka: STL é mantenedor da equipe STL @VC):

Especificamente, em 2015 a nossa implementação biblioteca padrão C99 é completo, exceto para tgmath.h (irrelevante em C ++) eo CX_LIMITED_RANGE / FP_CONTRACT pragma macros.

Verifique este post para fora para detalhes: http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015 -rc.aspx .

Eu estive envolvido na ISO C ++ trabalho (2000-2005), e Microsoft fizeram contribuições significativas para esse idioma. Não há dúvida de que eles vão trabalhar em C ++ 0x, mas eles precisam de um pouco mais de tempo do que dizem Intel. Micosoft tem que lidar com uma base de código maior que muitas vezes usa suas extensões proprietárias. Isso simplesmente faz para um testfase mais tempo. No entanto, eles vão apoiar a maioria de C ++ 0x, eventualmente, (exportação ainda não é amado, porém, ou então eu entendo).

Quando se trata de ISO C, as pessoas que trabalham no padrão não são representativos para o mercado de Microsofts. Microsofts clientes podem usar C ++ 98 se eles estão apenas à procura de uma melhor C. Então, por que a Microsoft gastar dinheiro em C99? Claro, Microsoft peças escolhidos a dedo, mas isso é negócio sã. Eles precisariam aqueles para C ++ 0x de qualquer maneira, então por que esperar?

Suporte MSVC para C é, infelizmente, muito carente. Ele suporta apenas a parte do C99 que é um subconjunto do C ++ ... o que significa que, por exemplo, é fisicamente impossível para compilar ffmpeg ou seu libav * bibliotecas em MSVC, porque eles usam muitos C99 apresenta como elementos struct nomeados. Isto é agravado pelo fato de que libavcodec também requer um compilador que mantém o alinhamento de pilha, que MSVC não.

Eu trabalho em x264, que ffmpeg ao contrário faz fazer um esforço para apoiar MSVC, embora isso tem sido muitas vezes um pesadelo em si. Não manter o alinhamento pilha mesmo se você passar explicitamente a maior chamada de função através de uma função de alinhamento pilha à base de montagem explícita, de modo que todas as funções que requerem uma pilha alinhada tem que ser desativado. A sua também foi muito chato que eu não posso usar vararrays qualquer um; talvez este seja o melhor, já que, aparentemente GCC maciçamente pessimizes-los em termos de performance.

A mais recente post sobre o MSVC C ++ compatibilidade 11 recurso para MSVC 2010 e 2011 é online agora .

A Microsoft nunca manifestou qualquer interesse real em manter-se a velocidade com a c99-padrão (que está ficando velho agora). Triste para C-programadores, mas eu suspeito que cuida da Microsoft mais para o C ++ -. Comunidade

Visual C ++ 2008 SP1 contém peças de TR1, pelo menos, e de tempos em tempos, a equipe do Visual C ++ é blogar ou falar sobre C ++ 0x, então eu acho que eles vão apoiá-lo em algum momento no recurso. Eu não li nada oficial embora.

A informação actualizada sobre o seguinte:

Existe agora (10 de novembro de 2008) a "Community Tech Preview" (CTP) de VS2010 que contém uma prévia do VC10 que tem alguns partes do C ++ 0x implementado (note que VC10 vai não tem o conjunto completo de C ++ 0x mudanças implementadas, mesmo quando VC10 é liberado):

http: // www .microsoft.com / download / details.aspx? FamilyId = 922B4655-93D0-4476-BDA4-94CF5F8D4814 & displaylang = en

Alguns detalhes sobre o que há de novo na VC10 CTP:

Como observado no artigo anterior, "O compilador Visual C ++ no Technology Preview Microsoft Visual Studio 2010 Comunidade de Setembro (CTP) contém suporte para quatro características da linguagem C ++ 0x, a saber:"

  • lambdas,
  • auto,
  • static_assert,
  • referências rvalue

Herb Sutter é o presidente do órgão de padrões ++ ISO C e também trabalha para a Microsoft. Eu não sei sobre o padrão Visual Studio C - principalmente porque eu nunca use plain C - mas a Microsoft está certo de tentar empurrar a nova frente C ++ padrão. Evidência disso é - como OregonGhost mencionado -. A TR1 que está incluído na mais recente Visual Studio Service lançamento

O time Visual C ++ colocou para fora uma mesa de C ++ 0x características que os 2010 suportes de libertação em http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c -0x-core de língua apresenta-in-VC10-the-table.aspx . Como pode haver um intervalo de tempo entre a especificação e implementação, que parece bastante razoável. Wikipedia tem um bom artigo sobre o spec. Não é terminado no momento em que estou escrevendo isso.

A C ++ Bloq Visual fornece uma série de informações sobre vários pontos interesing sobre o apoio do C ++ 11 em VC ++ 11, incluindo várias mesas

  • C ++ 11 Núcleo Idioma Características
  • C ++ 11 Núcleo Idioma Características: Simultaneidade
  • C ++ 11 Núcleo Idioma Características: C99
  • x86 tamanhos de recipientes (bytes)
  • x64 tamanhos de recipientes (bytes)

Visual blog da equipe do C ++, 11 C Características ++ no Visual C ++ 11

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top