In C ++, erano SFINAE e metaprogrammazione intenzionale o solo un sottoprodotto di modelli?

9

SFINAE e template metaprogramming possono fare cose meravigliose e molte librerie li usano anche considerevolmente.

Storicamente entrambi questi "concetti magici" sono stati introdotti / supportati intenzionalmente in C ++? Oppure sono stati scoperti in seguito come utili sottoprodotti (prodotti collaterali) della programmazione originale template ?

    
posta iammilind 15.12.2011 - 09:36
fonte

2 risposte

19

Circa un decennio fa, dopo un giorno di conferenza, mi ritrovai in un pub con Erwin Unruh e pochi altri e gli chiesi del programma VJovic ha menzionato . Abbiamo avuto un paio di birre allora, è stato un incontro non ufficiale, ed è vissuto nella mia testa per un decennio, quindi prendilo con un pizzico di sale, ma secondo i miei ricordi:

Ha affermato di aver aggiunto funzionalità di template per poter meglio servire l'STL. Secondo lui, alcuni / molti membri del comitato ritenevano che stessero creando qualcosa senza conoscere le sue piene capacità. Lui stesso sospettava che tutti gli elementi del modello, specialmente la specializzazione in modo parziale, costituissero un linguaggio completo di Turing, e aveva sempre intenzione di fare una dimostrazione formale di ciò, ma non se ne andò mai.

Invece una sera in una riunione di standardizzazione, è venuto fuori con questo programma che ha stampato numeri primi come messaggi di errore ( una versione che dovrebbe funzionare con i compilatori moderni è qui ) che è stata calcolata durante la compilazione. Come meta-programma modello non è molto impressionante per gli standard odierni, ma è stato il primo, dopo tutto. Qualcuno ha fatto quello che considerava uno scherzo presentando formalmente il programma in modo che diventasse un documento di standardizzazione ISO ufficiale.

Ricordo che gli avevo chiesto espressamente la reazione di Bjarne Stroustrup al programma, e in risposta Erwin lo imitò coprendosi gli occhi con la mano. :)

Col senno di poi rimpiango di non aver chiesto a Todd Veldhuizen , anche a quella conferenza, come ha creato modelli di espressioni . (Era certamente un tipo simpatico con cui parlare.) Ma ero molto più giovane di, e lasciai sfuggire l'opportunità della vita. :(

    
risposta data 15.12.2011 - 13:46
fonte
11

In 1994 during a meeting of the c++ standardization committee, E. Unruh discovered that templates can be used to compute something at compile time. He wrote a program that prints prime numbers. The intriguing part of this exercise was that the production of the prime numbers was performed by the compiler during the compilation process and not at the run time. Although this program wasn't fully portable, the program did show that the template instantiation mechanism is a primitive recursive language that can perform non-trivial computations at compile time.

Questo estratto è tratto da "c ++ templates" di Vandevoorde e Josuttis (capitolo 17).

Come puoi vedere, è stato scoperto presto e il suo potere è stato riconosciuto immediatamente.

    
risposta data 15.12.2011 - 09:59
fonte

Leggi altre domande sui tag