C++… em 2012?

Na última década nós programadores C++ temos visto cada vez mais tecnologias como Java e .Net serem “empurradas” pela indústria.

Nós vimos o nosso querido Visual Studio, onde costumávamos ter suporte de primeira classe, ser transformado em Visual .Net Studio ao longo dos anos, com um suporte ao C++ subpar e às vezes até negligenciado por parte da Microsoft. Comparando o Intellisense do C# com o do C++ nós vemos a gigantesca discrepância do suporte oferecido entre as duas linguagens. Refactoring? Testes unitários? Snippets? Pff!

Mas quem vem acompanhando de perto os trends na indústria pôde perceber um reposicionamento da Microsoft nos últimos anos quanto ao código nativo, em especial à linguagem C++. A Microsoft voltou a apostar em código nativo nos últimos tempos e isso estava ficando bem claro, principalmente nos canais da comunidade da Microsoft e também nos projetos internos em Redmond, como C++ AMP, Casablanca, Rx nativo e LINQ for C/C++. Mas o que faz a Microsoft “voltar atrás” na questão de código gerenciado vs. nativo?

A verdade é que a Microsoft não está voltando atrás, está indo adiante. Com o advento do C++11 depois de anos de pesquisa e debate pelo comitê, o C++ finalmente repareceu como uma linguagem moderna, produtiva e, claro, eficiente. E apesar de tanto esforço por parte da Microsoft em otimizar a CLR, a verdade é que ainda não temos a mesma eficiência, ou ao menos eficiência comparável ao do código nativo. Classes de aplicações que necessitam de alto desempenho e eficiência como jogos, servidores, bancos de dados, entre diversos outros ainda são escritos em código nativo e muito provavelmente vão continuar assim por muitos anos.

Mas não se trata apenas de manter código legado.

O lançamento do Windows para dispositivos portáteis ou tablets, dispositivos que não são famosos pela sua vida útil de bateria ou poder de processamento e onde cada ciclo de processamento desperdiçado afeta diretamente a experiência do usuário, colocamos novamente em pauta a questão da eficiência. E com o anúncio do WinRT a Microsoft mostrou de vez que o C++ está novamente en vogue em Redmond.

O C++ hoje não é a mesma linguagem que costumava ser há 20 anos, ou mesmo 5 anos atrás. Claro, biblotecas como Boost e Qt vêm empurrando os limites do C++ há algum tempo, mas agora que temos um padrão definido as coisas começam a melhorar em termos de interoperabilidade e produtividade “out of the box”, coisas que vêm sendo criticadas (e com razão!) pelos usuários das linguagens ditas gerenciadas (.Net/Java) há bastante tempo. A verdade é que C++ dormiu no tempo, mas finalmente tivemos uma release digna não apenas de trazer novamente o C++ ao mundo moderno da programação, mas colocá-lo de volta à frente. Ainda falta muita coisa, sim, mas foi um grande (e importante!) passo adiante, e projetos como os supracitados são o caminho para resolvê-los.

Temos agora uma linguagem com um excelente nível de abstração, e isso significa maior produtividade por parte do programador, mas onde não pagamos um alto custo por essa abstração. A linguagem foi desenhada parar ser otimizável de forma que o compilador pode efetivamente remover as diversas camadas de abstração e fornecer um código executável de alto desempenho.

Visando principalmente atender esse novo mercado do Windows a Microsoft está novamente dando a merecida importância ao C++. Isso envolve não apenas a linguagem em si, mas todo o ecossistema de desenvolvimento, incluindo suporte de ferramentas e IDE para aumentar a produtividade dos programadores. Pensando nisso, a nova versão do Visual Studio trás, além da mais nova versão do compilador e mais suporte ao novo padrão da linguagem (C++11), uma melhoria significativa no suporte ao código C++, colocando-a novamente lado-a-lado das linguagens C# e VB.Net. Suporte este que já era esperado há muito tempo, diga-se de passagem!

E com o suporte de primeira classe para desenvolvimento para a nova UI, conhecida como Metro, a Microsoft está apostando também na utilização do DirectX 11 para a criação de aplicações ricas e de alto desempenho (incluindo, mas não restrito a jogos) para dispostivos móveis através de código nativo.

Apesar do chamado “renaissance” do código nativo na Microsoft, não existe nenhuma razão pelo qual código nativo e código gerenciado não possam coexistir lado-a-lado. A idéia, ao contrário do que algumas pessoas mal informadas estão dizendo, não é tornar o .Net obsoleto, e sim atender à demanda do mercado. Aplicações como LOB (Line of Business) continuarão a se beneficiar pela agilidade de desenvolvimento e produtividade oferecidos pelo .Net e as linguagens gerenciadas vão, sem dúvida alguma, continuar liderando esse setor, por exemplo.

O momento nunca foi tão bom para programadores C++, e pelo que tudo indica as coisas vão continuar melhorando. O projeto Casablanca é um excelente exemplo da direção que o C++ tem tomado e onde nós pensamos em ver a linguagem no futuro.

C++ está morto. Vida longa ao C++! ;)

Se você tiver interesse e quiser saber mais:

Welcome Back to C++ (Modern C++)
http://msdn.microsoft.com/en-us/library/hh279654(v=vs.110).aspx

C++11, VC++11 and Beyond
http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/C-11-VC-11-and-Beyond

C++ – A Modern language for Modern Times
http://channel9.msdn.com/Shows/The+Knowledge+Chamber/C-A-Language-for-Modern-Times

Casablanca
http://msdn.microsoft.com/en-us/devlabs/casablanca

Pin It

4 thoughts on “C++… em 2012?

  1. Ivan,

    Acho tudo isso bem interessante mas infelizmente algumas aplicações C++ não podem ser transformadas em Metro e é ai que, na minha opinião, está o maior erro da Microsoft.

    O que temos de novo para aplicações C++ desktop na plataforma Microsoft? Só o compilador VC11 que possui algumas funcionalidades novas: vectorization, AMP e outras. A UI continua a mesma coisa, ou seja, temos que trabalhar com MFC.

    Eu ficaria feliz se pudesse trabalhar com XAML/C++ em aplicações desktop. Existiam rumores sobre o DirectUI, mas nada aconteceu.

    Resumindo, o WinRT é muito legal, mas minhas aplicações continuarão a ser desenvolvidas em MFC.

    Abraços.

    • Oi Ari,

      Muito obrigado pelo seu comentário! :)

      Concordo com você. No geral, diversas aplicações não poderão fazer proveito do Metro (ao menos no curto/médio prazo), e concordo ainda mais com você de que eu gostaria (e muito!) de poder trabalhar com XAML e C++ em aplicações desktop. Realmente isso me parece um erro por parte da Microsoft. Já cogitei usar o XAML através do C++/CLI, mas se for para levar a esse extremo prefiro utilizar uma linguagem “nativa” do .Net, como C#.

      O principal ponto do post, entretanto, é sobre a evolução da linguagem C++, incluindo suporte dos compiladores e ferramentas em torno da linguagem, e principalmente pelo que ela faz melhor: desenvolvimento de infraestrutura e bibliotecas. Muito do que usamos hoje depende do C++ e vai continuar assim por algum tempo. Podemos argumentar que sem C++ frameworks como .Net e linguagens como C# sequer existiriam. Já era hora da Microsoft voltar a dar à linguagem o suporte merecido nas suas ferramentas de desenvolvimento. Outro ponto importante é o fraco suporte de bibliotecas para arquiteturas de software modernas (HTTP, REST, JSON…) Não temos nem uma biblioteca que podemos chamar de padrão de facto para este tipo de cenário, e o pior é que isso já deveria fazer parte do ISO standard…

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>