Kiedy VLA zostały wprowadzone w C 1999, pomyślałem, że to świetna innowacja dla języka. Jednak dowiedziawszy się, że stało się ono opcjonalne w C 2011, zastanawiam się, co doprowadziło do jego zmiany statusu i czy to oznacza, że ta funkcja jest rzeczywiście przestarzała. Jeśli tak, to czy istnieje równoważne pojęcie automatycznego zarządzania danymi o dynamicznych rozmiarach, które rozważa się w celu ich zastąpienia?
Próbowałem znaleźć dokument uzasadniający dla C 2011, ale wydaje się, że nie został jeszcze opublikowany.
c
language-features
c11
jxh
źródło
źródło
Odpowiedzi:
Słyszałem legendy od „powinno być opcjonalne, ponieważ niektóre małe kompilatory powinny być zgodne z C11 bez VLA” do „to był błąd na pierwszym miejscu”. Jednak nigdy nie mam na to jednoznacznej i konkretnej odpowiedzi. Ostatecznie nie sądzę, aby ktokolwiek naprawdę miał taki, ponieważ przyczyna (zakładając - i mam nadzieję - że istnieje) nigdy nie została ujawniona (tak dalece, jak poszły moje stare wyszukiwania).
Z rozdziału 4 (strona 13) uzasadnienia standardu międzynarodowego - języki programowania - C 5.10 (2003)
Podkreśl moje. Zauważ, że decyzja ta jest sprzeczna z ich uzasadnieniem. Jeszcze jedna rzecz stała się opcjonalna. Teraz możesz uzyskać
__STDC_NO_VLA__
wsparcie VLA. To bardzo dziwna decyzja.źródło
O ile mogę stwierdzić na podstawie dokumentów komitetu publicznego (w szczególności N1395 ), jednym z głównych powodów, dla których VLA (wraz ze złożoną arytmetyką i wątkami) była opcjonalna, było umożliwienie tworzenia zgodnych kompilatorów C dla małych osadzonych procesorów.
Trend polegał na tym, że dostawcy kompilatorów, którzy celują w systemy wbudowane, utrzymywali standard C90, z powodu wprowadzenia tych dużych funkcji, o które ich klienci nie prosili.
źródło