Perché gli array di lunghezza variabile sono stati resi facoltativi in C 2011?

12

Quando i VLA sono stati introdotti in C 1999, ho pensato che fosse una grande innovazione per il linguaggio. Tuttavia, avendo appreso che è stato reso opzionale in C 2011, mi chiedo cosa abbia portato al suo cambiamento di status, e se significa che la funzione è in realtà diretta all'obsolescenza. In tal caso, esiste una nozione equivalente di gestione automatica di dati di dimensioni dinamiche che viene considerata per sostituirla?

Ho cercato di trovare il documento motivazionale C 2011, ma non sembra essere ancora pubblicato.

    
posta jxh 05.04.2016 - 21:30
fonte

2 risposte

9

Ho sentito leggende che variano da "dovrebbe essere opzionale in quanto alcuni piccoli compilatori dovrebbero essere in grado di essere compatibili con C11 senza VLA" a "è stato un errore sul primo posto". Non ho mai avuto una risposta vera e definitiva a questo, però. In definitiva, non credo che nessuno ne abbia davvero uno come motivo (presumendo - e sperando - ce ne sia uno) non è mai stato divulgato (per quanto riguarda le mie vecchie ricerche).

Dal capitolo 4 (pagina 13) di Rationale for International Standard - Programming Languages - C 5.10 (2003)

By defining conforming implementations in terms of the programs they accept, the Standard leaves open the door for a broad class of extensions as part of a conforming implementation. By defining both conforming hosted and conforming freestanding implementations, the Standard recognizes the use of C to write such programs as operating systems and ROM-based applications, as well as more conventional hosted applications. Beyond this two-level scheme, no additional subsetting is defined for C, since the C89 Committee felt strongly that too many levels dilutes the effectiveness of a standard.

Enfasi mia. Si noti che questa decisione va contro la propria logica. Eppure, un'altra cosa resa facoltativa. Ora puoi ottenere __STDC_NO_VLA__ o supporto VLA. È una decisione molto strana.

    
risposta data 05.04.2016 - 23:30
fonte
4

Per quanto posso determinare dai documenti della commissione pubblica (in particolare N1395 ), uno dei principali motivi per rendere facoltativi i VLA (insieme a operazioni aritmetiche e di threading complesse) è stato quello di rendere possibile la creazione di compilatori C conformi per piccoli processori integrati.

La tendenza è stata che i fornitori di compilatori che si rivolgevano ai sistemi embedded rimanevano nello standard C90, a causa dell'introduzione di quelle grandi funzionalità che i loro clienti non chiedevano.

    
risposta data 06.04.2016 - 09:10
fonte

Leggi altre domande sui tag