Ce que je sais c'est que la première solution est peu lisible est pas trés
naturelle. La deuxième me parait bien plus simple, et idiomatique. Qu'en
est-il niveau rapidité ? le compilo n'est-il pas capable d'optimiser tout
seul ce genre de boucle ?
C'est probable, en tous cas pour nous : comme nos claviers n'ont pas les touches [ et ], il est clairement plus rapide de taper la première forme.
À part cela, je ne vois pas vraiment de différence (avec les compilos actuels). De toute manière, si ton programme est contraint en temps d'exécution au niveau de l'initialisation, il y a probablement un problème de définition des données....
Ce que je sais c'est que la première solution est peu lisible est pas trés naturelle.
Euh, il va falloir d'habituer alors, c'est quand même très courant en C.
La deuxième me parait bien plus simple, et idiomatique.
L'idiomatisme en question est connu comme le syndrome Pascal...
le compilo n'est-il pas capable d'optimiser tout seul ce genre de boucle ?
Si bien sûr, il va le réécrire en (pour 3 pipelines) p[7]=p[3]=p[6]=p[2]=p[9]=p[5]=p[1]=p[8]=p[4]=p[0]=0; (voire faire des groupés sur des doubles entiers ou utilisant 0f).
Un compilateur plus simplet va appliquer un schéma plus passe-partout et le transformer en {int zéro=0, *q=p, compteur=2; goto début; boucle: *q++=zéro; *q++=zéro; *q++=zéro; *q++=zéro; *q++=zéro; *q++=zéro;début:*q++=zéro; *q++=zéro; if(--compteur)goto boucle; } qui sont certainement moins facile à lire pour un humain, mais clairement équivalent pour un compilateur, et probablement plus proche du langage machine cible.
Antoine
En news:dtutmm$abm$1@news.rd.francetelecom.fr, AG va escriure:
d'aucun prétendent que :
for(i=0;i<10;i++) *p++=0;
est plus rapide que :
for(i=0;i<10;i++) p[i]=0;
C'est probable, en tous cas pour nous : comme nos claviers n'ont pas les
touches [ et ], il est clairement plus rapide de taper la première forme.
À part cela, je ne vois pas vraiment de différence (avec les compilos
actuels).
De toute manière, si ton programme est contraint en temps d'exécution au
niveau de l'initialisation, il y a probablement un problème de définition
des données....
Ce que je sais c'est que la première solution est peu lisible est pas
trés naturelle.
Euh, il va falloir d'habituer alors, c'est quand même très courant en C.
La deuxième me parait bien plus simple, et idiomatique.
L'idiomatisme en question est connu comme le syndrome Pascal...
le compilo n'est-il pas capable d'optimiser tout seul ce genre de
boucle ?
Si bien sûr, il va le réécrire en (pour 3 pipelines)
p[7]=p[3]=p[6]=p[2]=p[9]=p[5]=p[1]=p[8]=p[4]=p[0]=0;
(voire faire des groupés sur des doubles entiers ou utilisant 0f).
Un compilateur plus simplet va appliquer un schéma plus passe-partout et le
transformer en
{int zéro=0, *q=p, compteur=2;
goto début;
boucle:
*q++=zéro; *q++=zéro; *q++=zéro; *q++=zéro;
*q++=zéro; *q++=zéro;début:*q++=zéro; *q++=zéro;
if(--compteur)goto boucle;
}
qui sont certainement moins facile à lire pour un humain, mais clairement
équivalent pour un compilateur, et probablement plus proche du langage
machine cible.
C'est probable, en tous cas pour nous : comme nos claviers n'ont pas les touches [ et ], il est clairement plus rapide de taper la première forme.
À part cela, je ne vois pas vraiment de différence (avec les compilos actuels). De toute manière, si ton programme est contraint en temps d'exécution au niveau de l'initialisation, il y a probablement un problème de définition des données....
Ce que je sais c'est que la première solution est peu lisible est pas trés naturelle.
Euh, il va falloir d'habituer alors, c'est quand même très courant en C.
La deuxième me parait bien plus simple, et idiomatique.
L'idiomatisme en question est connu comme le syndrome Pascal...
le compilo n'est-il pas capable d'optimiser tout seul ce genre de boucle ?
Si bien sûr, il va le réécrire en (pour 3 pipelines) p[7]=p[3]=p[6]=p[2]=p[9]=p[5]=p[1]=p[8]=p[4]=p[0]=0; (voire faire des groupés sur des doubles entiers ou utilisant 0f).
Un compilateur plus simplet va appliquer un schéma plus passe-partout et le transformer en {int zéro=0, *q=p, compteur=2; goto début; boucle: *q++=zéro; *q++=zéro; *q++=zéro; *q++=zéro; *q++=zéro; *q++=zéro;début:*q++=zéro; *q++=zéro; if(--compteur)goto boucle; } qui sont certainement moins facile à lire pour un humain, mais clairement équivalent pour un compilateur, et probablement plus proche du langage machine cible.
Antoine
Marc Boyer
Le 28-02-2006, Antoine Leca a écrit :
Ce que je sais c'est que la première solution est peu lisible est pas trés naturelle.
Euh, il va falloir d'habituer alors, c'est quand même très courant en C.
Et les itérateurs de la STL sont en train de populariser la notation en C++ (puisqu'on fera du it++ aussi pour parcourir une liste chainée).
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exiter des sots IF -- Rudyard Kipling
Le 28-02-2006, Antoine Leca <root@localhost.invalid> a écrit :
Ce que je sais c'est que la première solution est peu lisible est pas
trés naturelle.
Euh, il va falloir d'habituer alors, c'est quand même très courant en C.
Et les itérateurs de la STL sont en train de populariser la
notation en C++ (puisqu'on fera du it++ aussi pour parcourir
une liste chainée).
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exiter des sots
IF -- Rudyard Kipling