Lorsque les VLA ont été introduits en C 1999, je pensais que c'était une grande innovation pour le langage. Cependant, après avoir appris qu'elle a été rendue facultative en C 2011, je me demande ce qui a conduit à son changement de statut, et si cela signifie que la fonctionnalité est en fait dirigée vers l'obsolescence. Dans l'affirmative, existe-t-il une notion équivalente de gestion automatique des données de taille dynamique qui est envisagée pour les remplacer?
J'ai essayé de trouver le document de justification C 2011, mais il ne semble pas encore être publié.
Réponses:
J'ai entendu des légendes variant de "cela devrait être facultatif car certains petits compilateurs devraient pouvoir être conformes C11 sans VLA" à "c'était une erreur en premier lieu". Je n'ai cependant jamais eu de réponse vraie et définitive à cela. En fin de compte, je ne crois pas que quiconque en ait vraiment un car la raison (en supposant - et en espérant - qu'il y en ait un) n'a jamais été divulguée (pour autant que mes anciennes recherches soient allées).
Extrait du chapitre 4 (page 13) de la justification de la Norme internationale - Langages de programmation - C 5.10 (2003)
Je souligne. Notez que cette décision va à l'encontre de leur propre justification. Pourtant, une autre chose est devenue facultative. Maintenant, vous obtenez
__STDC_NO_VLA__
soit le support VLA. C'est une décision très étrange.la source
D'après ce que je peux déterminer à partir des documents du comité public (en particulier N1395 ), l'une des principales raisons pour lesquelles les VLA (avec l'arithmétique et le threading complexes) étaient facultatifs était de permettre de créer des compilateurs C conformes pour les petits processeurs intégrés.
La tendance était que les éditeurs de compilateurs qui ciblent les systèmes embarqués restaient sur la norme C90, en raison de l'introduction de ces grandes fonctionnalités que leurs clients ne demandaient pas.
la source