Il n'y a pas de bound-check en C++ dans le langage. Tout est fait dans la bibliothèque standard. Si v est un std::vector, et que la STL est en mode debug, pour chaque accès à v[k], il y a du code qui vérifie la valeur de k et qui selon les implémentations de la STL lance une exception ou stope le programme. Tout ce qu'il voit en mode debug sur une boucle très régulière du type
for (int k = 0; v < v.size(); ++k) c'est qu'il ne sait même pas si il va finir la boucle ! Le compilateur ne peut donc plus rien faire. C'est un des gros désavantage du C++ d'avoir mis trop de choses dans la bibliothèque plutôt que dans le langage. Le seul moyen que je vois pour faire cela correctement est d'avoir les tableaux qui font intégralement parti du langage. C'est le cas en Fortran et en C#. Tu sembles dire que ce n'est pas le cas en Rust.
[^] # Re: Une chose que j'ai oublié d'ajouter
Posté par InsideLoop . En réponse à la dépêche Le langage Rust en version 1.0 alpha, on arrête de tout casser !. Évalué à 1.
Il n'y a pas de bound-check en C++ dans le langage. Tout est fait dans la bibliothèque standard. Si v est un std::vector, et que la STL est en mode debug, pour chaque accès à v[k], il y a du code qui vérifie la valeur de k et qui selon les implémentations de la STL lance une exception ou stope le programme. Tout ce qu'il voit en mode debug sur une boucle très régulière du type
c'est qu'il ne sait même pas si il va finir la boucle ! Le compilateur ne peut donc plus rien faire. C'est un des gros désavantage du C++ d'avoir mis trop de choses dans la bibliothèque plutôt que dans le langage. Le seul moyen que je vois pour faire cela correctement est d'avoir les tableaux qui font intégralement parti du langage. C'est le cas en Fortran et en C#. Tu sembles dire que ce n'est pas le cas en Rust.for (int k = 0; v < v.size(); ++k)