Rodrigo Strauss :: Blog
C++11: Introdução
C++11 é a nova versão da linguagem C++, definida pelo padrão ISO/IEC 14882:2011. O fato de ser um padrão ISO traz a vantagem de nenhum fabricante ser "dono" da linguagem. Mas isso também cria um problema comum em qualquer coisa que é decidida por comitê: é necessário um consenso entre os membros para que algo seja adicionado ou modificado, e isso torna o processo sempre mais lento. O último padrão C++, por exemplo, foi de 2003. 8 anos depois, finalmente temos uma nova versão.
(Isso me lembra de quando fui a um Coding Dojo no Google Brasil. No final, todo mundo deve escrever as opiniões sobre o Dojo em papeizinhos, um para vantagens, outro para desvantagens. Foram inúmeras as reações de inconformismo quando leram o papel que eu escrevi com uma desvantagem: "Democracia demais".)
Mas a espera valeu. Todos os novos recursos foram bem, digamos, "azeitados", e o padrão já nasceu com vários compiladores implementando uma parte considerável dele (isso demorou bem mais no C++03). Além da vantagem de quem vem por último: você aprende com os erros e acertos dos outros (como Java, C# && Python).
Os principais objetivos do novo padrão, segundo quem participou das discussões de definição da linguagem e segundo eu mesmo são:
- Facilidades de linguagens modernas: O melhor exemplo é a implementação de lambda, que, antes tarde do que nunca, chegou ao C++. Mas, por tardar e consequentemente aprender com os acertos e erros dos outros, temos em C++ a melhor implementação entre as linguagens mainstream.
- Facilidade para ensino: Essa veio do Stroustrup (o criador da linguagem), que de uns anos pra cá voltou a dar aulas de programação para iniciantes. No último encontro de C++ me perguntaram qual seria a vantagem do C++11 para iniciantes. Não consegui dar uma resposta objetiva, além de citar o fato de que uma linguagem melhor acaba virando uma linguagem mais fácil.
- Melhorias na biblioteca padrão: A STL já estava mesmo precisando de uma atualizada, e resolveu-se unir o útil ao agradável: com o tempo, as bibliotecas mais estáveis e bem aceitas do Boost estão sendo incorporadas à biblioteca padrão. O C++11 tem std::threads, std::shared_ptr, std::function, e inúmeras melhorias que vou detalhar em posts futuros.
- Acabar com gambiarras do Boost: Não sei se esse era realmente um dos objetivos iniciais, mas eu gostei disso ter acontecido. Acho metaprogramação em C++ um negócio muito legal, mas exotérico demais. Boost Bind é algo extremamente necessário para programação assíncrona, mas 100+ erros de compilação por esquecer uma vírgula ou um _1 é de matar. E o Boost Lambda, convenhamos, é uma gambiarra que cresceu demais e aprendeu a falar. Com o recurso de lambda da linguagem se tornam desnecessários o Boost.Bind e o Boost.Lambda. Foi bom enquanto durou, mas não sentirei saudades.
Em breve, posts detalhando cada ponto. Enquanto isso, você pode como sempre, ler a extensiva lista de novidades na Wikipedia.
Em 03/11/2011 13:23, por Rodrigo Strauss





Boa notícia. E pelo que eu vi na Wikipedia uma das alterações da nova versão é o aumento do desempenho e capacidade de trabalhar diretamente com hardware. Antes mesmo dessa versão, eu já achava que C++ era, dentre as linguagens de alto nível, "A Linguagem" para esse tipo de trabalho... Se essa alteração corresponder mesmo, então C++ conseguiu melhorar o que já fazia bem!