OVH Cloud OVH Cloud

Contigüité des éléments d'un `std::vector´

167 réponses
Avatar
drkm
Je viens de tomber sur un message de Michel, d'il y a un mois, dont
voici un extrait :

> From: "Michel Michaud" <mm@gdzid.com>
> Subject: Re: buffer et std::vector<char> passage de l'un a l'autre
> Message-ID: <pQnHa.816$5d.225371@news20.bellglobal.com>
> Date: Mon, 16 Jun 2003 14:16:52 -0400

> Avec

> vector<char> v(taille);

> &v[0] est un char* qui peut être passé aux fonctions attendant un
> char[]/char*. La norme ne dit pas explicitement que les char sont
> contigus, mais c'est un fait et il y a une correction à la norme qui
> l'indique aussi.

J'avais toujours entendu dire que la contigüités des éléments d'un
vecteur était garantie. Apparemment non. Pour ce qui est de la
correction à la norme, je suppose que tu parlais d'un DR. En as-tu la
référence, stp ?

--drkm

10 réponses

Avatar
Arnaud Meurgues
wrote:

Et moi, je ne vois pas ce qu'il y a de diffamant à dire qu'on n'y avait
pas pensé. C'est tout. On ne pense jamais à tout.


Je suppose que ça peut être diffamant d'une certaine manière en ce sens
que cela dénote une certaine faiblesse (certes humaine).

Je n'ai jusqu'ici aucune raison à croire que qui que ce soit ait
réelement eu une « intention » explicite.


Voilà. Je pense que ce qui choque le plus est que tu en déduise que
personne n'ait une une intention explicite.
J'ai vaguement le sentiment que la différence de point de vue s'accorde
avec une différence culturelle : les anglo-saxons ont la réputation
d'être plus pragmatiques que les français (ainsi leur droit est-il fondé
sur la jurisprudence, plus que sur des lois génériques, d'après ce que
j'ai lu ou entendu). Je me trompe peut-être.
Mais il semble que pour toi, le *fait* qu'il n'y ait pas *mention
explicite* de cette intention avant la norme prime sur le fait que des
gens aient pu y penser et savoir le vouloir.

Même dans les propos de
Stroustrup que j'ai lu, à l'époque, il disait plutôt quelque chose du
genre « il ne m'était pas venu à l'ésprit que la mémoire pouvait ne pas
être contiguë », ou quelque chose du genre.


Ce qui ne signifie pas qu'il n'avait pas l'intention qu'elle le soit.
Peut-être aussi doit-on distinguer intention et volition. L'intention
étant plus passive que la volition.
En disant qu'il a été inventé qu'on avait l'intention de la contiguïté,
tu sous-entends que personne ne s'était posé la question, même en son
fort intérieur, ce qui n'est peut-être pas vrai et dont on ne peut
juger. Et par la même occasion, cela diminue un peu le mérite des
personnes concernées. C'est pourquoi cette « accusation », je pense, est
mal perçue.

Enfin, d'après mes
souvenirs. Parce que je n'y ai pas prété beaucoup d'attention -- ce
qu'il a pu pensé avant n'avait pas vraiment d'importance, dans la mésure
qu'il ne l'a pas dit ou écrit quelque part.


Voilà qui illustre bien le pragmatisme dont je parlais. :)

Et je continue à penser que c'est le cas. Je ne comprends pas toute
cette histoire de « diffamation ». On n'y a pas pensé. Ou au moins, si
on y avait pensé, on n'en a pas laissé des traces, ce qui revient au
fond au même. Et c'est tout. Où en est la honte ?

Par la suite, il s'avérait qu'on aurait dû y penser. Ce sont des choses
qui arrivent. On l'a donc fait la correction. Et pour faire bien, on en
a couché la motivation en termes pour faire plaisir à ISO. Chose qui me
semble aussi tout à fait normale.


En fait, il suffirait de savoir si les protagonistes de l'histoire
(Stroustrup, Stepanov) sont d'accord avec cette version des faits et que
la seule raison pour laquelle ils ont fait croire que l'intention y
était était de tromper l'ISO.
Leur avis seraient, à mon sens, le seul moyen constructif de clore ce
débat qui ne l'est guère.

Arnaud

Avatar
Arnaud Meurgues
Julien Blanc wrote:

ça c'est un autre débat :). Ceci dit, je pense que si on n'a pas besoin
de la compatibilité C, alors on a tout intérêt à utiliser autre chose
que C++.


C'est peut-être un peu outré dans l'autre sens. C++ a des qualités
intrinsèques autres que sa compatibilité avec C.

- il est établi dans la norme *actuelle* que vector *doit* utiliser une
représentation contigüe (il semblerait que ce soit oui)
- cela est le cas dans toutes les implémentations (là aussi, il
semblerait que ce soit oui)


Vi. C'est effectivement l'essentiel.

Arnaud

Avatar
Arnaud Meurgues
Julien Blanc wrote:

J'arrête là, c'est un débat sans fin de toute manière :), et je ne crois
même pas que nos positions soient vraiment éloignées.


Ok. Je comprends mieux. J'avais compris que ton point de vue était que
le seul intérêt de C++ était sa compatibilité avec le C... :)

Dont acte.

Arnaud

Avatar
kanze
(Arnaud Debaene) wrote in message
news:...
"Alain Naigeon" wrote in message
news:<3f145a08$0$26591$...
"Arnaud Debaene" a écrit dans le message news:


"Alain Naigeon" wrote in message
news:<3f107896$0$10882$...

De mon point de vue, la compatibilité de std::vector avec des
interfaces "C" du type read (Posix) est une justification
suffisante.


Cela dépend du prix à payer...


??? Quel "prix"? En quoi cette obligation de continuité de pénalise
t'elle dans ton abstraction si tu n'en tiens pas compte? Au passage,
utiliser une implémentation contigue est à ma connaissance la seule
façon de garantir les "requirements" (traduction?) de vector en ce qui
concerne les performances, à savoir accès en temps constant, recherche
en O(N), ....


Pas du tout. C'est la seule façon *raisonable*, soit, mais pas la seule
façon dans l'absolue.

En passant, mon GB_DynArrayOf remplissait les contraints de std::vector,
sans utiliser une implémentation contiguë. Mais c'était une autre
classe, avec un contraint de ne jamais invalider un pointeur ou une
référence aussi (et une interface complétement différente).

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16



Avatar
kanze
Arnaud Meurgues wrote in message
news:<3f1510c9$0$29655$...
wrote:

Et moi, je ne vois pas ce qu'il y a de diffamant à dire qu'on n'y
avait pas pensé. C'est tout. On ne pense jamais à tout.


Je suppose que ça peut être diffamant d'une certaine manière en ce
sens que cela dénote une certaine faiblesse (certes humaine).


Alors, toute participation à une revue de code est diffamante ?

Je n'ai jusqu'ici aucune raison à croire que qui que ce soit ait
réelement eu une « intention » explicite.


Voilà. Je pense que ce qui choque le plus est que tu en déduise que
personne n'ait une une intention explicite.


Je peux me tromper, évidemment, mais je n'ai rien vue qui me laisse
penser que l'intention explicite existait avant que l'exigence s'est
fait sentir. C'est facile à dire après le coup : c'est ce que j'ai
toujours voulu. Dans un certain sens, c'est vrai -- on a toujours voulu
que les std::vector puisse servir à la place des T[], et la contiguïté y
aide. Mais ce genre de vouloir un peu vague est loin d'être une
intention concrète et explicite que la contiguïté fasse partie de
l'interface contractuelle.

J'ai vaguement le sentiment que la différence de point de vue
s'accorde avec une différence culturelle : les anglo-saxons ont la
réputation d'être plus pragmatiques que les français (ainsi leur droit
est-il fondé sur la jurisprudence, plus que sur des lois génériques,
d'après ce que j'ai lu ou entendu). Je me trompe peut-être. Mais il
semble que pour toi, le *fait* qu'il n'y ait pas *mention explicite*
de cette intention avant la norme prime sur le fait que des gens aient
pu y penser et savoir le vouloir.


Peut-être en partie. Je crois plutôt en revanche qu'il y a une attitude
noir ou blanc, tandis que moi, je ne vois que des tonalités de gris.
Pour moi, une intention explicite, c'est bien un noir, très foncé, qu'il
n'y pas. De l'autre côté, j'ai l'impression que la « diffamation » que
certains voient (et non seulement Gaby -- c'est clairment plus qu'un
simple accroc entre nous deux), c'est un blanc qu'ils veulent s'opposer
à ce noir. Or, si je ne crois pas au noir, je ne crois pas au blanc non
plus.

Même dans les propos de Stroustrup que j'ai lu, à l'époque, il
disait plutôt quelque chose du genre « il ne m'était pas venu à
l'ésprit que la mémoire pouvait ne pas être contiguë », ou quelque
chose du genre.


Ce qui ne signifie pas qu'il n'avait pas l'intention qu'elle le soit.
Peut-être aussi doit-on distinguer intention et volition. L'intention
étant plus passive que la volition. En disant qu'il a été inventé
qu'on avait l'intention de la contiguïté, tu sous-entends que personne
ne s'était posé la question, même en son fort intérieur, ce qui n'est
peut-être pas vrai et dont on ne peut juger.


Dans la pratique, ce qui est resté dans son for intérieur n'a pas
existé. Ce n'est donc pas la peine d'en parler maintenant.

Et par la même occasion, cela diminue un peu le mérite des personnes
concernées. C'est pourquoi cette « accusation », je pense, est mal
perçue.


En quoi est-ce qu'il diminuirait la mérite en quoique ce soit ? En ce
qui me concerne, la plus grande mérite de Stroustrup, bien au delà de
ces accomplissements techniques, c'est l'ouverture et la souplesse qu'il
a toujours montré pour d'autres idées. Je ne vois pas où l'histoire de
la contiguïté de std::vector puisse changer quoique ce soit là-dedans.

Enfin, d'après mes souvenirs. Parce que je n'y ai pas prété beaucoup
d'attention -- ce qu'il a pu pensé avant n'avait pas vraiment
d'importance, dans la mésure qu'il ne l'a pas dit ou écrit quelque
part.


Voilà qui illustre bien le pragmatisme dont je parlais. :)

Et je continue à penser que c'est le cas. Je ne comprends pas toute
cette histoire de « diffamation ». On n'y a pas pensé. Ou au moins,
si on y avait pensé, on n'en a pas laissé des traces, ce qui revient
au fond au même. Et c'est tout. Où en est la honte ?

Par la suite, il s'avérait qu'on aurait dû y penser. Ce sont des
choses qui arrivent. On l'a donc fait la correction. Et pour faire
bien, on en a couché la motivation en termes pour faire plaisir à
ISO. Chose qui me semble aussi tout à fait normale.


En fait, il suffirait de savoir si les protagonistes de l'histoire
(Stroustrup, Stepanov) sont d'accord avec cette version des faits et
que la seule raison pour laquelle ils ont fait croire que l'intention
y était était de tromper l'ISO.


Enfin, je ne crois pas vraiment qu'il s'agit de « tromper », au moins
pas d'une façon formelle.

Leur avis seraient, à mon sens, le seul moyen constructif de clore ce
débat qui ne l'est guère.


Je ne sais pas. Parce que j'ai l'impression qu'il n'y a pas de véritable
dessaccord sur leur « avis ». Il y a plutôt dessaccord sur sa
signification.

En ce qui concerne « clore le débat » : franchement, je m'étonne que
tant de gens ont voulu l'ouvrir. J'ai fait une remarque parenthètique
sur un évenemment passé, dont j'approuve totalement les conséquences. Ou
bien, on m'a mal compris, ou bien, je me suis mal exprimé, ou bien, je
ne sais pas quoi -- mais j'ai l'impression qu'on essaie de couper les
cheveux en quatre, pour accomplir quoi ? Ce n'était certainement pas mon
intention de diffamer qui que ce soit -- même quand je ne suis pas
d'accord sur le fond, j'essaie d'éviter la diffamation, et dans ce
cas-ci, j'approuve ce qui a été fait sur tous les plans. Je n'aime pas
non plus qu'on réécrit l'histoire -- or, autant que je sache, le
contrait de la contiguïté n'est aparu qu'après 1998. Or, là, je peux
bien me tromper, mais jusqu'ici, personne n'a voulu on n'a pu montrer le
contraire.

Et en tout cas, qu'est-ce que ça change ?

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16


Avatar
Arnaud Meurgues
wrote:

Je suppose que ça peut être diffamant d'une certaine manière en ce
sens que cela dénote une certaine faiblesse (certes humaine).
Alors, toute participation à une revue de code est diffamante ?



En elle-même, non.
Si tu rendais publique que Monsieur Machin fait toujours plus d'erreurs
que les autres, alors ça en deviendrait. La diffamation implique la
publication.

Dans la pratique, ce qui est resté dans son for intérieur n'a pas
existé.


Je pense que c'est dans cette façon de voir les choses que se trouve le
noeud du problème.
Transposé en langage informatique, ça veut dire que tu considère que
n'existe que le comportement observable et pas les détails
d'implémentation. C'est une façon de voir qui n'est pas celle de tout le
monde (mais qui est opérative).

Enfin, je ne crois pas vraiment qu'il s'agit de « tromper », au moins
pas d'une façon formelle.


Il me semblait que tu avais dit qu'on avait fait passer ça pour un oubli
car c'était le seul moyen de l'intégrer dans TC1 selon les protocoles de
l'ISO ?

Arnaud


Avatar
Gabriel Dos Reis
Arnaud Meurgues writes:

| Alain Naigeon wrote:
|
| > Une première tentative de programmation objet ?
|
| Pourquoi alors être parti du C (with classes) ? Il y a smalltalk pour
| ça, non ?

Toi, tu as besoin de lire « the Designa nd Evolution of C++ ».

[...]

| Tu sembles considérer qu'il est maintenant temps de couper le
| cordon. Ce n'est pas forcément une décision pragmatique car les
| intéractions C/C++ sont encore fréquentes et le C est loin d'être mort.

Yep.

-- Gaby
Avatar
Gabriel Dos Reis
writes:

| Et je continue à penser que c'est le cas. Je ne comprends pas toute
| cette histoire de « diffamation ».

Ben voyons. Dire que quelqu'un a « inventé un oubli » alors qu'en même
temps on affirme être au courant de l'histoire qui raconte que ce
n'est pas une invention, tu ne peux pas comprendre.

-- Gaby
Avatar
Gabriel Dos Reis
writes:

| Peut-être en partie. Je crois plutôt en revanche qu'il y a une attitude
| noir ou blanc, tandis que moi, je ne vois que des tonalités de gris.
| Pour moi, une intention explicite, c'est bien un noir, très foncé, qu'il
| n'y pas. De l'autre côté, j'ai l'impression que la « diffamation » que
| certains voient (et non seulement Gaby -- c'est clairment plus qu'un
| simple accroc entre nous deux), c'est un blanc qu'ils veulent s'opposer
| à ce noir.

vu ma couleur c'est amusant <g>. Et pour te rassurer, et non le niveau
de gris ne t'est pas exclusivement réservé, et non je ne vois pas que
tu blanc ou du noir, et non tu ne s'en sortira pas comme ça.

[...]

| > En fait, il suffirait de savoir si les protagonistes de l'histoire
| > (Stroustrup, Stepanov) sont d'accord avec cette version des faits et
| > que la seule raison pour laquelle ils ont fait croire que l'intention
| > y était était de tromper l'ISO.
|
| Enfin, je ne crois pas vraiment qu'il s'agit de « tromper », au moins
| pas d'une façon formelle.

Ben, c'est que ta phrase veut dire.

[...]

| non plus qu'on réécrit l'histoire -- or, autant que je sache, le
| contrait de la contiguïté n'est aparu qu'après 1998. Or, là, je peux
| bien me tromper, mais jusqu'ici, personne n'a voulu on n'a pu montrer le
| contraire.

au cas où tu saisirais le débat en cours, je te rappelle que personne
dispute le fait qu'officiellement la contiguité ne soit explicitement
mentionnée dans les documents officiels qu'après 1998. Tu es en train
de taper à côter de la plaque.

-- Gaby
Avatar
Alain Naigeon
"Arnaud Meurgues" a écrit dans le message
news: 3f15630e$0$18434$
wrote:

Si tu rendais publique que Monsieur Machin fait toujours plus d'erreurs
que les autres, alors ça en deviendrait.


Si Monsieur Machin *fait* plus d'erreur, alors ce n'est pas de
la diffamation, juste une indélicatesse non condamnable
en droit.

--

Français *==> "Musique renaissance" <==* English
midi - facsimiles - ligatures - mensuration
http://anaigeon.free.fr | http://www.medieval.org/emfaq/anaigeon/
Alain Naigeon - - Strasbourg, France