PS : je voudrais ajouter qu'en outre, utiliser un entier est (peut être, je ne suis pas assez expert pour savoir ce que llvm est capable ou n'est pas capable d'optimiser dans ce cas) moins performant, pour une raison simple. Rust ajoute du bound check au runtime, pour vérifier que l'opérateur d'indexation array[i] n'indexe pas une zone mémoire non initialisée. Si llvm n'est pas suffisament intelligent, il est probable que ton code d'exemple utilise deux branches : une lors de la boucle (ou de l'iterateur) pour vérifier que l'appel à .next() n'a pas dépassé la fin du tableau. Et une nouvelle quand tu vas appeler l'indexation [] pour vérifier à nouveau ce prédicat. Encore une fois, llvm est peut être en mesure d'optimiser ça mais je n'y mettrais pas ma main à couper. Les optimisations valides en C++ ne le sont pas forcément en rust.
Par contre l'itérateur Zip est peut être un peu moins peformant parce qu'il n'est pas au courant que les deux vecteurs ont exactement la même taille. Cela dit, il est probablement possible d'exprimer cela avec un peu d'imagination.
[^] # Re: Une chose que j'ai oublié d'ajouter
Posté par Enj0lras . En réponse à la dépêche Le langage Rust en version 1.0 alpha, on arrête de tout casser !. Évalué à 2. Dernière modification le 02 février 2015 à 01:35.
PS : je voudrais ajouter qu'en outre, utiliser un entier est (peut être, je ne suis pas assez expert pour savoir ce que llvm est capable ou n'est pas capable d'optimiser dans ce cas) moins performant, pour une raison simple. Rust ajoute du bound check au runtime, pour vérifier que l'opérateur d'indexation array[i] n'indexe pas une zone mémoire non initialisée. Si llvm n'est pas suffisament intelligent, il est probable que ton code d'exemple utilise deux branches : une lors de la boucle (ou de l'iterateur) pour vérifier que l'appel à .next() n'a pas dépassé la fin du tableau. Et une nouvelle quand tu vas appeler l'indexation [] pour vérifier à nouveau ce prédicat. Encore une fois, llvm est peut être en mesure d'optimiser ça mais je n'y mettrais pas ma main à couper. Les optimisations valides en C++ ne le sont pas forcément en rust.
Par contre l'itérateur Zip est peut être un peu moins peformant parce qu'il n'est pas au courant que les deux vecteurs ont exactement la même taille. Cela dit, il est probablement possible d'exprimer cela avec un peu d'imagination.