Como o comitê de padrões C ++ testa suas idéias de design?


29

O comitê C ++ testa suas novas especificações de design com algum tipo de compilador de protótipo antes de lançar um novo padrão? Ou eles lançam um padrão que é, na verdade, apenas teórico até que os grandes compiladores o implementem?



4
O Boost atua como protótipo para um grande número de melhorias na biblioteca. Por exemplo boost::shared_ptr=> std::shared_ptr.
MSalters

6
Eu meio que esperava um simples "eles não".
Sebb

@MSalters: O Boost também atuou como um protótipo para um número razoável de melhorias na linguagem principal (por exemplo, boost.lambda=> expressões lambda C ++ 11).
22416 Jerry Coffin

Respostas:


26

O Comitê de Padrão do C ++ possui estatutos e regras, mas a maioria deles está centrada na estrutura da organização, como enviar propostas, votar, publicar o padrão etc., e não tanto nos detalhes técnicos do próprio padrão ou em como ele pode ser testado.

Não há nenhum requisito formal para "testar" um recurso ou seu design, até onde eu saiba. O C ++ também é um tanto único, pois não há referência ou implementação "primária" (por exemplo, Microsoft CLR, Oracle JDK, Zend PHP). No entanto, os membros do comitê consistem em muitas organizações com profundo conhecimento do idioma e da implementação do compilador. Por exemplo, se você seguir o link anterior, verá representantes da Microsoft e da Intel que possuem compiladores C ++ respeitados. A Red Hat e algumas outras empresas que contribuem para o GCC também estão envolvidas.

Ao propor um novo recurso, os membros do comitê já têm uma boa idéia de se é viável, se pode entrar em conflito com outros recursos ou fazer com que a gramática seja ambígua de uma maneira que complique a análise desnecessariamente. ( aqui está uma boa pergunta sobre a gramática do C ++ )

A resposta curta é "não, o comitê não exige testar seus projetos usando prototipagem". No entanto, não há muita necessidade, porque os membros do comitê são especialistas em C ++ que entendem todos os detalhes em um nível que a grande maioria dos programadores não. Lembre-se, essas pessoas são arquitetos de linguagem, especialistas em teoria da linguagem e design de compiladores.

Dado o envolvimento de fornecedores do compilador no processo, é possível que um ou mais deles podem protótipo de um novo recurso, mas, novamente, não há nenhuma exigência formal para isso nem é algo que eu tenho lido sobre em documentos publicamente disponíveis a partir do Comitê C ++.

Eles também tendem a ser muito conservadores, adicionando novos recursos de forma incremental que têm uma demanda no mundo real, sem especificar grandes quantidades de novos recursos que podem ser arriscados. De fato, nos últimos anos, eles adicionaram novos recursos que existiam como extensões proprietárias ou bibliotecas de código aberto que já funcionam no mundo real. Por exemplo, C ++ 11 e C ++ 14 incorporam partes do Boost , que já foram testadas no mundo real em vários compiladores e ambientes de execução. Não há necessidade de testar algo que já foi testado.


5
ConceptGCC e ConceptClang são dois exemplos de compiladores (ou melhor, garfos de compiladores) que foram explicitamente criadas para protótipo e ganhar experiência real com um recurso de linguagem complexa. Os conceitos também são um exemplo de como os recursos completos da linguagem são projetados em C ++: os conceitos existem desde 1998, primeiro como uma idéia informal para falar sobre modelos C ++, depois em 2006 como um recurso de linguagem proposto pelo próprio Bjarne e também implementado no ConceptGCC desde então. Eles podem ...
Jörg W Mittag

3
… Terminam em C ++ 17, o que significa que eles terão amadurecido por cerca de 10 anos como uma implementação e 20 anos como uma idéia.
Jörg W Mittag 20/03

2
Isso é principalmente falso, eu acho. Novos recursos geralmente requerem uma implementação primeiro. A única vez que isso não aconteceu, conseguimos exportação.
Isanae

5
O último parágrafo é (para dizer o mínimo) um absurdo. O comitê de C é muito conservador, mas o C ++ adiciona todo tipo de coisa nova o tempo todo, com pouca consideração pela confusão que faz na linguagem ou se ela realmente resolve os problemas que as pessoas querem resolver.
R ..

1
@R .. eu discordo. O C ++ 11 era uma anomalia, mas incluía muitas coisas que já existiam (veja meu comentário do Boost, por exemplo). Durante grande parte da vida do C ++, ele evoluiu muito lentamente, o que é uma das principais reclamações que muitos desenvolvedores têm sobre a linguagem.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.