Herb Sutter deu uma palestra sobre o status do Modern C++ durante a conferência Microsoft Build. O C++ passa por uma espécie de renascimento nesses últimos anos na Microsoft, e Sutter tem participado diretamente desse aumento de foco.
Próximas versões do C++
Sutter começou sua palestra fornecendo um rápido resumo de como estão os padrões ISO do C++ no momento. Em Fevereiro completou-se a discussão técnica para o C++ 14, e o comitê está revendo o processo com a intenção de votar na aprovação desse padrão para ser o padrão oficial ISO ainda este ano.
O release C++14 é considerado um minor release, enquanto que o próximo padrão C++17 (ainda em projeto e em discussões) é considerado um major release. A versão mais recente do compilador Microsoft (CTP) foi liberada em Novembro. De acordo com Sutter, o próximo CTP (data ainda não definida) deverá conter as seguintes características:
- Literais user-defined;
- C++14 generalized lambda capture;
- C++14 libs: std:: literais user-defined;
- Inline namespaces.
Existem ainda algumas características que podem estar presentes neste CTP (o que significa que podem ser adiadas para uma versão posterior):
- Universal character names nas literais;
- noexcept (incl. conditional);
- char16_t, char32_t, attributes;
- thread_local;
- unrestricted unions;
- consexpr (except ctors, literal types);
- constexpr (incl. ctors, literal types).
O Parallel STL (a convergência de PPL, TBB, Amp, CUDA, Thrust) foi lançado no CodePlex. Sutter anunciou que a conferência C++ que a Microsoft patrocinou nos últimos dois anos (GoingNative) foi substituída pela CPPCon, que está programada para ocorrer de 7 a 12 de Setembro de 2014.
Casos de uso do Modern C++
A próxima parte da sua palestra migrou de discussões sobre lançamentos para uma conversa sobre os casos de uso do Modern C++ no desenvolvimento de aplicações de hoje. Na opinião de Sutter, C++ deve ser usado quando as seguintes metas ou objetivos são necessários:
- Portabilidade e compatibilidade entre plataformas;
- Alto desempenho e controle total;
- Acesso total ao hardware e recursos do SO;
- Destaques da linguagem C++: value types por padrão, determinismo por padrão, contíguo por padrão.
Sutter observa que Modern C++ não é C++98-- Modern C++ é mais limpo e mais seguro enquanto se mantém rápido e flexível. Isso não quer dizer que o velho C++ não é suportado, como em muitos casos ele vai compilar com avisos e sugestões do compilador de como ele pode ser melhorado.
Uma das características que o Modern C++ oferece é simplificar (da perspectiva do programador) o gerenciamento de memória quando se utiliza new-> make_unique ou new->make_shared. Não há necessidade de exclusão, o gerenciamento do ciclo de vida é automático e exception-safe.
Outra área é como values types são tratados de forma mais eficiente para operações de movimentação. O C++11 adicionou a ideia de mover tipos objeto. Com base nessa abordagem, existe a possibilidade de se tornar dono ao invés de fazer cópias que deverão ser excluídas. A semântica melhorada de movimentação pode melhorar a velocidade de código legado simplesmente recompilando com um compilador C++14.
Escrevendo código rápido
Arrays contíguos são importantes e muitas vezes esquecidos, se está percorrendo muitos objetos, então é muito importante ordená-los para fazer um acesso aos endereços adjacentes. Se há uma preocupação com o desempenho então é melhor usar arrays, e não apenas lists e arraylists.
Continuando nesse tema, Sutter disponibilizou benchmarks indicando que o uso de vector é muito mais eficiente que o uso de lists para inserções e exclusões. Um list pré-alocado é mais rápido do que um list regular, mas ambos permanecem muito piores do que o Vector.
A palestra de Sutter é muito informativa e ele continua sendo um orador envolvente. Consulte o site Channel9 para assistir a palestra completa.