13 pontos por xguru 2023-07-13 | 2 comentários | Compartilhar no WhatsApp
  • O próximo padrão C++ na sequência do C++20
  • Não é um divisor de águas como C++98, C++11 ou C++20, mas sim uma mudança pequena no nível do C++17

Entendendo as mudanças do padrão C++ (ao longo de 40 anos)

C++98

  • No fim dos anos 80, Bjarne Stroustrup e Margaret A. Ellis escreveram o famoso livro Annotated C++ Reference Manual (ARM)
  • Este livro tinha dois objetivos
    • Como havia muitas implementações independentes de C++, o ARM definiu as funcionalidades de C++
    • Serviu de base para o padrão C++98 (ISO/IEC 14882)
  • O C++98 incluiu alguns recursos importantes
    • Templates
    • STL(Standard Template Library): incluindo contêineres, algoritmos, strings e IO Streams

C++03

  • No C++03 (14882:2003), foram feitas correções técnicas muito pequenas
  • Na comunidade, o C++03 junto com o C++98 é chamado de "C++ legado"

TR1

  • Em 2005, aconteceu algo interessante. O TR1(Technical Report 1) foi publicado
  • O TR1 foi um grande passo em direção ao C++11 e o primeiro passo rumo ao Modern C++
  • Baseado no projeto Boost dos membros do comitê de padronização do C++
  • Incluiu 13 bibliotecas que entrariam no padrão C++ da próxima geração (expressões regulares, números aleatórios, smart pointers como std::shard_ptr, hash tables etc.)

C++11

  • Foi o padrão C++ seguinte, mas nós o chamamos de Modern C++. Esse nome também inclui C++14 e C++17
  • O C++11 mudou completamente a forma como desenvolvemos em C++
    • Além dos componentes do TR1, trouxe move semantics, perfect forwarding, variadic templates, constexpr etc.
    • Incluiu um modelo de memória baseado em threads e a API de Threading

C++14

  • Um padrão C++ pequeno. Introduziu read-writer locks, lambdas generalizadas e funções constexpr

C++17

  • Nem grande, nem pequeno
  • Incluiu dois recursos excelentes: Parallel STL e sistema de arquivos padronizado
    • Cerca de 80 algoritmos da STL podem ser executados por meio de políticas de execução (paralela, sequencial, vetorial)
  • Foi bastante influenciado pelo Boost. Sistema de arquivos e três tipos de dados (std::optional, std::variant, std::any)

C++20

  • Assim como o C++11, o C++20 mudou a forma como programamos em C++
  • Em especial, quatro grandes pontos
    • Ranges: usando a biblioteca Ranges, é possível expressar algoritmos diretamente sobre contêineres e combiná-los com o operador pipe para aplicá-los a fluxos de dados infinitos
    • Coroutines: fez a programação assíncrona em C++ se tornar algo principal. Serve de base para cooperação, event loops, fluxos de dados infinitos e pipelines
    • Concepts: mudou a forma como pensamos e programamos templates. Permite impor restrições aos argumentos de template, fazer verificações de tipo etc., tudo verificável em tempo de compilação
    • Modules: permite superar as limitações dos arquivos de cabeçalho. Promete várias coisas. Por exemplo, elimina a necessidade do pré-processador e, no fim, reduz o tempo de build e facilita a construção de pacotes

C++23

  • Em julho de 2023, o C++23 estava prestes a passar pela votação final
  • Adiciona o recurso pequeno, mas muito impactante para a própria linguagem, "Deducing this"
    • De forma parecida com Python, é possível tornar explícito o ponteiro this, que antes era passado implicitamente às funções-membro
    • Com isso, técnicas complexas como CRTP(Curiously Recurring Template Pattern) ou a implementação do padrão Overload ficam mais simples
  • A biblioteca do C++23 também tem adições importantes
    • É possível importar diretamente a biblioteca padrão com import std; ou aplicar format strings do C++20 em std:print e std:println
    • std::flat_map, que substitui std::map em termos de desempenho
    • A interface de std::optional foi expandida para uma interface monádica para melhorar a composabilidade
    • O novo tipo de dado std::expected
    • std::mdspan, um span multidimensional
    • std::generator, uma coroutine para gerar fluxos de números

2 comentários

 
carnoxen 2023-07-13

Parece que ainda não há novidades sobre a padronização de networking, né?

 
penza1 2023-07-20

Acho que até o próximo padrão também vai ser meio incerto, né;;