In che modo il comitato per gli standard C ++ testa le proprie idee progettuali?


29

Il comitato C ++ verifica le loro nuove specifiche di progettazione con una sorta di compilatore di prototipi prima di rilasciare un nuovo standard? O rilasciano uno standard che è, in effetti, solo teorico fino a quando i grandi compilatori non lo implementano?



4
Boost funge da prototipo per numerosi miglioramenti della libreria. Ad esempio boost::shared_ptr=> std::shared_ptr.
MSalters,

6
Mi aspettavo un semplice "non lo fanno".
Sebb,

@MSalters: Boost ha anche agito da prototipo per un discreto numero di miglioramenti del linguaggio di base (ad es. boost.lambda=> C ++ 11 espressioni lambda).
Jerry Coffin,

Risposte:


26

Il Comitato Standard C ++ ha statuti e regole, ma la maggior parte di questi sono incentrati sulla struttura dell'organizzazione, su come presentare proposte, votare, pubblicare lo standard, ecc. E non tanto sui dettagli tecnici dello standard stesso né su come esso può essere testato.

Per quanto ne so, non esiste alcun requisito formale per "testare" una caratteristica o il suo design. Il C ++ è anche un po 'unico in quanto non esiste alcun riferimento o implementazione "primaria" (ad esempio Microsoft CLR, Oracle JDK, Zend PHP). Tuttavia, i membri del comitato sono composti da molte organizzazioni con una profonda conoscenza della lingua e dell'implementazione del compilatore. Ad esempio, se segui quel link precedente, vedrai rappresentanti di Microsoft e Intel che hanno entrambi compilatori C ++ rispettati. Sono coinvolti anche Red Hat e alcune altre aziende che contribuiscono a GCC.

Quando propongono una nuova funzione, i membri della commissione hanno già una buona idea se sia fattibile, se possa entrare in conflitto con altre funzionalità o rendere la grammatica ambigua in un modo che complica l'analisi inutilmente. ( ecco una buona domanda sulla grammatica del C ++ )

La risposta breve è "no, il comitato non richiede di testare i loro progetti utilizzando la prototipazione". Tuttavia, non c'è molto bisogno perché i membri del comitato sono esperti in C ++ che comprendono tutti i dettagli a un livello che la stragrande maggioranza dei programmatori non capisce. Ricorda, queste persone sono architetti del linguaggio che sono esperti di teoria del linguaggio e progettazione di compilatori.

Dato il coinvolgimento dei fornitori di compilatori nel processo, è possibile che uno o più di essi possano prototipare una nuova funzionalità, ma ancora una volta, non vi è alcun requisito formale per questo né è qualcosa di cui ho letto in documenti accessibili al pubblico dal Comitato C ++.

Inoltre tendono ad essere molto conservativi, aggiungendo in modo incrementale nuove funzionalità che hanno una domanda nel mondo reale senza specificare grandi quantità di nuove funzionalità che potrebbero rivelarsi rischiose. In effetti negli ultimi anni hanno aggiunto nuove funzionalità che esistevano come estensioni proprietarie o librerie open-source che già funzionano nel mondo reale. Ad esempio, C ++ 11 e C ++ 14 incorporano parti di Boost , che è già stato testato nel mondo reale in più compilatori e ambienti di esecuzione. Non è necessario testare qualcosa che è già stato testato.


5
ConceptGCC e ConceptClang sono due esempi di compilatori (o piuttosto forchette di compilatori) che sono stati esplicitamente creati per prototipare e acquisire esperienza reale con una complessa funzionalità linguistica. I concetti sono anche un esempio di come sono state progettate funzionalità linguistiche complete in C ++: i concetti sono in circolazione dal 1998, prima come idea informale per parlare di modelli C ++, poi nel 2006 come funzionalità linguistica proposta dallo stesso Bjarne e implementata anche in ConceptGCC da allora. Essi possono ...
Jörg W Mittag

3
... finiscono in C ++ 17, il che significa che saranno maturati per circa 10 anni come implementazione e 20 anni come idea.
Jörg W Mittag,

2
Questo è per lo più falso, penso. Le nuove caratteristiche di solito richiedono un'implementazione prima. L'unica volta che ciò non è avvenuto, abbiamo ottenuto l'esportazione.
Isanae,

5
L'ultimo paragrafo è (per dirla alla leggera) senza senso. Il comitato C è molto conservatore, ma C ++ aggiunge ogni sorta di roba nuova con poca considerazione per quale pasticcio crea il linguaggio o se risolve effettivamente i problemi che le persone vogliono risolvere.
R ..

1
@R .. Non sono d'accordo. Il C ++ 11 era un'anomalia, ma includeva molte cose già esistenti (vedi il mio commento Boost, per esempio). Per gran parte della vita di C ++ si è evoluto molto lentamente, il che è una delle principali lamentele che molti sviluppatori hanno sul linguaggio.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.