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

5 6 7 8 9
Avatar
Michel Michaud
Dans le message ,
Michel Michaud wrote:
Effectivement c'est loin d'être la même chose que le
multithread et je suis heureux que ce soit plus simple, car
c'est ce que j'ai à enseigner :-) (ce n'est pas moi qui
enseigne vraiment la programmation multithread).


Attention. Si les utilisatoins naïves des threads et des
processus sont différentes, dans un bon système d'exploitation
(et je crois qu'à cet égard, les Windows modernes sont de bons
systèmes d'exploitation), il n'y a pas vraiment de différence.


Je dirais plutôt que c'est complètement différent, en tout cas,
dans les systèmes courants, mais j'imagine qu'on peut dire
n'importe quoi, selon le point de vue choisi, surtout si on dit
« dans un bon système d'exploitation »... Tu as un exemple d'un
de ces « bons » SE ?

Le système connaît en premier lieu des threads (dans la
terminologie moderne). À chaque thread est associé un certain
nombre de ressources, qui peuvent être partagé ou non. Et en fin
de compte, même pour l'utilisateur, où est la différence entre
un processus multithread avec de la mémoire spécifique à chaque
thread, et des processus avec de la mémoire partagée.


Il y a tout plein de différences, en tout cas, si tu as bien
écrit ce que tu voulais écrire... Mais il va falloir repartir du
début et s'entendre sur une définitions de thread (et je ne sais
pas si tu connais les « fibers » de Windows ?).

En fait, quand on me dit « multithread », je m'attends à ce que
la mémoire où se trouve les piles fassent partie des ressources
partagée, et quand on parle de plusieurs processus, qu'elle n'en
fasse pas partie.


Bien, tu contredis toi-même tes affirmations qu'il n'y a pas de
différences...

Mais même là -- au moins sous Posix (et ça
m'étonnera que ce ne soit pas le cas sous Windows aussi), je
peux créer des threads avec des piles dans de la mémoire
partagée, accessibles depuis d'autres processus.


Si tu veux écrire du code en assembleur, j'imagine que tu
pourras faire n'importe quoi, mais la pile C++ ne sera pas
partagée par des threads de processus différents...

Note bien aussi
que sous Posix (et probablement sous Windows aussi), si un
mutex, un rwlock, une condition variable ou un semaphore se
trouve dans la mémoire partagée, il peut synchroniser des
threads dans des processus différents.


Dans Windows, on ne sait pas où sont les mutex (etc.), mais on
peut les partager (ça me semble bien évident que ça peut servir
à des threads, qu'ils soient n'importe où).

Je me demande si tu as la même vision générale que moi des
processus/thread/IPC offerts par les systèmes d'exploitation
modernes. Pour moi, Unix était tellement faible sur ce niveau
avant Posix, que tu as peut-être été biaisé dans ta
compréhension de ce qui est offert par les autres. Mon
impression est que Unix est un très mauvais exemple de système
d'exploitation quand il faut apprendre les principes des services
qu'un SE peut offrir aux programmeurs... Posix ressemble plus à
une « patch » qu'à ce qu'on veut vraiment, mais, clairement,
c'est utilisable :-)

--
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 ,
On Tue, 12 Jul 2005 12:41:34 -0400, "Michel Michaud" :

Je ne crois pas que nous sommes personnellement plus
hostile que vous, et nos autorités linguistiques non plus...


Disons que c'est la réputation que vous avez de ce côté-ci de
l'Atlantique.


Et la vôtre, probablement tout aussi fausse, est que vous êtes
trop en admiration devant le fait anglais, ce qui vous pousse
à admirer les mots anglais anormalement... ça fait « cool »...

[...]
Euh, l'évolution d'une langue n'est-elle pas justement l'ajout de
nouveaux mots ?


Oui, mais par les voies naturelles de l'évolution de la langue, pas
par l'autorité de quarante guignols verdâtres en épée.


Je suis bien d'accord sur le fond, mais je crois que les autorités
peuvent proposer des mots et laisser la population les adopter ou
non, si elle les juge appropriés.

(Par ailleurs, cette discussion, bien qu'intéressante, me semble
vraiment trop hors sujet pour qu'on la continue ici... Je réponds
à Gabriel et j'arrête :-)

--
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 ,
"Michel Michaud" writes:

Dans le message ,
Merci, je ne confonds rien :-)


Il faudrait alors que tu m'expliques pourquoi tu penses que nous
sommes pire...


J'ai dit que vous étiez pires ? Tu m'apprends quelque chose.


Tant mieux si je me trompe, mais tu avais dit « plus hostile
que les Français » en appui à Fabien... Je suppose que j'ai mal
compris.

(et je finis notre conversation trop HS là-dessus).

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



Avatar
Gabriel Dos Reis
"Michel Michaud" writes:

[...]

| Je me demande si tu as la même vision générale que moi des
| processus/thread/IPC offerts par les systèmes d'exploitation
| modernes. Pour moi, Unix était tellement faible sur ce niveau
| avant Posix, que tu as peut-être été biaisé dans ta
| compréhension de ce qui est offert par les autres. Mon
| impression est que Unix est un très mauvais exemple de système
| d'exploitation quand il faut apprendre les principes des services
| qu'un SE peut offrir aux programmeurs... Posix ressemble plus à
| une « patch » qu'à ce qu'on veut vraiment, mais, clairement,
| c'est utilisable :-)

Je crois qu'il faut s'entendre sur ce qu'on appelle « Unix » lorsqu'on
parle de threads. Il y a tellement de variations. De fait, POSIX est
une sorte de nivellement par le bas si on considère sa spécification
en détail, en regard de ce qu'offraient certaines autres versions de
Unix. La récente édition de « Advanced Unix Programming » contient pas
mal de discussion sur les diverses POSIX et variations dans les systèmes.

-- Gaby
Avatar
Gabriel Dos Reis
"Michel Michaud" writes:

| Dans le message ,
| > On Tue, 12 Jul 2005 12:41:34 -0400, "Michel Michaud" :
| >
| >> Je ne crois pas que nous sommes personnellement plus
| >> hostile que vous, et nos autorités linguistiques non plus...
| >
| > Disons que c'est la réputation que vous avez de ce côté-ci de
| > l'Atlantique.
|
| Et la vôtre, probablement tout aussi fausse, est que vous êtes
| trop en admiration devant le fait anglais, ce qui vous pousse
| à admirer les mots anglais anormalement... ça fait « cool »...

Ah bon ?

-- Gaby
Avatar
Jean-Marc Bourguet
Gabriel Dos Reis writes:

La récente édition de « Advanced Unix Programming » contient pas mal
de discussion sur les diverses POSIX et variations dans les
systèmes.


Est-ce qu'elle vaut la peine pour quelqu'un qui a deja la precedente?

(Copie et suivi sur fr.comp.os.unix).

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Jean-Marc Bourguet
Gabriel Dos Reis writes:

La récente édition de « Advanced Unix Programming » contient pas mal
de discussion sur les diverses POSIX et variations dans les
systèmes.


Est-ce qu'elle vaut la peine pour quelqu'un qui a deja la precedente?

(Copie et suivi sur fr.comp.os.unix).
(Supersedes en changeant de titre).

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Gabriel Dos Reis
Jean-Marc Bourguet writes:

| Gabriel Dos Reis writes:
|
| > La récente édition de « Advanced Unix Programming » contient pas mal
| > de discussion sur les diverses POSIX et variations dans les
| > systèmes.
|
| Est-ce qu'elle vaut la peine pour quelqu'un qui a deja la precedente?

Je crois que oui. C'est une revue complète de la version précédente,
avec discussion de nouveaux ajouts POSIX et, curieusement, une certaine
place à Linux.

-- Gaby
Avatar
Gabriel Dos Reis
"Michel Michaud" writes:

| Dans le message ,
| > "Michel Michaud" writes:
| >
| >> Dans le message ,
| >>> Merci, je ne confonds rien :-)
| >>
| >> Il faudrait alors que tu m'expliques pourquoi tu penses que nous
| >> sommes pire...
| >
| > J'ai dit que vous étiez pires ? Tu m'apprends quelque chose.
|
| Tant mieux si je me trompe, mais tu avais dit « plus hostile
| que les Français » en appui à Fabien...

C'est différent de « être pire. »

-- Gaby
Avatar
kanze
Michel Michaud wrote:
Dans le message ,
writes:
De toute façon, avec les threads d'aujourd'hui, je rétrouve
mes processus de l'époque, à peu près.


Et la différence est dans le « à peu près » ; et en fait
c'est une grande différence ! Un thread s'éxecute dans le
même espace d'adressage que le processus « maître », alors
qu'avec la programmation multi-tâche avevc fork(), on se
retrouve avec duplication d'instance du programmes.


Et en pratique, c'est bien rare qu'on en reste là. C'est ce
que force la création de processus sous Unix, mais pas
ailleurs. Après le fork sous Unix, on remplace le plus souvent
le programme qui s'exécute par un autre. Sous d'autres SE, on
crée directement l'autre processus avec le bon programme.

Pour moi, il y a aussi d'autres différences majeures entre le
multi-processus et le multi-thread, la principale étant que
les primitives de communications inter-processus sont
habituellement plus sûres et plus simples à utiliser que ce
qu'on fait avec le multi-thread (on pourrait les utiliser là
aussi, mais on ne veut généralement pas, pour des raisons
d'efficacité).


Oui et non. Toutes les primitives de communication
« inter-processus » sont aussi disponibles pour la communication
entre threads. En fait, sous Linux (et sous la dernière version
de Solaris, et je crois aussi sous Windows), il n'y a pas de
processus au sens classique ; il n'y a que des threads. Un
processus, en fin de compte, n'est qu'une collection de threads
qui partagent un certain nombre de ressources ; il n'a pas de
réalité véritable au niveau du noyau. Et note bien qu'on peut
bien partager la plupart des ressources entre des threads dans
différents processus. Une des applications sur laquelle je
travaille ici utilise bien de la mémoire partagée (au moyen de
mmap), et synchronise ses « processus » au moyen des mutex situé
dans cette mémoire. Du coup, je me sers des moyens de
communication traditionnellement associés à des threads pour la
communication entre processus.

En somme, la distiction thread-processus est plus
conventionnelle que fondamentale.

En principe, rien n'empêche de donner plus de liberté aux
programmes de spécifier ce qui est partagé avec qui -- dans ce
cas-là, un processus, ce n'est qu'une facilité pour obtenir un
partage « par défaut ». Et en fait, j'ai déjà utilisé des
systèmes temps-réel où c'était le cas (sauf qu'à l'époque, ce
que nous appelons thread s'appelait processus, et ce que nous
appelons processus s'appelait tâche). En fait, ça donnait une
communication entre les threads/processus à peu près aussi
efficace que celui entre les threads aujourd'hui, mais avec la
sécurité de celui entre les processus : quand un thread
(j'utilise la terminologie actuelle) allouait un segment de
mémoire, il n'était visible qu'à ce thread -- quand il le
passait à un autre thread par une boîte à lettres, le système le
rendait visible à l'autre thread (mais il avait aussi la
possibilité de le rendre immédiatement visible à tous les
threads dans le processus). En somme, la mémoire était visible
aux threads qui devaient en avoir accès, et non aux autres.

À cet égard, Unix (et peut-être Windows) est plutôt rigide et
inflexible.

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



5 6 7 8 9