Perché lo standard C ++ non ha adottato i modelli di espressione?

16

Ho capito che i modelli di espressione come tecnica sono stati scoperti significativamente prima dello standard C ++ originale nel 1998. Perché non sono stati usati per migliorare le prestazioni di diverse classi standard come std::string e flussi?

    
posta DeadMG 25.01.2012 - 20:53
fonte

4 risposte

15

Modelli di espressioni sono stati pubblicati per la prima volta da Todd Veldhuizen nel mese di giugno 1995 , in un articolo nel Rapporto C ++ rivista. A quel punto, il comitato standard era già strongmente coinvolto nell'aggiunta dello STL allo standard C ++, un compito che da solo ritardava lo standard di uno o due anni. (La STL è stata presentata al comitato nel 1993 e ufficialmente proposta nel 1994. Ci sono voluti altri quattro anni per completare lo standard.)
Dato che il comitato di standardizzazione del C ++ è un gruppo di volontari, alcuni dei quali nemmeno supportati dalle aziende che pagano le loro spese, non penso che nessuno abbia avuto risorse da usare per aggiungere ancora un'altra idea allo standard C ++.

Inoltre, il 1995 è solo l'anno in cui è stato pubblicato l'articolo di Veldhuizen. Affinché la tecnica diventi conosciuta e riconosciuta , dovrebbe prendere altri anni . (L'idea dell'STL risale agli anni '70, un'implementazione di Ada è stata fatta alla fine degli anni '80, il lavoro su un'implementazione C ++ deve essere iniziato verso il 1990 e ci sono voluti altri tre anni perché l'idea raggiungesse la standardizzazione del C ++ comitato.)
C'erano, tuttavia, solo tre anni dall'articolo di Todd fino al voto finale sullo standard. Era troppo poco tempo per incorporare un'idea nuova di zecca e fondamentalmente non testata.

Aggiungi a questo il fatto che Modelli di espressioni , essendo una sorta di meta-programmazione di template, sottolinea i compilatori molto più del relativo " semplice "STL fa. E da quello che ricordo, anche nel 1998, quando è stato pubblicato lo standard, non avevamo un compilatore che potesse compilare anche tutti gli STL.
Dato che uno degli obiettivi principali del comitato di standardizzazione era di standardizzare la pratica consolidata (non che si attenessero a questo rigorosamente), Modelli di espressione non dovrebbe mai avere stato all'ordine del giorno allora.

    
risposta data 25.01.2012 - 21:04
fonte
9

La semplice risposta è: tu ovviamente non hai fatto pressioni per farlo. Né ho fatto perché avevo (e ho) il mio programma che non include i modelli di espressione. Inoltre, l'interfaccia in particolare per le stringhe sta già cercando di servire troppi master, risultando in una classe che è usata per tutto e valida per il mothing.

La libreria standard ha già std::valarray e famiglia che è destinata a supportare uno stile di implementazione del modello di espressione. Per quanto posso dire, comunque non lo taglia. Un problema che ha causato questo è che le persone che hanno esercitato pressioni per ottenere la versione semicotta inclusa nello standard hanno smesso di funzionare al suo interno nel momento in cui erano incluse. Ci sono stati tentativi di salvataggio (per esempio David Vandevoorde, Matt Austern, e ci ho lavorato per un giorno all'incontro di Stoccolma) ma alla fine nessuno era abbastanza interessato.

    
risposta data 25.01.2012 - 21:14
fonte
1

La tecnica ora conosciuta come "modelli di espressione" è stata scoperta (indipendentemente) almeno dal 1994 sia da Todd Veldhuizen che da me (l'articolo di Todd è del 1995, ma ci vuole un po 'di tempo perché vengano pubblicati; il mio lavoro è stato mostrato per la prima volta in comp.lang.c ++).

In realtà ho iniziato a partecipare alle riunioni del comitato C ++ proprio a causa di questo problema. Ho presentato la tecnica e una riprogettazione completa di std :: valarray al comitato al primo incontro di Santa Cruz nel marzo 1996. È stato considerato un cambiamento troppo grande, ma come allude Dietmar, abbiamo avuto alcune parole al prossimo incontro a Stoccolma che consentono l'uso di modelli di espressione per l'implementazione di std :: valarrray. Con mia sorpresa, quelle parole sono ancora lì: vedi paragrafo 3-6 della sottosezione [valarray.syn] 29.7.1 in link .

    
risposta data 15.04.2018 - 18:10
fonte
0

La mia ipotesi migliore è che nessun compilatore sarebbe stato in grado di compilare modelli di espressioni nel 1998.

    
risposta data 25.01.2012 - 21:01
fonte

Leggi altre domande sui tag