"kanze" writes:
[...]
| Au fond, ce qui me gène le plus, c'est l'utilisation du mot
| itérateur dans la STL.
Pour comprendre le choix de la STL, il faut avoir compris son
histoire ; en particulier, avoir retenu qu'elle utilise « itérateur »
dans le sens de « abstraction d'itération », assez proche de celle de
CLU -- voir les ancêtres de la STL en Scheme --, acceptant l'absence
de semi-coroutine en C++ et l'implémentant avec les moyens du bord.
http://www.stepanovpapers.com/
(lire « High Order Imperative Programming » pour voir l'évolution des
idées)
"kanze" <kanze@gabi-soft.fr> writes:
[...]
| Au fond, ce qui me gène le plus, c'est l'utilisation du mot
| itérateur dans la STL.
Pour comprendre le choix de la STL, il faut avoir compris son
histoire ; en particulier, avoir retenu qu'elle utilise « itérateur »
dans le sens de « abstraction d'itération », assez proche de celle de
CLU -- voir les ancêtres de la STL en Scheme --, acceptant l'absence
de semi-coroutine en C++ et l'implémentant avec les moyens du bord.
http://www.stepanovpapers.com/
(lire « High Order Imperative Programming » pour voir l'évolution des
idées)
"kanze" writes:
[...]
| Au fond, ce qui me gène le plus, c'est l'utilisation du mot
| itérateur dans la STL.
Pour comprendre le choix de la STL, il faut avoir compris son
histoire ; en particulier, avoir retenu qu'elle utilise « itérateur »
dans le sens de « abstraction d'itération », assez proche de celle de
CLU -- voir les ancêtres de la STL en Scheme --, acceptant l'absence
de semi-coroutine en C++ et l'implémentant avec les moyens du bord.
http://www.stepanovpapers.com/
(lire « High Order Imperative Programming » pour voir l'évolution des
idées)
Utiliser == ou != pour isDone(), il n'y a aucun rapport ; c'est
de l'abus pur et simple.
Au fond, ce qui me gène le plus, c'est l'utilisation du mot
itérateur dans la STL.
L'abstraction de la STL s'approche assez
à celle des pointeurs classiques
Utiliser == ou != pour isDone(), il n'y a aucun rapport ; c'est
de l'abus pur et simple.
Au fond, ce qui me gène le plus, c'est l'utilisation du mot
itérateur dans la STL.
L'abstraction de la STL s'approche assez
à celle des pointeurs classiques
Utiliser == ou != pour isDone(), il n'y a aucun rapport ; c'est
de l'abus pur et simple.
Au fond, ce qui me gène le plus, c'est l'utilisation du mot
itérateur dans la STL.
L'abstraction de la STL s'approche assez
à celle des pointeurs classiques
"kanze" writes:
[...]Au fond, ce qui me gène le plus, c'est l'utilisation du mot
itérateur dans la STL.
Pour comprendre le choix de la STL, il faut avoir compris son
histoire ; en particulier, avoir retenu qu'elle utilise
«@itérateur@» dans le sens de « abstraction d'itération »,
assez proche de celle de CLU -- voir les ancêtres de la STL en
Scheme --, acceptant l'absence de semi-coroutine en C++ et
l'implémentant avec les moyens du bord.
Et encore moins en termes de comparer -- une itération est
terminée, ou elle ne l'est pas, idépendamment de tout autre
objet. Il y a une incohérence dans le vocabulaire : un «
itérateur » ne supporte pas des opérateurs,
tu serais alors surpris de savoir que les pionniers qui ont
inventé la notion d'iterateur (et de coroutines,
semi-cotourinees) ont toujours pensé qu'ils supportaient des
opérateurs.
for (iter current = first; current != last; ++current)
se lit « tant qu'on n'a pas atteint le dernier état de calcul,
considère l'état suivant »
parce que les opérations fondamentales sur des itérateurs ne
correspondent pas aux opérations fondamentales sur les types
de base.
Et comme toujours, ce n'est pas toujours un cas noir et
blanc. Il y a bien des cas où l'abus est manifest : le cas
de l'opérateur + unaire pour isDone,
nous parlons encore de la STL ?
"kanze" <kanze@gabi-soft.fr> writes:
[...]
Au fond, ce qui me gène le plus, c'est l'utilisation du mot
itérateur dans la STL.
Pour comprendre le choix de la STL, il faut avoir compris son
histoire ; en particulier, avoir retenu qu'elle utilise
«@itérateur@» dans le sens de « abstraction d'itération »,
assez proche de celle de CLU -- voir les ancêtres de la STL en
Scheme --, acceptant l'absence de semi-coroutine en C++ et
l'implémentant avec les moyens du bord.
Et encore moins en termes de comparer -- une itération est
terminée, ou elle ne l'est pas, idépendamment de tout autre
objet. Il y a une incohérence dans le vocabulaire : un «
itérateur » ne supporte pas des opérateurs,
tu serais alors surpris de savoir que les pionniers qui ont
inventé la notion d'iterateur (et de coroutines,
semi-cotourinees) ont toujours pensé qu'ils supportaient des
opérateurs.
for (iter current = first; current != last; ++current)
se lit « tant qu'on n'a pas atteint le dernier état de calcul,
considère l'état suivant »
parce que les opérations fondamentales sur des itérateurs ne
correspondent pas aux opérations fondamentales sur les types
de base.
Et comme toujours, ce n'est pas toujours un cas noir et
blanc. Il y a bien des cas où l'abus est manifest : le cas
de l'opérateur + unaire pour isDone,
nous parlons encore de la STL ?
"kanze" writes:
[...]Au fond, ce qui me gène le plus, c'est l'utilisation du mot
itérateur dans la STL.
Pour comprendre le choix de la STL, il faut avoir compris son
histoire ; en particulier, avoir retenu qu'elle utilise
«@itérateur@» dans le sens de « abstraction d'itération »,
assez proche de celle de CLU -- voir les ancêtres de la STL en
Scheme --, acceptant l'absence de semi-coroutine en C++ et
l'implémentant avec les moyens du bord.
Et encore moins en termes de comparer -- une itération est
terminée, ou elle ne l'est pas, idépendamment de tout autre
objet. Il y a une incohérence dans le vocabulaire : un «
itérateur » ne supporte pas des opérateurs,
tu serais alors surpris de savoir que les pionniers qui ont
inventé la notion d'iterateur (et de coroutines,
semi-cotourinees) ont toujours pensé qu'ils supportaient des
opérateurs.
for (iter current = first; current != last; ++current)
se lit « tant qu'on n'a pas atteint le dernier état de calcul,
considère l'état suivant »
parce que les opérations fondamentales sur des itérateurs ne
correspondent pas aux opérations fondamentales sur les types
de base.
Et comme toujours, ce n'est pas toujours un cas noir et
blanc. Il y a bien des cas où l'abus est manifest : le cas
de l'opérateur + unaire pour isDone,
nous parlons encore de la STL ?
Dans le cas de la STL,
j'estime qu'il y avait bien un peu d'abus
Dans le cas de la STL,
j'estime qu'il y avait bien un peu d'abus
Dans le cas de la STL,
j'estime qu'il y avait bien un peu d'abus
On 19 Jan 2006 01:36:17 -0800, "kanze" :Utiliser == ou != pour isDone(), il n'y a aucun rapport ;
c'est de l'abus pur et simple.
Et " < ", c'est aussi de l'abus ?
Si on écrit
for (int i=0; i<5; ++i)
on peut bien écrire
for (int i=0; i != 5; ++i)
et, pourquoi pas,
for (iterator i= (quelque chose); i != (autre chose); ++i)
Au fond, ce qui me gène le plus, c'est l'utilisation du mot
itérateur dans la STL.
L'abstraction de la STL s'approche assez à celle des
pointeurs classiques
C'est même une généralisation pure et simple de la notion de
pointeur.
À tel point que dans certaines implémentations,
std::vector<T>::iterator est (était ?) un T*.
Ce qui te gêne, c'est qu'on appelle ça "iterator", i.e. que le
vocabulaire du C++ ne corresponde pas au vocabulaire
"classique" du monde de la POO.
Franchement, c'est pas tellement plus gênant que le "vector"
de C++ qui n'a rien à voir avec un vecteur.
Étant donné que tu connais trois langues, tu devrais savoir
que deux mots peuvent avoir des sens différents suivant le
langage. "Sensible" en anglais et "sensible" en français
n'ont rien à voir, de même que "vector" en C++ et "vector" (ou
"vecteur") en maths, ou encore "vector" (ou "vecteur") en
médecine.
On 19 Jan 2006 01:36:17 -0800, "kanze" <kanze@gabi-soft.fr>:
Utiliser == ou != pour isDone(), il n'y a aucun rapport ;
c'est de l'abus pur et simple.
Et " < ", c'est aussi de l'abus ?
Si on écrit
for (int i=0; i<5; ++i)
on peut bien écrire
for (int i=0; i != 5; ++i)
et, pourquoi pas,
for (iterator i= (quelque chose); i != (autre chose); ++i)
Au fond, ce qui me gène le plus, c'est l'utilisation du mot
itérateur dans la STL.
L'abstraction de la STL s'approche assez à celle des
pointeurs classiques
C'est même une généralisation pure et simple de la notion de
pointeur.
À tel point que dans certaines implémentations,
std::vector<T>::iterator est (était ?) un T*.
Ce qui te gêne, c'est qu'on appelle ça "iterator", i.e. que le
vocabulaire du C++ ne corresponde pas au vocabulaire
"classique" du monde de la POO.
Franchement, c'est pas tellement plus gênant que le "vector"
de C++ qui n'a rien à voir avec un vecteur.
Étant donné que tu connais trois langues, tu devrais savoir
que deux mots peuvent avoir des sens différents suivant le
langage. "Sensible" en anglais et "sensible" en français
n'ont rien à voir, de même que "vector" en C++ et "vector" (ou
"vecteur") en maths, ou encore "vector" (ou "vecteur") en
médecine.
On 19 Jan 2006 01:36:17 -0800, "kanze" :Utiliser == ou != pour isDone(), il n'y a aucun rapport ;
c'est de l'abus pur et simple.
Et " < ", c'est aussi de l'abus ?
Si on écrit
for (int i=0; i<5; ++i)
on peut bien écrire
for (int i=0; i != 5; ++i)
et, pourquoi pas,
for (iterator i= (quelque chose); i != (autre chose); ++i)
Au fond, ce qui me gène le plus, c'est l'utilisation du mot
itérateur dans la STL.
L'abstraction de la STL s'approche assez à celle des
pointeurs classiques
C'est même une généralisation pure et simple de la notion de
pointeur.
À tel point que dans certaines implémentations,
std::vector<T>::iterator est (était ?) un T*.
Ce qui te gêne, c'est qu'on appelle ça "iterator", i.e. que le
vocabulaire du C++ ne corresponde pas au vocabulaire
"classique" du monde de la POO.
Franchement, c'est pas tellement plus gênant que le "vector"
de C++ qui n'a rien à voir avec un vecteur.
Étant donné que tu connais trois langues, tu devrais savoir
que deux mots peuvent avoir des sens différents suivant le
langage. "Sensible" en anglais et "sensible" en français
n'ont rien à voir, de même que "vector" en C++ et "vector" (ou
"vecteur") en maths, ou encore "vector" (ou "vecteur") en
médecine.
Quelqu'un a posté une
classe avec « iterator » dans son nom, et certains se sont mis à
la critiquer parce qu'elle n'était pas conforme à la STL.
Maintenant, si tu veux parler des cas où le nom ne convient
vraiment pas, uniquement sur la base de sa sémantique, parlons
de std::remove.
(Et en passant, pourquoi dans la STL, il
s'appelle parfois remove, et d'autres fois erase ?)
Ce n'est pas un grand problème dans la
mesure où personne n'oublie que le mot peut avoir plusieurs
significations, et où tout le monde le tient en compte, et se
pose la question d'abord, quelle est la signification voulue par
auteur ici,
Quelqu'un a posté une
classe avec « iterator » dans son nom, et certains se sont mis à
la critiquer parce qu'elle n'était pas conforme à la STL.
Maintenant, si tu veux parler des cas où le nom ne convient
vraiment pas, uniquement sur la base de sa sémantique, parlons
de std::remove.
(Et en passant, pourquoi dans la STL, il
s'appelle parfois remove, et d'autres fois erase ?)
Ce n'est pas un grand problème dans la
mesure où personne n'oublie que le mot peut avoir plusieurs
significations, et où tout le monde le tient en compte, et se
pose la question d'abord, quelle est la signification voulue par
auteur ici,
Quelqu'un a posté une
classe avec « iterator » dans son nom, et certains se sont mis à
la critiquer parce qu'elle n'était pas conforme à la STL.
Maintenant, si tu veux parler des cas où le nom ne convient
vraiment pas, uniquement sur la base de sa sémantique, parlons
de std::remove.
(Et en passant, pourquoi dans la STL, il
s'appelle parfois remove, et d'autres fois erase ?)
Ce n'est pas un grand problème dans la
mesure où personne n'oublie que le mot peut avoir plusieurs
significations, et où tout le monde le tient en compte, et se
pose la question d'abord, quelle est la signification voulue par
auteur ici,
Qui a dit quoique ce soit contre l'idée de surcharger les
opérateurs pour les objets. Ce qui n'est pas bien, c'est de
surcharger avec des significations arbitraires, sans rapport
avec la sémantique de l'opérateur de base. À la longue, ça rend
les programmes illisibles.
Qui a dit quoique ce soit contre l'idée de surcharger les
opérateurs pour les objets. Ce qui n'est pas bien, c'est de
surcharger avec des significations arbitraires, sans rapport
avec la sémantique de l'opérateur de base. À la longue, ça rend
les programmes illisibles.
Qui a dit quoique ce soit contre l'idée de surcharger les
opérateurs pour les objets. Ce qui n'est pas bien, c'est de
surcharger avec des significations arbitraires, sans rapport
avec la sémantique de l'opérateur de base. À la longue, ça rend
les programmes illisibles.