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
Fabien LE LEZ
On Sat, 09 Jul 2005 15:04:47 +0200, Cyrille :

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)


Certes, mais au finale, les pointeurs "normaux" continuent à exister
en C++, donc on ne peut pas avoir les garanties dont Matthieu parle
dans <news:.

Ou alors j'ai raté un épisode ?

Avatar
Cyrille
On Sat, 09 Jul 2005 15:04:47 +0200, Cyrille :


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)



Certes, mais au finale, les pointeurs "normaux" continuent à exister
en C++, donc on ne peut pas avoir les garanties dont Matthieu parle
dans <news:.

Ou alors j'ai raté un épisode ?


Ah oui, en effet. Sauf peut-être à ajouter un mode de compilation où en
plus les pointeurs classiques seraient interdits... et c'est je crois ce
que fait Microsoft (je viens de vérifier la doc), qui a un mode "mixed",
un mode "pure" et un mode "verifiable", ce dernier donnant des garanties
du même genre.

Dans le mode "verifiable" il y a donc pas mal de restrictions sur le
langage, qu'on peut trouver là:
http://msdn2.microsoft.com/library/ykbbt679(en-us,vs.80).aspx

C'est sans doute ce genre de restrictions qu'il faudrait ajouter au C++
pour offrir les mêmes garanties. A ce niveau-là, ce n'est presque plus
le même langage...

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


Avatar
Gabriel Dos Reis
Cyrille writes:

[...]

| Dans le mode "verifiable" il y a donc pas mal de restrictions sur le
| langage, qu'on peut trouver là:
| http://msdn2.microsoft.com/library/ykbbt679(en-us,vs.80).aspx
|
| C'est sans doute ce genre de restrictions qu'il faudrait ajouter au
| C++ pour offrir les mêmes garanties.

Ah bon ?

| A ce niveau-là, ce n'est presque plus le même langage...

Ceux qui veulent faire du Pascal ou Java ou Haskell savent où les trouver.

-- Gaby
Avatar
James Kanze
Cyrille wrote:

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 ?



Pourquoi pas lire la proposition d'abord, à la place de parler
dans la vide ?

Il ne faut pas oublier qu'il existe actuellement des
implémentations des GC qui fonctionnent avec C++. Et dont
certains se servent.

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


Je n'ai pas encore étudié la proposition actuelle en détail,
mais c'est clair qu'il n'est pas question de simplement adopter
l'extension de Microsoft (qui s'adresse aussi à d'autres
concernes, comme l'interopératabilité avec C#). A priori, je
crois que les changements dans le langage doivent être vraiment
minime : à la limite, une interdiction de « cacher » des
pointeurs. Ensuite, c'est une question de la qualité de
l'implémentation. Une implémentation qui ne glane qu'une fois, à
exit, serait strictement conforme (de la même façon qu'une
implémentation où free() est un no-op est strictement conforme
aujourd'hui) ; l'expectation, cependant, serait que
l'implémentation puisse utiliser des cellules auxquelles le
programme ne peut plus accéder dans des allocations ultérieurs.

(Ce que je viens de présenter, évidemment, représente une
solution « minimale ». Il est tout à fait possible qu'on y
ajoute des fonctionnalités supplémentaires, comme la
finalisation. Mais je crois qu'il y a bien un consensus que rien
ne change pour un programme conforme qui marche aujourd'hui. À
part peut-être s'il cache des pointeurs.)

--
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
Fabien LE LEZ
On Sun, 10 Jul 2005 12:56:24 +0200, James Kanze :

Une implémentation qui ne glane qu'une fois, à
exit, serait strictement conforme


Dans ce cas, mon compilo est déjà (indirectement) équipé d'un GC,
puisque quand le programme se termine, l'OS désalloue toute la
mémoire.

Avatar
Jean-Baptiste Nivoit
JBB wrote:
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?
ca fait des smart pointers implementes au dessus d'un objet a comptage

de references, ca y ressemble mais ca cesse de marcher bien des que tu
as des cycles de references...

jb

Avatar
Jean-Baptiste Nivoit
Anthony Fleury wrote:
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.
le probleme n'est a mon avis pas tellement pour les objets dont la

portee est connue limitee par un bloc, mais pour les objets qui ont un
cycle de vie complexe. Ceci dit le GC ne garantit que ces objets sont
gardes en vie au cas ou en aurait besoin (donc pas de dangling pointer),
mais ca introduit une nouvelle classe de problemes (des fuites cachees
comme en java des qu'on oublie de relacher une reference).

jb.

Avatar
James Kanze
Fabien LE LEZ wrote:
On Sun, 10 Jul 2005 12:56:24 +0200, James Kanze :


Une implémentation qui ne glane qu'une fois, à exit, serait
strictement conforme



Dans ce cas, mon compilo est déjà (indirectement) équipé d'un
GC, puisque quand le programme se termine, l'OS désalloue
toute la mémoire.


C'est vrai. De la même façon qu'un compilateur où free() est un
no-op (et où operator delete() se sert de free()) est conforme
aujourd'hui. Je ne crois pas qu'il soit prévu de donner plus de
garanties pour le glaneur de cellules qu'il y a pour
malloc()/free().

--
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
Matthieu Moy
Fabien LE LEZ writes:

Dans ce cas, mon compilo est déjà (indirectement) équipé d'un GC,
puisque quand le programme se termine, l'OS désalloue toute la
mémoire.


Mais il n'appelle pas les destructeurs des objets dans le tas.

--
Matthieu

Avatar
kanze
Matthieu Moy wrote:
Fabien LE LEZ writes:

Dans ce cas, mon compilo est déjà (indirectement) équipé
d'un GC, puisque quand le programme se termine, l'OS
désalloue toute la mémoire.


Mais il n'appelle pas les destructeurs des objets dans le tas.


Et alors. C'est probable qu'un glaneur de cellules n'appelle pas
les destructeurs sur les objets qu'il glane. (Il est forte
possible qu'on y ajouter les possibilités de faire appeler des
fonctions de finalisation, mais ce ne sont pas les
destructeurs.)

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