O C ++ moderno está substituindo o C #? A Microsoft está incentivando os desenvolvedores a adotar C ++? [fechadas]

91

Eu ouvi falar sobre a popularidade moderna do C ++ e algumas palestras sobre a migração de volta para C ++ do C # ou de outras linguagens do tipo C.

Conheço os recursos do C ++ 11, mas gostaria de ouvir suas experiências, principalmente dos desenvolvedores que migraram do C # para o C ++.

Mais importante, a Microsoft incentiva os desenvolvedores a usar C ++? Se sim, por que?

Amir Karimi
fonte
16
Eu acho que o C ++ sempre foi uma linguagem mais amplamente usada porque é mais bem estabelecida e facilmente transportável que o C #. Eu não acho que está substituindo C #. Para aplicativos de negócios baseados em Windows, o C # ainda será muito procurado como uma linguagem fácil de obter . C ++ nunca realmente foi embora. Apenas teve um tipo de ressurgimento recentemente.
KChaloux
2
Espero que não. Java e C # foram benéficos para os desenvolvedores e ainda estão evoluindo.
Jesse C. Slicer
4
C ++ e C # são apenas ferramentas : escolha a melhor para o trabalho específico. por exemplo, se você deseja escrever código de plataforma cruzada, pode usar C ++; se você quiser aplicativos pequenos que não exijam instalação em tempo de execução do .NET, convém usar C ++ (com CRT vinculado estaticamente); se você deseja desenvolver alguma ferramenta GUI para Windows de maneira RAD, convém usar C # e WinForms; etc.
Mr.C64
6
É uma boa pergunta, talvez precise de reformulação. Não é outro idioma A vs. idioma B. Em vez disso, é especificamente quais são as posições da Microsoft, por que elas mudaram e para onde estão indo, porque a realidade é que a MS é grande o suficiente para que, quando exercem influência, pelo menos as montanhas menores tendam a mover. E sim, neste caso, eles estão definitivamente influenciando.
DXM
9
Vamos, por favor, mantenha civilizado todos. A grosseria não será tolerada.
maple_shaft

Respostas:

95

Sim, suas suspeitas estão corretas. A Microsoft está pressionando o C ++ para voltar e se tornar mais popular.

Não consigo encontrá-lo agora, mas há um tempo vi uma apresentação de um dos grandes nomes da Microsoft e tudo foi voltado para desenvolvedores, e era sobre o lançamento do Windows 8 e, especialmente, do WinRT (também o substituto para o .NET framework) como API do Win32).

Ele tinha uma linha do tempo que explicava como várias pressões estavam afetando a tecnologia popular em determinados momentos. Então, a princípio, as pessoas queriam velocidade, então todas codificadas em C / C ++ (duas linguagens separadas). À medida que o hardware ficava mais rápido, o foco se afastava da velocidade de execução e mais para a velocidade de desenvolvimento, de modo que as linguagens de nível superior se tornaram muito mais populares.

No entanto, agora o foco está se voltando mais para computadores móveis e baseados em ARM (o Windows 8 é o primeiro lançamento do Windows a ser compilado para ARM) e muitos acreditam que se tornarão muito mais populares e, para alguns, substituirão completamente a área de trabalho. Portanto, o foco (pelo menos aos olhos da Microsoft) está de volta ao C ++, porque agora nos preocupamos com a duração da bateria. Código de nível superior = mais instruções = mais suco necessário.

Para dar suporte a essa transição de volta ao C ++, eles introduziram uma API de programação do Windows 8 completamente nova, chamada WinRT (a última vez que verifiquei, esse era o nome). Essa API segue o tema do .NET Framework no escopo de funcionalidade que fornece, mas estará disponível para qualquer pessoa que codifique em C ++ (via interfaces COM), em C # ou mesmo em Javascript para aqueles que desejam escrever aplicativos HTML 5 / Javascript. Eles também estão trazendo o XAML (tecnologia usada no WPF, sua mais nova estrutura de interface do usuário) para estar disponível também em C ++.

Então, para mim, isso indica que há definitivamente mais foco em C ++ na Microsoft do que no passado.

ATUALIZAÇÃO # 1:

Como acabei de receber um distintivo de 'boa resposta', pensei que talvez devesse voltar e a) esclarecer algumas coisas eb) fazer a polícia de verificação de fatos feliz porque, como todos sabemos nos fóruns de tecnologia, algo impreciso pode resultar em guerras que duram anos.

  1. O WinRT não é um substituto para o .NET framework, mas é mais uma alternativa que os desenvolvedores do MS Windows agora têm e o MS está pressionando fortemente as pessoas a seguir nessa direção. Parece (mantenha suas chamas se isso não for 100% preciso) que o WinRT foi direcionado principalmente para aplicativos de interface de usuário modernos, embora aplicativos de desktop comuns também possam tirar proveito disso. Dito isto, a MS está pressionando fortemente para que as pessoas passem a escrever a) aplicativos modernos da interface do usuário eb) começar a usar o WinRT, de modo que o saldo das mudanças de porcentagem de pessoas que usam o .NET framework provavelmente cairá.

  2. O C ++ NUNCA substituirá linguagens de nível superior, como C # ou python. Assim como essas linguagens, NUNCA substituirá o C ++. Essa foi provavelmente a parte mais controversa da pergunta do OP. Mas é tudo uma questão de equilíbrio e os fatos são os seguintes:

    • A comunidade C ++ (com o MS sendo grande parte dela) está pressionando por um forte retorno para posicionar o C ++ como uma boa linguagem para dispositivos de baixa potência, cuja participação de mercado vem subindo loucamente ultimamente. Se você não acredita em mim, procure a série de palestras "GoingNative" que começou no ano passado.
    • Com todo o esforço e influência da Microsoft, o uso do C ++ definitivamente aumentará, enquanto o C # pode diminuir um pouco o que. É isso que a MS está buscando e, como eu disse nos comentários acima, quando a MS coloca seu capital por trás de uma idéia, eles mudam grande parte da indústria. Provavelmente vou receber uma resposta de um cara que argumentará: "que setor, eu sempre estive no Linux" e para isso minha única resposta é: acorde! Sim, existem outros sistemas operacionais por aí, mas a maioria do mercado de desktops, tanto para consumidores quanto para empresas, atualmente é o Windows e qualquer desenvolvedor sério que deseje maximizar o valor de seu tempo seria muito tolo para não atingir esse pedaço do mercado de desktops.

Então, em conclusão: Sim, a MS está pressionando para que o C ++ volte, provavelmente sua popularidade aumentará. Não, o C ++ nunca substituirá o C #.

Atualização # 2:

Não sei por que, mas a comunidade técnica tende a ver as coisas em termos absolutos de preto / branco quando a realidade está cheia de tons de cinza. Esta é uma resposta a vários novos comentários que foram adicionados a esta postagem:

  1. O .NET framework não desaparecerá tão cedo (ou nunca). Praticamente todas as tecnologias que o Windows possuía desde os anos 90 ainda existem de alguma forma ou moda. Portanto, para aqueles que estão tão ligados ao framework .NET: a) não se preocupe com o desaparecimento eb) pare de argumentar a seu favor como se sua vida dependesse disso, sua API está segura.

  2. O WinRT reimplementa muitas funcionalidades que anteriormente eram fornecidas pelas APIs de estrutura do Win32 e .NET. As pessoas que desejam essa funcionalidade terão uma opção se quiserem usar o WinRT, a estrutura .NET ou continuar com a API do Win32 (que também não está morta). Se o WinRT não suporta a criação fácil de aplicativos da Web hoje, há uma chance muito boa de que ele os suporte no futuro.

A posição que a Microsoft anunciou é que o WinRT é uma estrutura grande que deu à Microsoft a chance de começar com uma lista limpa e criou uma API usando as lições aprendidas na API do Win32 e na própria estrutura .NET. Eu tentei procurar esse vídeo e ainda não consigo encontrá-lo, mas uma das coisas que o orador mencionou é que há certas áreas do .NET framework que poderiam ter sido definidas melhor / mais simples / mais limpas e o WinRT expõe a mesma funcionalidade nessa nova interface mais limpa.

DXM
fonte
7
Foi a palestra de Herb Sutter em C ++ e além, intitulada "Por que C ++?" Há um vídeo dele no Canal 9, embora eu esteja tendo problemas para acessá-lo no momento, provavelmente porque Redmond está realizando um grande evento de streaming. Sua lógica faz sentido, mas esse tipo de declaração realmente precisa de algumas referências, pois isso representaria uma grande mudança estratégica para a Microsoft e qualquer outra pessoa que desenvolva software com os produtos da Microsoft.
Robert Harvey
13
O WinRT não substitui o .NET. Mantenha seus fatos sob controle, por favor.
Euphoric
4
@Euphoric: Em outras palavras, o .NET framework nunca foi um substituto para a API do Win32. Ao mesmo tempo, quando o C # foi lançado, muitas pessoas mudaram e se esqueceram de fazer chamadas de função no estilo C para DLLs do Windows. A Microsoft está pressionando pelo mesmo switch agora. Então, sim, o .NET framework continuará existindo sob o capô do WinRT e com certeza você ainda poderá usar o .NET Framework, mas a MS está pressionando as pessoas a mudarem para o novo framework.
DXM
21
@gbjbaanb - Isso é 100% falso. Primeiro, o ALL .NET sempre foi um invólucro muito bom para a biblioteca Win32. Segundo, existem apenas pequenas diferenças entre o Full.NET Profile e o 'WinRT' .NET Profile, as principais diferenças, são muitas coisas que foram mal implementadas há 10 a 15 anos, foram removidas e substituídas por um código melhor projetado. Até que eles se livrem da biblioteca Win32 todos juntos. O .NET veio para ficar. Seu comentário mostra uma total e completa falta de conhecimento em relação às linguagens .NET e C #.
#
6
Sem mencionar que, para aplicativos da Web, o .NET é ótimo. Se alguma vez fosse um 'substituto', seria para aplicativos de desktop, e não para aplicativos da Web.
George Stocker
22

Não, o Windows 8 tem tudo a ver com usar o idioma que você precisa (ou conhece) para fazer o trabalho. JavaScript, linguagens .Net (C #) e C / C ++ são todos suportados igualmente.

Nada está sendo substituído e, no final, depende dos desenvolvedores. Há, no entanto, um esforço para melhorar a vida útil da bateria, o que o WinRT facilita.

A exceção são os jogos nos quais o C ++ está obtendo mais suporte, especialmente no Windows Phone 8, enquanto os idiomas gerenciados não têm suporte nativo (também conhecido como xna).

Daniel Little
fonte
1
A Microsoft está desesperada para que o Windows 8 seja adotado no mercado de smartphones e tablets. A Apple obtém mais receita apenas do iPhone do que a Microsoft no total. Um obstáculo é que existem muito poucos aplicativos para Windows phone / tablet em comparação com as plataformas estabelecidas. Então, eles desejam possibilitar a criação de um aplicativo, no idioma favorito deles. C #, C ++ ou JavaScript.
21468 MarkJ em
Não sei por que eles decidiram abandonar o suporte nativo a c / c ++ a partir do windows phone 7. Desde aquele dia, o windows + windows mobile passou a ser a principal plataforma de 90% da nossa empresa, passando a 10% de importância. 10% é apenas por causa das melhores ferramentas de desenvolvimento (visual studio); caso contrário, não fabricamos mais produtos, mesmo para o Windows Desktop.
Pavel P
1
@Pavel Eu não tenho certeza do que você está dizendo lá ..
Daniel Little
@Pavel - eles retiraram o código nativo do WinPhone7 e depois o código gerenciado do WinPhone8. Talvez você possa visitar novamente a plataforma agora ou simplesmente ignorá-la até / se ela obtiver uma participação de mercado muito maior.
Gbjbaanb
19

Conheço os recursos do C ++ 11, mas gostaria de ouvir suas experiências

O pensamento de que as pessoas preferem C ++ em vez de C # (ou praticamente qualquer outro alterador pós-1990 [não-php]) para programação de uso geral é ridículo . O C ++ 11 adiciona alguns bons bits ausentes, mas ainda está pegando as pernas de um cachorro .

O C ++ possui alguns nichos bons e ainda é a melhor opção em algumas plataformas com suporte limitado ao compilador. Mas não, o C ++ moderno não está nem perto de substituir algo, exceto C ++ quebrado e antiquado.

Telastyn
fonte
31
Leia o que você está escrevendo. Você está declarando abertamente que o uso do C ++ para programação de uso geral em C # é ridículo . Isso é sinceramente um fato em que você acredita, ou é apenas sua opinião exagerada?
Zxcdw 31/10/12
38
@zxcdw - Se eu tiver 100 problemas gerais de programação, executarei ~ 90 deles com mais rapidez, melhor, com menos erros usando C # ou Java ou Python ou Scala ou ... E isso está sendo generoso. Este é o ponto de vista comum de praticamente todos os programadores profissionais que conheço; mesmo aqueles que usam C ++ como idioma principal.
Telastyn 31/10/12
33
@zxcdw: Eu sou um desenvolvedor de C ++ hardcore. Eu pratico C ++ há mais de 15 anos e trabalhei principalmente em aplicativos de back-end que precisam de C ++. Eu estive em todo STL e metade do Boost. Para consternação da minha equipe, introduzi a metaprogramação de modelos em alguns lugares que achava que mereciam. O ponto que estou tentando destacar é que eu amo C ++ e trabalho com ele. Dito isso, concordo com Telastyn, se eu tiver um problema geral que não exija o que C ++ tem a oferecer, prefiro pegar C # ou até Python. Eles são idiomas de nível superior e você simplesmente faz as coisas mais rapidamente. Isso é verdade, pelo menos para Win devs
DXM
5
@MadKeithV - Se eu não estivesse trabalhando em um aplicativo C # que estivesse sendo executado no OSX, iOS e Android, eu poderia dar um pouco mais de peso a esse argumento de plataforma cruzada. Mesmo ignorando isso, as linguagens não C # listadas são quase sempre melhores do que o C ++ quando a plataforma cruzada é uma grande preocupação. O C ++ 11 não está fazendo muito para afastar essas opções.
Telastyn 31/10/12
14
Se tudo o que você tem é um martelo, tudo parece um prego. As melhorias no C ++ 11 não diminuirão o impacto generalizado do C # e de outras linguagens similares, mas talvez mais agnósticas de plataforma, mas manterão o navio à tona. O maior ponto de venda do C ++ 11 é que ele pode ser a linguagem de ponta a ponta de um sistema que vasculha as profundezas de um sistema, mas oferece a oportunidade de mexer com abstrações de ordem superior.
31412 JustinC
2

DXM escreveu:

Portanto, o foco (pelo menos aos olhos da Microsoft) está de volta ao C ++, porque agora nos preocupamos com a duração da bateria. Código de nível superior = mais instruções = mais suco necessário.

De acordo com essas palavras, escolher Java como linguagem / estrutura principal para o Android do Google foi um erro. Não era. Linguagem de nível superior geralmente significa fazer as coisas com mais rapidez e acho que é a coisa mais importante para a Microsoft e o Google. Quanto mais e melhores aplicativos são criados para a plataforma, maior é o lucro do produtor do SO.

Por outro lado, ainda há muitos softwares para Windows escritos em C ++, portanto, forçar esses desenvolvedores a mudarem para C # / JavaScript / qualquer outra coisa seria insano. A Microsoft se concentra em dar a possibilidade de desenvolver aplicativos Win8 para o maior número possível de desenvolvedores, por isso, na minha opinião, eles decidiram oferecer suporte a C ++ e JavaScript na pilha de desenvolvimento do Win8.

rotman
fonte
5
Java foi um erro. Se você deseja desempenho bruto (e costuma fazer isso), deseja escrever em C / C ++. Se você deseja produtividade do desenvolvedor, deseja uma linguagem de nível superior, como Python ou PHP ou Ruby ou JS. Java (e C #) são sistemas intermediários que não oferecem o melhor desempenho nem a melhor produtividade. Como é, o C ++ não é tão ruim - você pode obter uma boa produtividade quando souber o que está fazendo.
Gbjbaanb
8
@gbjbaanb Eu tenho sentimentos confusos sobre o seu comentário: há alguns anos, colocar Java e C # no mesmo nível de abstração faria sentido, mas a introdução do LINQ, expressões lambda e recursos de programação assíncrona nas versões mais recentes do .NET moveu o C # para um nível superior (o Java recuperará a falta de programação funcional no JDK8, mas isso ainda está no estágio de acesso inicial).
precisa saber é o seguinte
2
@gbjbaanb, felizmente, o WCF é apenas uma pequena parte do .NET, e generaliza que a aplicação à linguagem C # é inválida. Você realmente usou os novos recursos desde o .NET 3? Como o VS não é um ambiente de desenvolvimento tão bom (de fato, é realmente irritante sem o ReSharper). Portanto, considerando que este site (e toda a rede SE) é construído com C #, seu comentário parece um pouco impreciso.
precisa saber é o seguinte
1
@rotman Por favor, não responda às respostas de outras pessoas em sua própria resposta. As respostas devem abordar apenas a questão original :)
Andres F.
6
@gbjbaanb: Eu diria que foi uma afirmação sem evidência de que os sistemas intermediários que não oferecem o melhor desempenho ou a melhor produtividade são um erro. Tendo em conta que o desempenho ea produtividade são ambos importantes, a melhor solução é aquela que equilibra os dois, e uma escolha de meia-chão como Java ou C # é uma excelente escolha para muitos casos de uso.
precisa saber é o seguinte
2

O C ++ ainda possui arquivos de cabeçalho, pré-processadores flexíveis (#define), ... coisas que algumas pessoas consideram esses recursos 'ruins' ou 'difíceis de gerenciar'.

C #, por outro lado, usa metadados, sem necessidade de gravar e manter arquivos de cabeçalho.

Sobre a Microsoft adicionando mais recursos ao C ++: Não é um problema.

Todo compilador C ++ está adicionando mais recursos, incluindo recursos do C ++ 11. O GCC também é.

ceder
fonte
7
Se tudo o que você pode dizer mal sobre C ++ são bem os arquivos de cabeçalho, você indiretamente provou o argumento. Posso enumerar uma série de problemas graves de C #, não-portabilidade, não determinística, em tempo de execução sobrecarga, proprietário, etc.
user805547
1
Use a ferramenta certa para o trabalho certo. O C ++ é ótimo em empresas como a Intel, pois vários códigos não gerenciados precisam de baixo nível para os projetos de medalhas, mas se você precisar de um site / serviço da web que toda empresa PRECISA, do que boa sorte com o C ++ para isso!
quer
1

Pode ser apenas eu, mas vejo um uso muito mais simples de C do que C ++.

O fato de o C ++ ter engolido todo o C simples torna difícil inferir quem está usando o quê.

Mas há muito mais projetos de código aberto em C que C ++.

Minha opinião é que se você precisar de velocidade próxima ao metal, use C. Se você precisar de flexibilidade e capacidade de gerenciamento com desempenho razoável, use C # ou Java. Se você deseja um design limpo, use rapidamente Python, Scala, Groovy ou qualquer um dos vários idiomas completos.

James Anderson
fonte
2
Não, acho que você está errado aqui. C ++, se você desabilitar exceções, é tão próximo do metal quanto C, desde que você saiba o que está fazendo. O problema é ABIs. No C ++, a situação ainda precisa ser resolvida, eles estão trabalhando nisso. Feito isso, acho que não haverá muito apelo para usar C em vez de C ++, quando na verdade o C ++ possui uma melhor verificação de erros e é um superconjunto, portanto, a ferramenta seria superior nesse ponto.
Germán Diago
0

O c ++ não está substituindo o c #. Vamos ver onde a linguagem c ++ é usada. É usado quando há necessidade de alto desempenho, para escrever bibliotecas de middleware, acesso de baixo nível e para escrever código para dispositivos com recursos limitados. Embora você possa usar c # para alguns deles, o c ++ é mais adequado para eles. O impulso da Microsoft para c ++ está altamente relacionado ao seu grande impulso no espaço móvel. Ninguém solicitará que você escreva seu próximo aplicativo Web em c ++. Mas com Qt, o argumento da produtividade não pode ser feito em relação ao c ++. Mas acho que muitas pessoas não estão familiarizadas com o Qt.

Jaak
fonte
O C ++ ainda é muito usado no desenvolvimento de software comercial não vertical do Windows.
bit-twiddler
1
C ++ é como a ferramenta mais profissional que você pode usar para escrever software. Mas você precisa ter habilidade para escrever um bom código, pois é bastante gratuito e tem algumas peculiaridades para compatibilidade com versões anteriores. Eu acho que é adequado para todo tipo de software, exceto scripts, na verdade. O problema é a curva de aprendizado. Com bibliotecas modernas, é muito competente, mesmo em produtividade. E pense que, se o aplicativo for bem-sucedido, você deve portá-lo. A portabilidade é mais fácil com as bases de código C / C ++, para disponibilizar o compilador. A lista de software escrito em C ++ é interminável: Amazon, Google, Dropbox, telecom, jogos, facebook ...
Germán Diago
-4

Não, o C ++ não pode substituir o C # porque todos os aplicativos que não são do Direct3D Windows Phone 8 devem ser desenvolvidos com C #. Você não pode desenvolver e publicar aplicativos na loja de aplicativos wp8 usando C ++ ou HTML5 / Javascript. E enquanto a Microsoft não remover essa restrição, o C ++ não substituirá nada. Como resultado, tenho certeza de que poucas pessoas desenvolverão o WP8. Pobre Nokia, perdendo mais uma vez.

Aqui está o trecho do microsoft dev center :

O Windows Phone 8 não suporta a interface do usuário XAML com o modelo de aplicativo code-behind C ++ suportado pelos aplicativos da Windows Store.

Ainda outra:

Isso significa que não posso usar C ++ com XAML para desenvolver um aplicativo no Windows PHone 8; estou restrito a usar C # + XAML?

Está correto. XAML pode ser usado apenas com C #. C ++ pode ser usado para um componente WinRT usado pelo projeto C #.

Até os MVPs da Microsoft alegam que esse boato é uma desinformação deliberada feita pela própria Microsoft:

Adoro o que a Microsoft está fazendo com o WinRT e o Windows Phone 8, mas desejo que eles não exagerem em parte, pois isso frustrará os usuários assim que descobrirem a verdade completamente sobre o assunto.

E esse marketing errado deliberado desperdiça os meses das pessoas :

Teria sido bom conhecer isso há meses, antes de seguir a rota de código nativo com meu aplicativo Metro.

Özgür
fonte
1
Seus links afirmam que você pode usar o C ++ para desenvolvimento do WP8, e é apenas o XAML que requer C #. Além disso, o Direct3D é suportado apenas por C ++.
Lee
@ Lee, você pode desenvolver aplicativos que não sejam do Direct3D sem usar o C # para WP8?
Özgür