La question n'est pas si c'est possible -- tout le monde sait que c'est
possible, de la même manière que c'est possible de faire de la
programmation orientée objet en C. La vraie question est à quel co ût,
et comment les « trics » mis en oeuvre soutiennent une programmation
propre, efficace, donnant lieu à des programmes maintenables. C'est
pour cela que je recommende vivement de lire le papier en question (pas
juste parcourir) pour avoir une bonne idée de la problèmatique.
Autrement, on peut pas avancer.
| Bref, je ne penses pas que ce soit le genre de choses qui mériteraien t
| que l'on passe encore un moment à l'intégrer à la norme.
Pourquoi ? Quels sont tes arguments ?
Laurent avait indiqué, je cite :
# Est-ce que quelqu'un sait s'il y a une chance que les "open multi-
# methods" proposees par B.S. et al. (a GPCE'07)
^^^^^^^
http://www.research.att.com/~bs/multimethods.pdf
La question n'est pas si c'est possible -- tout le monde sait que c'est
possible, de la même manière que c'est possible de faire de la
programmation orientée objet en C. La vraie question est à quel co ût,
et comment les « trics » mis en oeuvre soutiennent une programmation
propre, efficace, donnant lieu à des programmes maintenables. C'est
pour cela que je recommende vivement de lire le papier en question (pas
juste parcourir) pour avoir une bonne idée de la problèmatique.
Autrement, on peut pas avancer.
| Bref, je ne penses pas que ce soit le genre de choses qui mériteraien t
| que l'on passe encore un moment à l'intégrer à la norme.
Pourquoi ? Quels sont tes arguments ?
Laurent avait indiqué, je cite :
# Est-ce que quelqu'un sait s'il y a une chance que les "open multi-
# methods" proposees par B.S. et al. (a GPCE'07)
^^^^^^^
http://www.research.att.com/~bs/multimethods.pdf
La question n'est pas si c'est possible -- tout le monde sait que c'est
possible, de la même manière que c'est possible de faire de la
programmation orientée objet en C. La vraie question est à quel co ût,
et comment les « trics » mis en oeuvre soutiennent une programmation
propre, efficace, donnant lieu à des programmes maintenables. C'est
pour cela que je recommende vivement de lire le papier en question (pas
juste parcourir) pour avoir une bonne idée de la problèmatique.
Autrement, on peut pas avancer.
| Bref, je ne penses pas que ce soit le genre de choses qui mériteraien t
| que l'on passe encore un moment à l'intégrer à la norme.
Pourquoi ? Quels sont tes arguments ?
Laurent avait indiqué, je cite :
# Est-ce que quelqu'un sait s'il y a une chance que les "open multi-
# methods" proposees par B.S. et al. (a GPCE'07)
^^^^^^^
http://www.research.att.com/~bs/multimethods.pdf
On 31 mai, 01:39, Gabriel Dos Reis wrote:
> La question n'est pas si c'est possible -- tout le monde sait que c'est
> possible, de la même manière que c'est possible de faire de la
> programmation orientée objet en C. La vraie question est à quel coût,
> et comment les « trics » mis en oeuvre soutiennent une programmatio n
> propre, efficace, donnant lieu à des programmes maintenables.
> C'est
> pour cela que je recommende vivement de lire le papier en question (pas
> juste parcourir) pour avoir une bonne idée de la problèmatique.
> Autrement, on peut pas avancer.
Ok, j'ai bien pris le temps de lire le papier de B.S. Commentaires sur
le papier plus bas dans ce message.
> | Bref, je ne penses pas que ce soit le genre de choses qui mériterai ent
> | que l'on passe encore un moment à l'intégrer à la norme.
> Pourquoi ? Quels sont tes arguments ?
Je me suis mal exprimé. Je disais qu'il me semble que l'on est trop
tard dans le processus de normalisation de C++0x pour l'intégrer.
> Laurent avait indiqué, je cite :
> # Est-ce que quelqu'un sait s'il y a une chance que les "open multi -
> # methods" proposees par B.S. et al. (a GPCE'07)
> ^^^^^^^
> http://www.research.att.com/~bs/multimethods.pdf
Au temps pour moi.
Mon avis sur la proposition : très intéressante, utile, avec deux
aspects négatifs évidents :
- encore un nouveau mot-clé
qui va avoir des utilisations différentes.
'const', 'typename' en sont des examples. 'virtual' est déjà utilis é
au niveau des fonctions membres et de l'héritage. Cela ne va pas
faciliter la tâche pour les débutants.
- il y a quand même du boulot derrière (bien que mâché par B.S. g râce
à ce papier) pour ceux qui écrivent les compilos C++, ce qui signifie
qu'il faudra encore attendre un moment après le jour où l'on aura
décidé de rajouter cela à C++.
mais des aspects positifs tout aussi évidents :
- C'est assez simple, finalement. Quelqu'un ayant un minimum de
connaissance et d'expérience en C++ n'aura pas de mal à utiliser cett e
"extension".
- Le multiple dispatch est quelque chose que l'on rencontre finalement
assez souvent. Avoir une solution directement offerte par le langage,
ce serait excellent.
Un C++ avec le support de ce qui est proposé par BS serait
probablement plus pratique qu'une bibliothèque
comme dans Loki où
l'on doit "choisir" parmi des solutions offrant diverses possibilités
en termes de performance, maintenabilité et "intrusion" (?).
Toutefois, ce que je disais me paraît moins intelligent après
réflexion. C'est comme si l'on préférait les concept checking tels
qu'implémentés dans Boost plutôt que les concepts directement int égrés
dans C++0x. Il n'en demeure pas moins que l'on aura pas cela pour C+
+0x, vu les changements à envisager et le temps nécessaire, non ?
On 31 mai, 01:39, Gabriel Dos Reis <g...@cs.tamu.edu> wrote:
> La question n'est pas si c'est possible -- tout le monde sait que c'est
> possible, de la même manière que c'est possible de faire de la
> programmation orientée objet en C. La vraie question est à quel coût,
> et comment les « trics » mis en oeuvre soutiennent une programmatio n
> propre, efficace, donnant lieu à des programmes maintenables.
> C'est
> pour cela que je recommende vivement de lire le papier en question (pas
> juste parcourir) pour avoir une bonne idée de la problèmatique.
> Autrement, on peut pas avancer.
Ok, j'ai bien pris le temps de lire le papier de B.S. Commentaires sur
le papier plus bas dans ce message.
> | Bref, je ne penses pas que ce soit le genre de choses qui mériterai ent
> | que l'on passe encore un moment à l'intégrer à la norme.
> Pourquoi ? Quels sont tes arguments ?
Je me suis mal exprimé. Je disais qu'il me semble que l'on est trop
tard dans le processus de normalisation de C++0x pour l'intégrer.
> Laurent avait indiqué, je cite :
> # Est-ce que quelqu'un sait s'il y a une chance que les "open multi -
> # methods" proposees par B.S. et al. (a GPCE'07)
> ^^^^^^^
> http://www.research.att.com/~bs/multimethods.pdf
Au temps pour moi.
Mon avis sur la proposition : très intéressante, utile, avec deux
aspects négatifs évidents :
- encore un nouveau mot-clé
qui va avoir des utilisations différentes.
'const', 'typename' en sont des examples. 'virtual' est déjà utilis é
au niveau des fonctions membres et de l'héritage. Cela ne va pas
faciliter la tâche pour les débutants.
- il y a quand même du boulot derrière (bien que mâché par B.S. g râce
à ce papier) pour ceux qui écrivent les compilos C++, ce qui signifie
qu'il faudra encore attendre un moment après le jour où l'on aura
décidé de rajouter cela à C++.
mais des aspects positifs tout aussi évidents :
- C'est assez simple, finalement. Quelqu'un ayant un minimum de
connaissance et d'expérience en C++ n'aura pas de mal à utiliser cett e
"extension".
- Le multiple dispatch est quelque chose que l'on rencontre finalement
assez souvent. Avoir une solution directement offerte par le langage,
ce serait excellent.
Un C++ avec le support de ce qui est proposé par BS serait
probablement plus pratique qu'une bibliothèque
comme dans Loki où
l'on doit "choisir" parmi des solutions offrant diverses possibilités
en termes de performance, maintenabilité et "intrusion" (?).
Toutefois, ce que je disais me paraît moins intelligent après
réflexion. C'est comme si l'on préférait les concept checking tels
qu'implémentés dans Boost plutôt que les concepts directement int égrés
dans C++0x. Il n'en demeure pas moins que l'on aura pas cela pour C+
+0x, vu les changements à envisager et le temps nécessaire, non ?
On 31 mai, 01:39, Gabriel Dos Reis wrote:
> La question n'est pas si c'est possible -- tout le monde sait que c'est
> possible, de la même manière que c'est possible de faire de la
> programmation orientée objet en C. La vraie question est à quel coût,
> et comment les « trics » mis en oeuvre soutiennent une programmatio n
> propre, efficace, donnant lieu à des programmes maintenables.
> C'est
> pour cela que je recommende vivement de lire le papier en question (pas
> juste parcourir) pour avoir une bonne idée de la problèmatique.
> Autrement, on peut pas avancer.
Ok, j'ai bien pris le temps de lire le papier de B.S. Commentaires sur
le papier plus bas dans ce message.
> | Bref, je ne penses pas que ce soit le genre de choses qui mériterai ent
> | que l'on passe encore un moment à l'intégrer à la norme.
> Pourquoi ? Quels sont tes arguments ?
Je me suis mal exprimé. Je disais qu'il me semble que l'on est trop
tard dans le processus de normalisation de C++0x pour l'intégrer.
> Laurent avait indiqué, je cite :
> # Est-ce que quelqu'un sait s'il y a une chance que les "open multi -
> # methods" proposees par B.S. et al. (a GPCE'07)
> ^^^^^^^
> http://www.research.att.com/~bs/multimethods.pdf
Au temps pour moi.
Mon avis sur la proposition : très intéressante, utile, avec deux
aspects négatifs évidents :
- encore un nouveau mot-clé
qui va avoir des utilisations différentes.
'const', 'typename' en sont des examples. 'virtual' est déjà utilis é
au niveau des fonctions membres et de l'héritage. Cela ne va pas
faciliter la tâche pour les débutants.
- il y a quand même du boulot derrière (bien que mâché par B.S. g râce
à ce papier) pour ceux qui écrivent les compilos C++, ce qui signifie
qu'il faudra encore attendre un moment après le jour où l'on aura
décidé de rajouter cela à C++.
mais des aspects positifs tout aussi évidents :
- C'est assez simple, finalement. Quelqu'un ayant un minimum de
connaissance et d'expérience en C++ n'aura pas de mal à utiliser cett e
"extension".
- Le multiple dispatch est quelque chose que l'on rencontre finalement
assez souvent. Avoir une solution directement offerte par le langage,
ce serait excellent.
Un C++ avec le support de ce qui est proposé par BS serait
probablement plus pratique qu'une bibliothèque
comme dans Loki où
l'on doit "choisir" parmi des solutions offrant diverses possibilités
en termes de performance, maintenabilité et "intrusion" (?).
Toutefois, ce que je disais me paraît moins intelligent après
réflexion. C'est comme si l'on préférait les concept checking tels
qu'implémentés dans Boost plutôt que les concepts directement int égrés
dans C++0x. Il n'en demeure pas moins que l'on aura pas cela pour C+
+0x, vu les changements à envisager et le temps nécessaire, non ?
ld writes:
| Est-ce que quelqu'un sait s'il y a une chance que les "open multi-
| methods" proposees par B.S. et al. (a GPCE'07) ont une chance d'etre
| dans C++0x? Pour l'instant je n'y vois aucune allusion et je sais que
| cela demande un changement significatif du modele objet (frein a son
| adoption?). Pourtant ca changerait enormement les possibilites
| "dynamiques" de C++.
Je serai surpris si elles passent dans C++0x.
ld <Laurent.Den...@gmail.com> writes:
| Est-ce que quelqu'un sait s'il y a une chance que les "open multi-
| methods" proposees par B.S. et al. (a GPCE'07) ont une chance d'etre
| dans C++0x? Pour l'instant je n'y vois aucune allusion et je sais que
| cela demande un changement significatif du modele objet (frein a son
| adoption?). Pourtant ca changerait enormement les possibilites
| "dynamiques" de C++.
Je serai surpris si elles passent dans C++0x.
ld writes:
| Est-ce que quelqu'un sait s'il y a une chance que les "open multi-
| methods" proposees par B.S. et al. (a GPCE'07) ont une chance d'etre
| dans C++0x? Pour l'instant je n'y vois aucune allusion et je sais que
| cela demande un changement significatif du modele objet (frein a son
| adoption?). Pourtant ca changerait enormement les possibilites
| "dynamiques" de C++.
Je serai surpris si elles passent dans C++0x.
Mathias Gaunard writes:
[...]
| > ca
| > ne peut donc pas marcher. Il faudrait plutot quelque chose base sur
| > boost any qui lui est dynamique. Mais les tentatives sont tres
| > lourdes, tres lentes et pas vraiment convainquantes.
|
| boost.variant fournit du multi-dispatch qui fonctionne à merveille (c e
| qui est l'objectif des multi-méthodes).
| Donc ça marche.
Fascinant.
Mathias Gaunard <loufo...@gmail.com> writes:
[...]
| > ca
| > ne peut donc pas marcher. Il faudrait plutot quelque chose base sur
| > boost any qui lui est dynamique. Mais les tentatives sont tres
| > lourdes, tres lentes et pas vraiment convainquantes.
|
| boost.variant fournit du multi-dispatch qui fonctionne à merveille (c e
| qui est l'objectif des multi-méthodes).
| Donc ça marche.
Fascinant.
Mathias Gaunard writes:
[...]
| > ca
| > ne peut donc pas marcher. Il faudrait plutot quelque chose base sur
| > boost any qui lui est dynamique. Mais les tentatives sont tres
| > lourdes, tres lentes et pas vraiment convainquantes.
|
| boost.variant fournit du multi-dispatch qui fonctionne à merveille (c e
| qui est l'objectif des multi-méthodes).
| Donc ça marche.
Fascinant.
Si on y regarde de pres, les multi-methods sont l'equivalent dynamique
des templates.
Alors que C++ est deja tres bien equipe pour la
programmation statique (et plus avec les concepts), il est
particulierement rigide dans le domaine dynamique d'ou l'importance
d'avoir les multimethodes aujourd'hui (et pas dans 10 ans).
> Mon avis sur la proposition : très intéressante, utile, avec deux
> aspects négatifs évidents :
> - encore un nouveau mot-clé
il n'est pas nouveau
Ca c'est un probleme de communication. Rien n'empeche de faire un
papier qui detail l'ABI et le modele objet pour expliquer comment
l'implementer. Le compilateur a deja tous les outils en mains puisque
les templates et les vtbl sont deja la. Il s'agit "seulement"
d'unifier et de generaliser l'existant. Mais c'est un gros boulot, je
te l'accorde.
Pas seulement. En C++, *il n'est pas possible* de l'implementer comme
une bibliotheque sans modifier le modele objet. Ce qui existe
aujourd'hui n'a pas la meme semantique, loin de la (y compris Loki).
Si on y regarde de pres, les multi-methods sont l'equivalent dynamique
des templates.
Alors que C++ est deja tres bien equipe pour la
programmation statique (et plus avec les concepts), il est
particulierement rigide dans le domaine dynamique d'ou l'importance
d'avoir les multimethodes aujourd'hui (et pas dans 10 ans).
> Mon avis sur la proposition : très intéressante, utile, avec deux
> aspects négatifs évidents :
> - encore un nouveau mot-clé
il n'est pas nouveau
Ca c'est un probleme de communication. Rien n'empeche de faire un
papier qui detail l'ABI et le modele objet pour expliquer comment
l'implementer. Le compilateur a deja tous les outils en mains puisque
les templates et les vtbl sont deja la. Il s'agit "seulement"
d'unifier et de generaliser l'existant. Mais c'est un gros boulot, je
te l'accorde.
Pas seulement. En C++, *il n'est pas possible* de l'implementer comme
une bibliotheque sans modifier le modele objet. Ce qui existe
aujourd'hui n'a pas la meme semantique, loin de la (y compris Loki).
Si on y regarde de pres, les multi-methods sont l'equivalent dynamique
des templates.
Alors que C++ est deja tres bien equipe pour la
programmation statique (et plus avec les concepts), il est
particulierement rigide dans le domaine dynamique d'ou l'importance
d'avoir les multimethodes aujourd'hui (et pas dans 10 ans).
> Mon avis sur la proposition : très intéressante, utile, avec deux
> aspects négatifs évidents :
> - encore un nouveau mot-clé
il n'est pas nouveau
Ca c'est un probleme de communication. Rien n'empeche de faire un
papier qui detail l'ABI et le modele objet pour expliquer comment
l'implementer. Le compilateur a deja tous les outils en mains puisque
les templates et les vtbl sont deja la. Il s'agit "seulement"
d'unifier et de generaliser l'existant. Mais c'est un gros boulot, je
te l'accorde.
Pas seulement. En C++, *il n'est pas possible* de l'implementer comme
une bibliotheque sans modifier le modele objet. Ce qui existe
aujourd'hui n'a pas la meme semantique, loin de la (y compris Loki).
Le chemin est long avant de voir les etoiles derriere la lune ;-)
Le chemin est long avant de voir les etoiles derriere la lune ;-)
Le chemin est long avant de voir les etoiles derriere la lune ;-)
Mathias Gaunard writes:
[...]
| > ca
| > ne peut donc pas marcher. Il faudrait plutot quelque chose base sur
| > boost any qui lui est dynamique. Mais les tentatives sont tres
| > lourdes, tres lentes et pas vraiment convainquantes.
|
| boost.variant fournit du multi-dispatch qui fonctionne à merveille (c e
| qui est l'objectif des multi-méthodes).
| Donc ça marche.
Fascinant.
http://www.research.att.com/~bs/multimethods.pdf
Mathias Gaunard <loufo...@gmail.com> writes:
[...]
| > ca
| > ne peut donc pas marcher. Il faudrait plutot quelque chose base sur
| > boost any qui lui est dynamique. Mais les tentatives sont tres
| > lourdes, tres lentes et pas vraiment convainquantes.
|
| boost.variant fournit du multi-dispatch qui fonctionne à merveille (c e
| qui est l'objectif des multi-méthodes).
| Donc ça marche.
Fascinant.
http://www.research.att.com/~bs/multimethods.pdf
Mathias Gaunard writes:
[...]
| > ca
| > ne peut donc pas marcher. Il faudrait plutot quelque chose base sur
| > boost any qui lui est dynamique. Mais les tentatives sont tres
| > lourdes, tres lentes et pas vraiment convainquantes.
|
| boost.variant fournit du multi-dispatch qui fonctionne à merveille (c e
| qui est l'objectif des multi-méthodes).
| Donc ça marche.
Fascinant.
http://www.research.att.com/~bs/multimethods.pdf
- de garantir le Liskov Subtitution Principle au lieu de le violer
systematiquement. On sait aujourd'hui qu'il est pratiquement
impossible de le satisfaire en presence du runtime polymorphism. Cela
aurait aussi grandement simplifie la notion de classe et leur design.
Le runtime polymorphism venant apres, comme une extension de
l'interface selon les besoins.
- d'etendre la partie collaborative des classes tout en conservant le
RAII. Un reel probleme en C++ pour satisfaire le "Separation of
Concern" c'est comment decomposer le code de maniere flexible. Les
Mixins sont trop statique (en C++) et antagoniste au RAII et les
alternatives (design patterns) tres peu flexible et compliquees a
maintenir.
- de generaliser l'overloading des fonctions, les "methodes" non
membre dont la flexibilite est souvent sous exploitee, au profit de
classes plus simple et mieux fermees avec des interfaces ouverte (a-la-
C) , mais aussi polymorphique et extensible.
- de garantir le Liskov Subtitution Principle au lieu de le violer
systematiquement. On sait aujourd'hui qu'il est pratiquement
impossible de le satisfaire en presence du runtime polymorphism. Cela
aurait aussi grandement simplifie la notion de classe et leur design.
Le runtime polymorphism venant apres, comme une extension de
l'interface selon les besoins.
- d'etendre la partie collaborative des classes tout en conservant le
RAII. Un reel probleme en C++ pour satisfaire le "Separation of
Concern" c'est comment decomposer le code de maniere flexible. Les
Mixins sont trop statique (en C++) et antagoniste au RAII et les
alternatives (design patterns) tres peu flexible et compliquees a
maintenir.
- de generaliser l'overloading des fonctions, les "methodes" non
membre dont la flexibilite est souvent sous exploitee, au profit de
classes plus simple et mieux fermees avec des interfaces ouverte (a-la-
C) , mais aussi polymorphique et extensible.
- de garantir le Liskov Subtitution Principle au lieu de le violer
systematiquement. On sait aujourd'hui qu'il est pratiquement
impossible de le satisfaire en presence du runtime polymorphism. Cela
aurait aussi grandement simplifie la notion de classe et leur design.
Le runtime polymorphism venant apres, comme une extension de
l'interface selon les besoins.
- d'etendre la partie collaborative des classes tout en conservant le
RAII. Un reel probleme en C++ pour satisfaire le "Separation of
Concern" c'est comment decomposer le code de maniere flexible. Les
Mixins sont trop statique (en C++) et antagoniste au RAII et les
alternatives (design patterns) tres peu flexible et compliquees a
maintenir.
- de generaliser l'overloading des fonctions, les "methodes" non
membre dont la flexibilite est souvent sous exploitee, au profit de
classes plus simple et mieux fermees avec des interfaces ouverte (a-la-
C) , mais aussi polymorphique et extensible.