OVH Cloud OVH Cloud

std::string

87 réponses
Avatar
JBB
J'ai lu dans ce forum (je retrouve plus ou) que personne n'aimait
std::string .
Pourquoi donc?
A part le fait que chaque librairie utilise son propre type CString,
QString ... et que du coup ça fait moche d'utiliser std::string.

10 réponses

1 2 3 4 5
Avatar
Gabriel Dos Reis
JBB writes:

| J'ai lu dans ce forum (je retrouve plus ou) que personne n'aimait
| std::string .
| Pourquoi donc?

C'est comme tous les compromis : tout le monde est satisfait, mais
personne n'est content.

-- Gaby
Avatar
James Kanze
JBB wrote:
J'ai lu dans ce forum (je retrouve plus ou) que personne
n'aimait std::string .


Pourquoi donc?


C'est une conception plutôt baclée, et pas du tout propre.
L'interface rend une implémentation efficace, particulièrement
dans un milieu multithreaded, impossible. L'ensemble de
fonctions fait que c'est un mélange de plusieurs conceptes --
parfois on traite en termes d'itérateurs, parfois en termes de
première indice/longueur. En somme, elle est tout sauf une belle
conception.

Ceci dit, elle fonctionne pour la plupart des utilisations. Et
elle est standard. Ce qui fait que ...

A part le fait que chaque librairie utilise son propre type
CString, QString ... et que du coup ça fait moche d'utiliser
std::string.


c'est précisement la motivation pour n'utiliser que std::string.
Partout.

En ce qui concerne le nombre de chaînes défini dans les autres
bibliothèques : il faut dire que la norme a trainé beaucoup à
sortir. Ce qui a fait que les autres bibliothèques étaient bien
obligées à définir leur propre type de chaîne. Qu'il sont obligé
encore à supporter, évidemment, pour des raisons de
compatibilité avec la passée. On pourrait espérer néaumoins que
dans une future très proche, elles doublent toutes leurs
interfaces avec leurs chaînes par une avec std::string. (On
pourrait espérer, mais alors... Pourquoi est-ce qu'elles ont
attendu déjà si longtemps.)

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34

Avatar
James Kanze
Gabriel Dos Reis wrote:
JBB writes:


| J'ai lu dans ce forum (je retrouve plus ou) que personne
| n'aimait std::string . Pourquoi donc?


C'est comme tous les compromis : tout le monde est satisfait, mais
personne n'est content.


Dans le cas de std::string, je crois que même satisfait est une
exagération. Disons que sauf cas exceptionnel, elle n'est pas
assez mauvaise pour justifier l'utilisation de quelque chose de
non standard.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34

Avatar
Gabriel Dos Reis
James Kanze writes:

| JBB wrote:
| > J'ai lu dans ce forum (je retrouve plus ou) que personne
| > n'aimait std::string .
|
| > Pourquoi donc?
|
| C'est une conception plutôt baclée, et pas du tout propre.

Je ne suis pas sûr d'être d'accord avec le qualificatif « baclée. »
Certainement, elle fait partie des classes les plus vielles de la
biliothèque (en comptant les ancêtres). Chacun a voulu y voir sa
propre conception de chaîne de caractères.

string s;
assert(s[s.size()] == 0);

les gens qui ont fait ça ont pris leur temps ;-)

-- Gaby
Avatar
Michel Michaud
Dans le message 42ce57e5$0$28673$,
J'ai lu dans ce forum (je retrouve plus ou) que personne n'aimait
std::string .


J'aime bien std::string... (il est facile de trouver des raisons)

Pourquoi donc?


Je crois que l'expression anglaise est « everything and the
kitchen sink ». D'autres auraient préféré des chaînes immuables
pour en permettre une utilisation plus facile dans les programmes
multi-fils.

A part le fait que chaque librairie utilise son propre type
CString,QString ... et que du coup ça fait moche d'utiliser
std::string.


En fait, c'est une raison pour employer std::string partout où
l'on peut et de ne faire que les transformations dans un autre
type au dernier moment, tout ça afin d'ajouter un peu de
portabilité. Ceci dit, je ne sais pas si c'est très courant...

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
Fabien LE LEZ
On Sat, 9 Jul 2005 13:09:54 -0400, "Michel Michaud" :

Je crois que l'expression anglaise est « everything and the
kitchen sink ».


C'est marrant, tu emploies une expression anglaise ici (J'imagine que
c'est l'équivalent de "le beurre et l'argent du beurre" ?)...

D'autres auraient préféré des chaînes immuables
pour en permettre une utilisation plus facile dans les programmes

multi-fils.


... et paradoxalement, une traduction littérale ici (J'ai mis un petit
moment à la décrypter, celle-là...)

Avatar
Michel Michaud
Dans le message ,
On Sat, 9 Jul 2005 13:09:54 -0400, "Michel Michaud" :

Je crois que l'expression anglaise est « everything and the
kitchen sink ».


C'est marrant, tu emploies une expression anglaise ici (J'imagine
que c'est l'équivalent de "le beurre et l'argent du beurre" ?)...


Je ne connais pas l'équivalent français... Et celle que tu proposes
n'est pas la bonne (cette autre expression existe aussi en anglais).

Peut-être que le plus proche est « faire plaisir à tout le monde et
à son père », mais ce n'est pas tout à fait ça non plus...

D'autres auraient préféré des chaînes immuables
pour en permettre une utilisation plus facile dans les programmes

multi-fils.


... et paradoxalement, une traduction littérale ici (J'ai mis un
petit moment à la décrypter, celle-là...)


C'est la traduction classique, non ? Bien que pour différencier
fils (« fiss ») de fil(s), on dit souvent multi-fils d'exécution.

Tu connais une autre traduction ? Ça m'intéresse, car elle est
pas terrible celle-là, particulièrement par écrit :-)

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Avatar
Michel Michaud
Dans le message TlUze.13312$,
Dans le message ,
C'est marrant, tu emploies une expression anglaise ici (J'imagine
que c'est l'équivalent de "le beurre et l'argent du beurre" ?)...


Je ne connais pas l'équivalent français... Et celle que tu proposes
n'est pas la bonne (cette autre expression existe aussi en anglais).


Sous la forme « Have your cake and eat it too » si je ne me trompe.

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Avatar
Fabien LE LEZ
On Sat, 9 Jul 2005 14:05:36 -0400, "Michel Michaud" :

Tu connais une autre traduction ?


Non, mais je connais une autre solution : puisque de toutes façons il
faut ajouter un mot à la langue française pour parler de ce concept,
autant utiliser le mot "multithread", au moins on comprend tout de
suite.

Enfin bon, tout ça n'est qu'une répétition de la même discussion...
l'Atlantique est trop large pour qu'on se mette d'accord.

Avatar
Michel Michaud
Dans le message ,
On Sat, 9 Jul 2005 14:05:36 -0400, "Michel Michaud" :

Tu connais une autre traduction ?


Non, mais je connais une autre solution : puisque de toutes façons
il faut ajouter un mot à la langue française pour parler de ce
concept, autant utiliser le mot "multithread", au moins on comprend
tout de suite.


On comprend tout de suite quand on sait ce qu'est multithread.
D'un autre côté, pense à des débutants qui ne connaissent pas tous
les concepts. Dirais-tu loop au lieu de boucle, parameter au lieu
de paramètre, etc. Ça n'aiderait personne.

Pour quelqu'un qui connait la terminologie anglaise et qui parle
anglais, il est effectivement inutile de parler français ou de
faire des livres en français. Pour les autres, il faut expliquer
les concepts de façon compréhensible (en français) et il est
certainement utile de faire connaître les termes anglais. Mais
je peux t'assurer que mes élèves n'auront pas plus de facilité
à apprendre la programmation multithread si j'utilise le mot
anglais :-)

Enfin bon, tout ça n'est qu'une répétition de la même discussion...
l'Atlantique est trop large pour qu'on se mette d'accord.


Je ne vois pas pourquoi...

En fait, j'ajouterais que la traduction d'une expression mot peut
le faire s'améliorer : l'exemple classique est interblocage qui
est beaucoup plus « autoexplicatif » que deadlock. Et je suis
certain qu'il y a d'autres exemples...

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


1 2 3 4 5