O GCC (GNU Compiler Collection) é um conjunto de compiladores para diversas linguagens de programação, como C, C++, Fortran, Ada e Go. O GCC é um projeto de software livre mantido pela Free Software Foundation (FSF) e por uma comunidade de desenvolvedores voluntários. O GCC é amplamente usado em sistemas operacionais baseados em Unix, como Linux, macOS e BSD, além de plataformas embarcadas e de alto desempenho.
A versão 13 do GCC foi lançada em agosto de 2023, trazendo várias novidades e melhorias para os programadores. Neste post, vamos destacar algumas das principais mudanças no GCC 13 e como elas podem afetar o seu código.
- Suporte a C++23: O GCC 13 implementa a maior parte das funcionalidades da nova versão da linguagem C++, que deve ser padronizada em 2023. Entre as novidades estão os conceitos, os módulos, os coroutines, os ranges, o formato de texto, o span e o std::embed. O GCC 13 também oferece suporte experimental a algumas extensões do C++23, como os atributos contract e expects.
- Suporte a Fortran 2018: O GCC 13 é o primeiro compilador a suportar completamente o padrão Fortran 2018, que introduz recursos como coarrays, submódulos, procedimentos concorrentes, tipos derivados polimórficos e funções puras. O GCC 13 também suporta algumas extensões do Fortran 202X, como os atributos allocatable e contiguous.
- Suporte a OpenMP 5.1: O GCC 13 atualiza o suporte à biblioteca OpenMP, que permite a programação paralela e distribuída em múltiplos processadores e dispositivos. A versão 5.1 do OpenMP adiciona funcionalidades como as cláusulas detach, taskwait e taskgroup, os construtores scan e loop, os modificadores atomic e cancel e as rotinas omp_get_device_num e omp_get_num_devices.
- Suporte a OpenACC 3.0: O GCC 13 também atualiza o suporte à biblioteca OpenACC, que permite a programação acelerada em dispositivos como GPUs e FPGAs. A versão 3.0 do OpenACC inclui funcionalidades como as cláusulas async, wait e cache, os construtores enter data e exit data, os modificadores atomic capture e update e as rotinas acc_get_device_type e acc_get_device_num.
- Otimizações de código: O GCC 13 traz diversas otimizações de código para melhorar o desempenho e a eficiência dos programas compilados. Algumas das otimizações são: eliminação de chamadas redundantes a funções virtuais, propagação de constantes em loops, vetorização de loops aninhados, fusão de loops adjacentes, eliminação de cópias desnecessárias de objetos, redução de sobrecarga de exceções e alocação dinâmica de memória.