Por que C++ não tem um “garbage collector”? Porque código C++ não produz “garbage”!
Bjarne Stroustrup

Se C++ fosse uma pessoa, seria uma jovem senhora com pouco mais de 40 anos. Herdeira de família tradicional, é a filha mais famosa da linguagem C.

De uma época onde a memória dos computadores não passava de uma vaga lembrança, foi construída com ênfase em excelência na gestão de recursos, acesso irrestrito a máquina, obviamente cobrando um preço, para muitos alto, pelo controle total. Tudo bem, afinal, grandes poderes exigem grandes responsabilidades.

Adolescente rebelde, C++, que nasceu orientada a objetos (o nome original da linguagem era C com classes), sempre flertou com outros paradigmas. Viveu uma certa crise de identidade até o início da década de 1990 quando, finalmente, recebeu uma especificação padronizada.

De personalidade difícil, é temida por muitos e fez com que muita gente perdesse noites de sono tentando encontrar “vazamentos de memória” causados por comunicação nem sempre eficaz (código ruim não tolerado nem facilitado pela linguagem).

Mais madura, ao longo dos anos, hoje em dia, C++ afirma que está moderna e, sem dúvidas, há bons motivos para acreditar que isso seja verdade. Entretanto, muita gente que nem a conhece tão bem, insiste em dizer que ela está acabada. Maldade!

C++ é a rainha das linguagens de programação para system programming e, junto com sua mãe, a linguagem C, reina absoluta. Embora, contestada de tempos em tempos, está longe de perder sua majestade. Quem acha que ela está sob risco definitivamente não a conhece direito.

Neste livro, apresentarei melhor C++, em sua melhor versão, a moderna. Para te tornar “da família”, também falaremos, com respeito e deferência, sobre a mãe dela, a linguagem C. Prepare-se para momentos de amor e ódio e, principalmente, para aprender a fazer coisas que só C++ te permite fazer.

Um pouquinho de história

C++ evoluiu bastante em suas pouco mais de quatro décadas de existência. Ela começou a ser projetada em 1979, na Bell Labs.

No princípio, C++ era apenas um pequeno superset de C (atente que C++ é uma forma elegante de dizer “C incrementado”) e era suportada por um pré-compilador chamado Cfront. Ou seja, código C++ era transpilado para C e, então, compilado por um compilador C regular.

Os primeiros compiladores C++ capazes de gerar código executável, de forma independente, foram criados apenas anos mais tarde, por Bjarne Stroustrup, criador da linguagem, ainda na Bell Labs, e também pelo projeto GNU (GCC). Na sequência, a Microsoft também passou a fornecer uma alternativa, o Visual C++.

Os esforços para “padronizar” a linguagem começaram em 1989, através da formação de um comitê ANSI. O primeiro draft da especificação foi publicado em 1995. A primeira versão oficial surgiu em 1998 (C++98).

Embora C++98 fosse uma boa especificação, ela nunca foi plenamente implementada por nenhum dos compiladores populares. Pior que isso, compiladores diferentes ofereciam níveis diferentes de suporte a mesma, fazendo com que código aceito por um compilador fosse recusado por outros.

Em 2011, C++ recebeu uma importante atualização em sua especificação, C++11, que só foi amplamente implementada pelos principais compiladores no final de 2013. Essa versão marca o início da fase “moderna” da linguagem.

Novas versões das especificações passaram, então, a serem propostas e aprovadas em ciclos mais curtos. Temos C++14, C++17 e C++20.

Muito da má fama de C++ é justificada pelos seus primeiros anos.

Um choque de dois mundos

Embora muita gente aponte C++ como linguagem de propósito geral, considero-a mais adaptada para programação em nível de sistemas (systems programming). Ou seja, para criação de software que suporta outro software – como compiladores, sistemas operacionais, engines de jogos, engines de cálculo, engines de automação, drivers de dispositivos, entre outros.

C++ não me parece a melhor alternativa para desenvolver software em nível de aplicativos. Ou seja, para criação de software que suporta usuários diretamente – como aplicações line-of-business, processadores de texto, entre outros.

Por que tanta gente gosta de C++?

Programação em nível de sistemas geralmente exige bom conhecimento a respeito do funcionamento da máquina. O objetivo é fazer uso extremamente eficiente de recursos.

C++ é uma linguagem comprometida em oferecer abstrações sem custos adicionais. Além disso, é fácil mapear um código escrito em C++ com o que, de fato, acontecerá, durante a execução.

Por que tanta gente NÃO gosta de C++?

Pessoas mais habituadas a programação em nível de aplicações, ou seja, criando software que atende diretamente usuários, dificilmente conseguirão apreciar todo o poder de C++. Trata-se de uma questão de mindset.

C++ não se coloca como obstáculo para realização de operações avançadas e em baixo nível. Entretanto, também não protege de descuidos ou do simples desconhecimento. Em termos simples, C++ concederá todo poder computacional de que precisar, mas não irá lhe impedir de fazer besteiras (grandes, até), se você não souber o que estiver fazendo.

C++ não é uma jovem senhora! Em “anos de computador”, C++ é quase uma entidade mitológica que sobreviveu a eras. Tentar ler códigos C++ com mais de 30 anos (como fontes de alguns compiladores e sistemas operacionais) pode provocar uma viagem no tempo que desavisados simplesmente não tem base para fazer.

Por que aprender C++?

C++ é útil, poderosa, moderna e continua evoluindo. Trata-se da opção padrão para desenvolvimento de software em nível de sistemas.

A linguagem conta com bibliotecas extremamente poderosas e que continuam sendo desenvolvidas. A stdlib, por exemplo, oferece três abstrações impressionantes: containers, iterators e algoritmos.

C++ permite gestão facilitada e poderosa de recursos que os software utilizam, incluindo, arquivos, memória, sockets,

C++ oferece uma semântica para move/copy, garantindo a correta utilização de arquivos, memória, sockets de rede, etc. Dessa forma, a linguagem facilita a vida do programador na obtenção de segurança, eficiência, flexibilidade, etc.

Para pensar!

C++ é a linguagem mais usada no desenvolvimento em nível de sistemas. Por isso, simplesmente não pode ser ignorada.

Programar em C++ é como dirigir um carro com motor absolutamente poderoso. Se o programador não for um “piloto”, dificilmente conseguirá manter o “possante” na pista e, provavelmente, irá estourar o motor. Veja, o carro não tem culpa das limitações do motorista. A maioria das pessoas talvez se sinta melhor “andando veliz”, mas com alguma assistência (e está tudo bem).

Eventualmente, algumas pessoas entendem que poderiam obter um pouco mais de ajuda da linguagem. Outras, simplesmente, não pedem mais informações. Se tiverem uma necessidade, buscam!

Vamos aprender C++ moderno? Esperemos pelo próximo capítulo.

Compartilhe este capítulo:

Compartilhe:

Comentários

Participe da construção deste capítulo deixando seu comentário:

Inscrever-se
Notify of
guest
3 Comentários
Oldest
Newest Most Voted
Feedbacks interativos
Ver todos os comentários
William Roberto de Araujo
William Roberto de Araujo
1 ano atrás

Ótimo texto.

Guilherme
Guilherme
1 ano atrás

Na section: “Para Pensar!”

Nao seria: “andando feliz” ao inves de “andando veliz”

Pedro Gomes
Pedro Gomes
1 ano atrás

Simbora! Já faz algum tempo que quero aprender profundamente sobre essa linguagem. Comprei alguns livros e não estava encontrando tempo para lê-los. Olhando seu blog agora, me deu uma vontade imensa de mergulhar nesse universo que é o C++.

Elemar Júnior

Fundador e CEO da EximiaCo, atua como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia. 

Desenvolvendo gente que faz a diferença

reconhecida excelência da EximiaCo, em consultorias e assessorias, aplicada no desenvolvimento de competências através de publicações e capacitações abertas e in-company.

TECH

&

BIZ

-   Insights e provocações sobre tecnologia e negócios   -   

55 51 9 9942 0609  |  me@elemarjr.com

55 51 9 9942 0609  |  me@elemarjr.com

bullet-1.png

55 51 9 9942 0609   me@elemarjr.com

3
0
Quero saber a sua opinião, deixe seu comentáriox
()
x