Qual é o papel do C ++ hoje?

41

Atualmente, sou estudante de TI e estou me perguntando o que ainda é importante em C ++ hoje. Para que ele é usado? Eu completei o curso básico de C ++ na minha universidade, mas não consigo imaginar onde posso usar meu conhecimento e em que direção devo aprender C ++.

Em outras palavras, o que devo aprender para me tornar um programador de C ++ de sucesso?

Atualmente, estou aprendendo Java apenas porque não vejo claramente em que área o C ++ poderia ser útil hoje, mas sei claramente que tipo de trabalho farei como programador Java. Mas ainda espero que o C ++ não esteja morto.

hades
fonte
2
Este é o meu ponto de vista. C ++ é muito útil em situação de tempo real (e videogames). Eu também uso C ++ para aplicativos de desktop (não se esqueça do Qt) por razões de desempenho.
hosomaki
1
@stign IMO, é provável que acabe por morrer, uma vez que provavelmente chegará um momento em que todos os idiomas hoje estão obsoletos (provavelmente devido a mudanças maciças no hardware que está sendo usado).
23911 Kenneth
17
O C ++ está longe de estar morto (escrevo novo código nele todos os dias) e, se COBOL é alguma indicação, terei trabalho por muitos e muitos anos.
Michael Kohne
2
Dê uma olhada nas Linguagens de Programação Beacon e fazer sua própria conclusão: lextrait.com/vincent/implementations.html
Nemanja Trifunovic
1
Recentemente, assisti a alguns vídeos interessantes no canal 9 da Microsoft . A Microsoft gastou milhões em pesquisa de mercado e, com base em suas pesquisas, está falando de um renascimento em C ++. Veja este vídeo .
grokus

Respostas:

57

O recurso matador do C ++ é o gerenciamento de recursos vinculados ao escopo , SBRM (mais conhecido como " RAII "). É a única linguagem de programação industrial criada em torno desse conceito. No C ++, os tempos de vida de todos os objetos são exatamente conhecidos e os programas C ++ (bem escritos) garantem que os recursos sejam adquiridos e liberados de maneira totalmente determinística. Em comparação, os idiomas coletados pelo lixo ou gerenciados de outra forma não fornecem essas garantias; de fato, os objetos nessas línguas podem persistir após o final de sua vida útil.

Essa é a razão pela qual o C ++ é usado em finanças, videogames, sistemas embarcados e em tempo real de alto desempenho, transporte, fabricação e outros setores em que o determinismo e a precisão são importantes. Não há alternativas.

Concedido, ele foi usado para muito mais tarefas do que isso, e essas tarefas estão sendo perdidas para C # e Python e outras linguagens mais adequadas, mas isso não está afetando seu nicho principal.

Cubbi
fonte
20
Quem usa malloc em C ++, gostaria de bater na cabeça com um objeto rígido. Além disso, existe um recurso menos conhecido do operador newem C ++ chamado posicionamento. Permite reutilizar um espaço de memória atualmente ocupado. Portanto, se alguém quiser evitar (ou minimizar) a fragmentação, poderá fazê-lo em teoria. E previsível não é o mesmo determinístico.
Tamás Szelei 23/03
4
O @Apalala C ++ também possui contagem de referência, mas é muito pior que o SBRM em termos de gerenciamento da vida útil do objeto. Não estou falando apenas de determinismo de RT rígido, estou falando de comportamento determinístico do modelo de objeto.
Cubbi 23/03
4
Quando eu aprendi C ++, o RAII não era particularmente conhecido; Aprendi o gerenciamento de ponteiros novos e excluídos e baseados no cérebro. Portanto, não acho que você possa caracterizá-lo como "construído em torno do conceito". As bibliotecas e outras estruturas de suporte usadas hoje podem ter, mas não a linguagem ou sintaxe principal.
jprete
7
@jprete É verdade que muitos dos pontos fortes do C ++ foram descobertos e não projetados. Este post é sobre o idioma pós-2005.
Cubbi 23/03
5
RAII foi projetado em C ++. Mas a maioria dos programadores de C ++ continuou escrevendo C, substituindo malloc por novo e gratuito por delete.
Kevin cline
40

Existem alguns mercados para C e C ++ (para meu entendimento, embora limitado)

  1. Código existente. C e C ++ têm algumas das maiores bases de código existentes. Um código desse tamanho não pode ser simplesmente descartado apenas porque o "próximo novo idioma quente" chegou. As ligações C são praticamente o padrão de interação entre linguagens na maioria das plataformas, portanto, é possível criar (pelo menos) bibliotecas de wrapper em C ou C ++.
  2. Aplicações de alto desempenho (por exemplo, financiamento de alta frequência). C e C ++ ainda alcançam melhor desempenho geral do que a maioria das outras linguagens de programação. O mais importante é que, em C ++, geralmente cria-se abstrações com itens somente para compiladores, como modelos, que movem a computação do tempo de execução para o tempo de compilação (tornando seu aplicativo geral mais rápido).
  3. (Semelhante a 2) Aplicativos de baixa latência. Os idiomas executados, por exemplo, no CLR ou na JVM geralmente podem ser quase tão rápidos quanto o C ++, dependendo do aplicativo, mas ainda é necessário carregar o CLR ou a JVM na memória antes que o programa possa ser executado. Se você tiver requisitos de inicialização rígidos, isso é importante. EDITAR COMENTÁRIO : Nesse caso, requisitos de latência rígida de qualquer descrição são importantes aqui. Os idiomas executados em máquinas virtuais raramente oferecem limites de tempo difíceis, porque executar, por exemplo, coleta de lixo não é um processo determinístico.
  4. Sistemas embarcados. Alguns sistemas embarcados têm o hardware para executar, por exemplo, a JVM (Android do Google (ok, não é realmente a JVM, mas está próxima), o Blackberry da RIM) ou o CLR (Windows Phone), mas a maioria dos sistemas embarcados não tem o poder de execute idiomas que exijam mais suporte ao tempo de execução do que o exigido para C ou C ++ (que é quase nenhum suporte ao tempo de execução).
  5. Implantação de aplicativos restritos. Às vezes, exigir a instalação da JVM ou CLR é um exagero, se todo o programa tiver apenas algumas centenas de KB. (Por exemplo, a maioria dos programas em que trabalho deve ser implantada como um único .EXEarquivo, sem nenhum tipo de instalador ou algo assim; por isso, não há alternativas)
Billy ONeal
fonte
2
A latência de inicialização não é o único tipo de latência com que se preocupar: requisitos rígidos em tempo real podem ser muito maiores.
23711 greyfade
1
Adicione algo em que você não queira ser preso a um determinado fabricante (C # ou Objective-C) ou não queira que seu idioma desapareça em vários processos judiciais (Java)
Martin Beckett
@greyfade: Isso é o que eu quis dizer com (2), mas concordo que não está claro. Editado. @ Martin: Embora eu ache que essa é uma boa força para C ++, não acho que ela responda à pergunta - que é em quais mercados o C ++ é comumente usado. Também não acho que chamaria o C # bloqueado para um fabricante em particular quando existir uma versão licenciada do <R> BSD </S> (OOPS: É LGPL) do CLR (mono).
Billy ONeal
1
Também 5. Sistemas operacionais e estrutura principal. Você pode fazer muito em uma máquina virtual, mas a máquina virtual ainda precisa ser implementada em C e / ou C ++.
Jan Hudec
1
@ Jan: Sim, seria. Coisas como reflexão e amigos desencadeariam problemas 2-4. O único subconjunto necessário para gravar o coletor de lixo seria algum objeto que represente memória física.
Billy ONeal