OVH Cloud OVH Cloud

Midterm mailing

74 réponses
Avatar
Gabriel Dos Reis
http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/#mailing2005-06

-- Gaby

10 réponses

Avatar
kanze
Marc Boyer wrote:
En ce qui concerne les sockets, je ne suis pas sur que
le besoin soit pattent: POSIX existe, s'interface bien
avec C++.




Je me démande s'il vaut même la peine de réagir à une bêtise
aussi grosse. Je crois qu'il s'agit plutôt d'un troll.


Heuh, non. D'une naïveté que tu peines à imaginer
peut-être, mais je ne voulais pas faire le Troll.


Alors, la réponse est simple : il n'existe pas de norme pour
l'utilisation des sockets en C++, et la norme pour leur
utilisation en C se limite qu'à un des plateformes qui les
supportent. D'où l'intérête de :

-- un « binding » C++, et

-- qui fasse partie de la norme C++, et non que de une norme
qui ne s'applique qu'à une seule des systèmes d'exploitation
qui les supportent.

Répondre aux question avec « Posix existe » est vraiment
trollasque, puisque franchement, je ne peux pas concevoir que tu
n'es pas au courant qu'il existe des systèmes non-Posix ; vue le
niveau de tes postings en général, j'ai aussi du mal à penser
que crois aussi que la norme Posix s'interface bien avec le C++
(même en se limitant à ce qui concerne les sockets).

Ca s'interface bien ? A quel coût ? As tu déja crée tes
propres classes d'encapsulation des sockets ?


Ce coût est-il si dissuadant que ca ?


Le coût, c'est que je ne peux pas utiliser mes classes dans
les interfaces avec d'autres bibliothèques. C'est un coût
énorme, prohibitif même. (Régarde tous les problèmes qu'on a
avec std::string et les bibliothèques qui précède la norme.)


Je ne comprends pas ta remarque. Je dois être très à côté
de la plaque sur cette question.


C'est que si je définis mes propres classes à moi, mes
fournisseurs ne vont pas les connaître. Et que si tous mes
fournisseurs ont leurs propres classes, ça va être bigrement
difficile à les faire communiquer.

Et je signale que le problème existe aujourd'hui avec les
chaînes : tous les grands fournisseurs de bibliothèque ont
défini les leurs, et ça pose pas mal de problèmes.

--
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





Avatar
Marc Boyer
a écrit :
Marc Boyer wrote:
En ce qui concerne les sockets, je ne suis pas sur que
le besoin soit pattent: POSIX existe, s'interface bien
avec C++.




Je me démande s'il vaut même la peine de réagir à une bêtise
aussi grosse. Je crois qu'il s'agit plutôt d'un troll.


Heuh, non. D'une naïveté que tu peines à imaginer
peut-être, mais je ne voulais pas faire le Troll.


Alors, la réponse est simple : il n'existe pas de norme pour
l'utilisation des sockets en C++, et la norme pour leur
utilisation en C se limite qu'à un des plateformes qui les
supportent. D'où l'intérête de :

-- un « binding » C++, et

-- qui fasse partie de la norme C++, et non que de une norme
qui ne s'applique qu'à une seule des systèmes d'exploitation
qui les supportent.

Répondre aux question avec « Posix existe » est vraiment
trollasque, puisque franchement, je ne peux pas concevoir que tu
n'es pas au courant qu'il existe des systèmes non-Posix ;


Si, mais:
- il me semblait (mais je manque d'infos détaillées, ce sont surtout
des infos de deuxième main), quand le support socket existe,
il ressemble énormément à l'interface POSIX. Tout démenti bienvenu.
- quand il n'existe pas de support socket, ne devient-il pas
illusoire de vouloir faire une interface socket/C++ ?

vue le
niveau de tes postings en général, j'ai aussi du mal à penser
que crois aussi que la norme Posix s'interface bien avec le C++
(même en se limitant à ce qui concerne les sockets).


J'aurais pu préciser ma pensée: en se limitant aux sockets
(et uniquement à ça), on à une interface socket quasi-POSIX,
qu'on attaque en C++ comme en C. C'est pas idéal, mais c'est
pas pire.

Après, en effet, si on essaye de faire mieux que le
simple flux de char*, il existe tellement de directions
d'extensions que les variations sont immenses.

Ca s'interface bien ? A quel coût ? As tu déja crée tes
propres classes d'encapsulation des sockets ?


Ce coût est-il si dissuadant que ca ?


Le coût, c'est que je ne peux pas utiliser mes classes dans
les interfaces avec d'autres bibliothèques. C'est un coût
énorme, prohibitif même. (Régarde tous les problèmes qu'on a
avec std::string et les bibliothèques qui précède la norme.)


Je ne comprends pas ta remarque. Je dois être très à côté
de la plaque sur cette question.


C'est que si je définis mes propres classes à moi, mes
fournisseurs ne vont pas les connaître. Et que si tous mes
fournisseurs ont leurs propres classes, ça va être bigrement
difficile à les faire communiquer.

Et je signale que le problème existe aujourd'hui avec les
chaînes : tous les grands fournisseurs de bibliothèque ont
défini les leurs, et ça pose pas mal de problèmes.


J'avoue ne pas être très sensible au problème en effet:
je ne participe pas à des grands projets, j'utilise uniquement
std::string. J'avais la naïve croyance que le problème
se résolvais par une passage au plus petit commun dénominateur,
ie le tableau de char null-terminated.

Marc Boyer
--
À vélo, prendre une rue à contre-sens est moins dangeureux
que prendre un boulevard dans le sens légal. À qui la faute ?






Avatar
Stan
"Marc Boyer" a écrit dans le message
de news:
J'aurais pu préciser ma pensée: en se limitant aux sockets
(et uniquement à ça), on à une interface socket quasi-POSIX,
qu'on attaque en C++ comme en C. C'est pas idéal, mais c'est
pas pire.

Après, en effet, si on essaye de faire mieux que le
simple flux de char*, il existe tellement de directions
d'extensions que les variations sont immenses.



Même si on fait abstraction du type de données, comme je l'ai
fait remarqué ds un autre post, la gestion des flux de communication (
réseau ou autre )
implique une gestion plus évoluée que des open / read / write / close.
Ces mécanismes ne sont pas tjours simples, d'où l'intéret de fournir une
interface
normalisée.

--
-Stan

Avatar
JBB

"Fabien LE LEZ" a écrit dans le message de
news:

Des concepts comme le GC ne datent pas d'hier et de nombreux
langage en disposent.



Mais toute la philosophie du C++ est (ou me semble être) justement
contraire à l'idée de GC : on crée un objet, il est automatiquement
détruit en fin de bloc (ni avant, ni après), et tout va bien.



Moins bien avec l'usage de new.



L'une des raisons principales d'utiliser new/delete, c'est d'avoir un
contrôle fin sur la désallocation, justement. Avec un GC, il n'y aucune
manière de savoir quand un destructeur va être appelé. D'ailleurs, comme
un fait exprès, Java n'a pas de destructeur. Je ne sais pas comment se
démerde C#, d'ailleurs, à ce sujet.

Certes, le C++ permet de garder un pointeur sur un objet qui a été
détruit, ce qui peut créer des problèmes. On peut le résoudre dans la
plupart des cas en disciplinant son code, ou encore avec des pointeurs
intelligents comme boost::shared_ptr (est-ce que c'est dans le tuyau
pour la standardisation, ça?).



Si on utilise des shared_ptr systematiquent chaque fois qu'on fait des
new, c'est un peu comme si on avait un GC non?




Avatar
Jean-Marc Bourguet
JBB writes:

Si on utilise des shared_ptr systematiquent chaque fois qu'on fait
des new, c'est un peu comme si on avait un GC non?


Les GC s'en sortent generalement mieux avec les cycles.

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
Anthony Fleury
Anthony Fleury wrote:


Bonjour, bon je vais profiter un peu de tout ceci pour poser des
questions idiotes.

Et alors ? parce que c'est disponible dans d'autres langages
on devrait l'ajouter dans C++ ? Je ne sais pas si c'est l'avis
des autres programmeurs C++ ou si la majorité est contre moi,
mais pour ma part je ne veux pas d'un GC dans C++. Quand j'ai
une variable en C++, je sais qu'elle sera détruite à la fin du
bloc si c'est une variable automatique, à la fin du programme
si c'est une static, et quand je vais faire un delete pour une
variable allouée dynamiquement.
Et alors ? Quel rapport avec un glaneur de cellules ? La

présence ou l'absence d'un glaneur de cellules ne change
absolument rien en ce qui concerne les variables automatiques ou
statiques, ni en ce qui concerne le fonctionnement de delete.


Pour moi, un GC est ce qu'on retrouve en Java. C'est à dire qu'il rend,
pour moi, delete inutile et change un peu le comportement des variables
non automatiques (pour les automatiques je suis d'accord il ne va pas
forcément y changer quelque chose, même si j'imagine qu'il est possible
qu'il puisse aussi changer le comportement des variables auto, mais du
fait de la compatibilité à garder...)

Pour l'instant, je ne crois pas qu'il y a un consensus en ce qui
concerne la façon exacte que le GC s'integrera dans le C++, mais
ce qui est certain, c'est qu'il ne changera pas la sémantique
des programmes existants. À moins qu'ils ont des fuites de
mémoire, évidemment.


Pour moi, c'est la seule application du GC que je vois, éviter les
fuites mémoires, et par ailleurs, supprimer l'utilisation de delete en
gros.
Mais je ne suis pas sûr que mes connaissances soient assez bonnes dans
ce domaine. Auriez vous un bon lien qui me donne une description de ce
qu'est un GC. La seule chose que je trouve avec Google ce sont des
références qui me donne les descriptions de ce que serait un GC dans C
ou C++, et de ce qu'est le GC en java.

Pourquoi avoir un GC ??
Pour réduire la quantité de travail nécessaire pour écrire un

programme correct.


Ca je comprend. Mais son rôle serait il seulement de remplacer des
outils genre valgrind et donc réduire le temps de développement ?

(enfin perso si il est inclut ca me plairait de récupérer le
comportement normal de mon compilateur C++)
La compatibilité avec l'existant me semble essentielle. La

possibilité de ne pas utiliser le GC aussi ; il existe des
applications où il ne convient pas (même si elles sont moins
nombreuses qu'on pourrait le croire).


Et de toute facon la proposition parle bien de pragma pour en enlever
les effets, donc il est certain que la compatibilité serait gardée.

et requiert-il vraiment que des concepts comme les sockets
soient inclus dans la bibliothèque standard d'un langage qui
se veut plus général que ca ?
Oui et non. Disons que l'argument est à peu près le même que

pour des entrées/sorties sur fichier. On pourrait bien imaginer
un langage qui ne supporte ni l'un ni l'autre.


Ma première réponse est un peu idiote en fait je pense, car je me suis
laissé emporter par mon "expérience" je crois.
Je connais surtout C et C++, et les seules fois où j'ai utilisé les
sockets, je l'ai fait sans problème avec POSIX, cependant je n'avais pas
autant de contraintes de portabilité que vous pouvez avoir. Ca se
restreignait aux *nix. J'ai aussi fait du Java qui m'a montré un langage
avec un peu plus de supports.
Cependant, il en reste que pour moi, C et C++ sont des langages qui
m'ont habitué à ne pas avoir ces supports (sockets et GUI), et je me
suis toujours arrangé dans mes cas (assez loin de vos "énormes" projets)
avec POSIX, wxWidget & Co.

Mais à partir de là, je me pose une question. Comment se décide dans un
comité l'introduction d'un nouveau support ? je suppose que déjà ca ne
doit pas casser l'existant. Ensuite, ca doit être utile. Cependant cette
notion est relative. En effet, il pourrait y avoir de nombreuses choses
dans C++ d'ajouté : Sockets et GUI dont on parlait, mais aussi
Multithreading comme ce qu'a cité Stan dans son premier post, avec on
peut l'imaginer un support des Mutex, une meilleure réentrance dans la
bibliothèque standard (cependant les problèmes n'arrivent de tête que
sur les parties communes avec C, ce qui casserait la compatibilité avec
C), support des IPCs...
Alors comment décider ce qui peut être inclut dans C++ ? ce qui doit y
entrer ? Comment choisir entre support d'une fonction, et ne pas rentre
le langage trop "complexe" et trop "gros" avec un support de trop de
choses qui pourraient être faites autrement ? Comment tracer cette
limite en fait entre ce qui doit être dans le langage et ce qui ne doit
pas y être ?
Pour ma part, je suis trop habitué à n'avoir ni socket, ni GUI en C et
en C++. Je n'ai sûrement pas assez conscience des vrais problèmes d'un
gros gros projet comme ceux que vous développez. D'où mes questions qui
peuvent paraitre idiotes.

Merci d'avance,

--
Anthony Fleury


Avatar
Fabien LE LEZ
On Fri, 08 Jul 2005 21:20:43 +0200, Anthony Fleury
:

C'est à dire qu'il rend, pour moi, delete inutile


Même pas, il me semble : delete (directement ou via les pointeurs
intelligents) sert toujours si on veut contrôler la durée de vie
d'objets alloués par new.

Au fait, comment le GC sait-il qu'un objet peut être détruit ?

Avatar
Matthieu Moy
Anthony Fleury writes:

Ca je comprend. Mais son rôle serait il seulement de remplacer des
outils genre valgrind et donc réduire le temps de développement ?


Pas seulement. Avec un language qui implémente les tests de
débordements de tableaux, pas d'algèbre de pointeur et un garbage
collector (et sans doute d'autres conditions que j'oublie), tu peux
_garantir_ que le programme n'ira pas lire à un endroit sur lequel il
n'a pas reçu de référence explicite.

C'est comme ça qu'on peut empecher une applet Java (téléchargée
n'importe ou sur le net donc potentiellement malicieuse) d'accéder
directement à ta machine. Sauf bug, l'environnement d'execution garde
le controle sur le programme.

--
Matthieu

Avatar
Fabien LE LEZ
On Fri, 08 Jul 2005 22:34:49 +0200, Matthieu Moy
:

Pas seulement. Avec un language qui implémente les tests de
débordements de tableaux, pas d'algèbre de pointeur et un garbage
collector (et sans doute d'autres conditions que j'oublie)


Mais a priori, même si on lui greffe un GC, tout ça n'est pas
envisageable en C++, il me semble ?

Avatar
Cyrille
On Fri, 08 Jul 2005 22:34:49 +0200, Matthieu Moy
:


Pas seulement. Avec un language qui implémente les tests de
débordements de tableaux, pas d'algèbre de pointeur et un garbage
collector (et sans doute d'autres conditions que j'oublie)



Mais a priori, même si on lui greffe un GC, tout ça n'est pas
envisageable en C++, il me semble ?


Ben, il faut adapter le langage, pour fournir ce qui manque. Voir
l'extension "managed C++" de Microsoft. Ils inventent un nouveau type de
pointeur "managé" (avec une syntaxe différente du pointeur classique)
qui permet de référer les objets gérés par le GC et interdit au moins
l'algèbre de pointeur (pour le débordement de tableaux, je ne sais pas).

--
"I have nothing to declare except war on Austria." ~ Oscar Wilde, 1936