Sauter un bound check (vérification que i est entre 0 et t.len() quand on fait t[i]) dans une boucle appelée des millions de fois, quand on est sûr que l'indice est bien dans les bornes.
C'est très souvent faisable sans passer par unsafe.
Le compilateur va générer un bound check uniquement dans les cas où il ne peut pas déterminer à la compilation si l'accès risque d'être hors bornes. Si on ajoute une vérification explicite qui lui permet d'être sûr qu'aucun accès hors bornes n'est possible, il n'y aura pas de bound check.
Une autre façon est de modifier la boucle pour utiliser un itérateur, quand c'est possible.
[^] # Re: Gestion mémoire etc.
Posté par Buf (Mastodon) . En réponse au journal PullRequest d'une application en Rust. Évalué à 3.
À propos de
unsafe, quand tu dis :C'est très souvent faisable sans passer par
unsafe.Le compilateur va générer un bound check uniquement dans les cas où il ne peut pas déterminer à la compilation si l'accès risque d'être hors bornes. Si on ajoute une vérification explicite qui lui permet d'être sûr qu'aucun accès hors bornes n'est possible, il n'y aura pas de bound check.
Une autre façon est de modifier la boucle pour utiliser un itérateur, quand c'est possible.