Home  >  Plataformas

Linguagem de programação C ganha atualizações

Conheça os novos recursos que serão adicionados à versão C2x

Serdar Yegulalp | InfoWorld (EUA)

13/11/2018 às 12h36

linguagem de programação C
Foto: Shutterstock

Um rascunho de trabalho do padrão para a próxima revisão da linguagem de programação C, agora chamada "C2x", está disponível para review.

A maioria das alterações aprovadas até agora para o C2x não envolve a adição de novos recursos, mas sim o esclarecimento e o refinamento de como C deve se comportar em diferentes implementações e em relação ao C ++, irmão maior. A ênfase no refinamento está de acordo com a maneira como as revisões anteriores do C - C11 e, mais recentemente, do C17.

Conforme descrito na Carta C2x, o plano enfatiza fortemente a manutenção de edições futuras da linguagem compatíveis com o grande corpo do código C existente, e para evitar (embora não descartar totalmente) “mudanças silenciosas” ou mudanças “que causam um programa de trabalho trabalhar de forma diferente sem aviso prévio.”

O WG14, grupo que supervisiona o desenvolvimento do padrão C (ISO / IEC 9899), aprovou formalmente apenas um pequeno número de alterações no idioma do padrão C17.

Conheça algumas das mudanças mais notáveis que sabemos até agora:

Um esclarecimento da palavra-chave restrita

A palavra-chave restrita é usada para informar ao compilador que um determinado objeto na memória pode ser acessado apenas por aquele ponteiro, como uma otimização. No C2x, haverá exemplos mais detalhados de como a restrição deve se comportar, para garantir que os compiladores não acabem fazendo otimizações inseguras ou desnecessárias.

Fazendo o static_assert se comportar da mesma maneira que no C, como em C ++

A declaração static_assert, encontrada em C e C ++, é usada para garantir que uma determinada expressão constante seja válida em tempo de compilação, mas é implementada de maneira diferente nos dois idiomas. Com essa mudança, a versão C2x se comportará da mesma forma que a versão C ++, facilitando o compartilhamento do código de cabeçalho entre os idiomas e a tradução entre C e C ++.

Melhores definições para comportamento de uniões

Diferentes implementações de C têm diferentes comportamentos quando se trata de uniões anônimas, um recurso adicionado em C11. O C2x esclarece como isso funciona, por isso não depende da implementação.

Outras alterações incluem como lidar com casos de divisão por zero em pow (), formatos de avaliação para pontos flutuantes e mais esclarecimentos sobre como lidar com conversões de codificação de caracteres largos.

A linguagem

C é a base de muitos projetos de software populares, como o kernel do Linux, e continua sendo uma linguagem amplamente usada, atualmente em segundo lugar no índice Tiobe. Sua simplicidade faz com que seja uma escolha comum para aplicativos de software que são executados em ou próximo ao bare metal, mas os desenvolvedores devem ter cuidado extra em C, em comparação com linguagens de nível mais alto, como Python, para garantir que a memória seja gerenciada corretamente - facilmente em programas em C.

As revisões anteriores do padrão C incluíam recursos para ajudar no gerenciamento da memória, incluindo o recurso de verificação de limites do “Anexo K”. No entanto, uma das propostas na tabela para o C2x é desaprovar ou remover as APIs do Anexo K, porque suas implementações no campo são em grande parte incompletas, não conformes e não portáteis. Propostas alternativas incluem a substituição dessas APIs por sistemas de verificação de limites de terceiros, como o Valgrind ou o Intel Pointer Checker, introduzindo refinamentos no modelo de memória ou adicionando novas maneiras de executar a verificação de limites para objetos de memória.

Além das revisões do padrão oficial C, outros projetos surgiram para oferecer melhores maneiras de escrever C. A extensão Checked C, da Microsoft, adiciona verificações para evitar muitos erros comuns no manuseio da memória. Jens Gustedt, um dos principais colaboradores do padrão C, tem sua própria proposta Modular C, que dá a C um sistema de módulos semelhante aos encontrados em linguagens de alto nível.

O atual roteiro para o C2x prevê pelo menos mais dois anos para que as propostas sejam aprovadas. O WG14 está buscando “um padrão revisado até o final de 2021, com uma data de publicação de 2022”.