logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog

follow us in feedly

11 anos depois: C++
Ah, o C++... A linguagem que desperta amor e ódio, excitação e pavor. A linguagem que nunca passa desapercebida, a linguagem sobre qual todos gostam de falar, todos gostam de opinar. Afinal, a maioria do software que as pessoas usam é feita em C++. Não dá pra não ter uma opinião.

Só pra recordar a história, C++ foi só uma das linguagens orientadas a objetos que nasceram nos anos 80, junto com o SmallTalk. Ela venceu a batalha pela mente dos programadores por um motivo bem pragmático: nasceu compatível com a linguagem C desde o primeiro dia. As primeiras versões do C++ foram feitas usando o pré processador do C, para fazer o que era chamado de C com classes. E as mesmas características continuavam: você tinha construções de alto nível mas era possível até escrever assembly dentro do seu código fonte. Você tinha funções e um sistema de tipos mas podia manipular a memória diretamente usando um void*.

Em 2004, ano de fundação do 1bit.com.br, nós tínhamos o C++98, um padrão ISO. A comunidade de forncedores de compiladores era uma bando de competidores e a qualidade das implementações variava bastante. O Microsoft Visual C++ tinha uma boa IDE, um suporte horrendamente péssimo ao padrão ISO mas um compilador atendia muito bem as necessidades dos usuários Windows (onde eu me incluo). A Borland tinha o C++ Builder, cujo compilador era tão cheio de bugs que até hoje o código fonte do Boost é cheio de #ifdefs para contorná-los. No mundo Linux o GCC era um bom compilador que atendia o padrão corretamente, talvez o único compilador mainstream a fazer isso (não, o Comeau não conta).

O cenário de desenvolvimento mudou bastante nesses 11 anos. Em 2001 a Microsoft apresentou ao mundo o C#, uma linguagem inspirada no Java, que por sua vez era inspirada no C++. Em 5 anos de existência o C# evoluiu mais que todas as outras linguagens do mundo juntas. E isso foi, claro, muito bom para os usuários de C# - onde eu me incluo. Mas acabou sendo ótimo para os usuários de todas as outras linguagens, já que a rápida evolução do C# gerou uma imensa pressão no mercado. Até o Java, que já estava virando o COBOL do século 21, acabou evoluindo. O Java apresentou seu generics meia boca (que por dentro ainda usa Object e boxing/unboxing) e os responsáveis pelo C++ dentro do comitê ISO (principalmente o Herb Sutter, que foi para Microsoft depois de um tempo) resolveram acelerar o C++. É isso mesmo, se você gosta de C++11, C++14, C++17 e tudo mais agradeça à Microsoft e ao C#.

Foi assim que o C++ evoluiu, acrescentando uma tonelada de novos recursos, mas sem quebrar a compatibilidade com os fontes antigos. Hoje em dia o C++ é uma linguagem moderna, onde gerenciamento de memória manual pode ser coisa do passado. Mas toda a bagagem de mais de 30 anos ainda está ali. Você pode deixar a linguagem trabalhar para você, mas tem a opção de continuar sendo um maloqueiro.

(Inclusive foi essa a motivação para que o Rob Pike criasse o Go. Houve uma apresentação sobre C++11 no Google. Ele assistiu a apresentação e pensou "Sério que vocês querem resolver o C++ COLOCANDO MAIS COISAS NELE?" Ele saiu da reunião e começou a esboçar uma nova linguagem que virou o Go. Linguagem essa que eu não posso usar na Intelitrader por causa da porcaria do Garbage Collector...)

Então veio o C++0x, onde o x seria, junto o com o zero à esquerda, o ano de lançamento do novo padrão. Atrasou (como todo projeto de software) e virou o C++11, o grande upgrade que a linguagem precisava. Auto, constexpr, lambda, modelo de memória, initializer list e uma nova sintaxe para definir classes e estruturas. A lista de coisas novas é gigantesca. Além das melhorias na linguagem, várias libs do Boost foram incorporadas ao padrão, como a shared_ptr, tuple, thread e regex. Nasceu então o tal do Modern C++.

Hoje o C++ suporta vários paradgimas: programação procedural, orientada a objetos, genérica e até funcional. Sim, várias construções de linguagens funcionais se tornaram possíveis com auto e lambda. O Bartosz Milewski escreve bastante sobre programação funcional em C++.

Ironicamente, enquanto o C++ evoluiu bastante nesses 11 anos, meu site continua usando PHP e MySql (que como diz meu amigo Gianni, é um bando de dados)...

Em 13/08/2015 08:01, por Rodrigo Strauss


  
 
 
Comentários
Algo a dizer?
Nome:


Site:


E-mail:


Escreva o número vinte e seis:


 Não mostre meu e-mail no site, não serve pra nada mesmo...

Comentário





Os comentários devem ser sobre assuntos relativos ao post, eu provavelmente apagarei comentários totalmente offtopic. Se quiser me enviar uma mensagem, use o formulário de contato. E não esqueça: isso é um site pessoal e eu me reservo o direito de apagar qualquer comentário ofensivo ou inapropriado.
rebarba rebarba
  ::::