logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog


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
rebarba rebarba
  ::::