OVH Cloud OVH Cloud

C++0x et multi-method

63 réponses
Avatar
ld
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++.

a+, ld.

10 réponses

Avatar
Gabriel Dos Reis
Mathias Gaunard writes:

| On 31 mai, 23:39, ld wrote:
|
| > Alors je me permet de me reciter moi-meme puisque ce dont vous parlez
| > s'appelle "Curiously recurring template pattern" depuis plus de 15
| > ans, abrege en CRTP dans mon post precedent.
|
| Pas du tout.
|
| Je dis simplement qu'au lieu de faire
|
| void do_something(virtual Base1&, virtual Base2);
|
| faire
|
| template<Base1 T1, Base2 T2>
| void do_something(T1&, T2&);
|
| C'est bien entendu tout con, mais l'orienté objet est tellement
| répandu que les gens ont parfois du mal à penser autrement.

Peut-être que les gens ne font pas ce que tu proposes parce que cela ne
marche pas ? Avant de répondre, prends le temps de donner un peut de
crédit aux gens qui ont écrit la proposition.

| > Vous devriez essayer d'ecrire un interpreteur
|
| AST. Cas d'école d'un variant.

Fantastique. Peux-tu montrer comment ta prescription marche
concrètement pour représenter un langage simple comme C++ ?

-- Gaby
Avatar
Gabriel Dos Reis
Mathias Gaunard writes:

[...]

| Une présentation intéressante sur l'utilisation du polymorphisme
| d'inclusion en tant que détail d'implémentation :
| https://admin.adobe.acrobat.com/_a295153/p53888531/

Peut-être que tu devrais savoir que Sean travaille aussi sur les
concepts dynamiques et que le problème est isomophorme aux
multi-méthodes.

-- Gaby
Avatar
ld
On 1 juin, 03:12, Mathias Gaunard wrote:
Je dis simplement qu'au lieu de faire

void do_something(virtual Base1&, virtual Base2);

faire

template<Base1 T1, Base2 T2>
void do_something(T1&, T2&);

C'est bien entendu tout con, mais l'orienté objet est tellement
répandu que les gens ont parfois du mal à penser autrement.



C'est aussi parce que ca ne marche pas.

> Vous devriez essayer d'ecrire un interpreteur

AST. Cas d'école d'un variant.

> un evaluateur de
> feuille Excel

Je ne sais pas trop ce que c'est, mais n'est-ce pas un interpréteur ?

> ou encore un client de database par exemple

On a besoin de dynamisme où ?
Pour choisir le type de backend à charger à l'exécution ? Cela peut
parfaitement être un simple détail privé et/ou se faire avec de la
type erasure par exemple.



Je vois que vous avez une grande experience de ces applications, ce
qui explique peut-etre que vous ne voyez pas le probleme.

Une présentation intéressante sur l'utilisation du polymorphisme
d'inclusion en tant que détail d'implémentation :https://admin.adobe. acrobat.com/_a295153/p53888531/



Ce talk montre comment encapsuler le polymorphisme et ne resoud en
rien le probleme soujacent deja cite. Par exemple, comment trier
lexicographiquement les elements du document presente? Vous
remarquerez que l'encapsulation prend bien soin de ne proposer qu'un
nombre tres restreint de services single-dispatch (print, copy=clone).
A quoi ressemblerait compare, coherce, promote sans parler de tous les
operateurs binaires ou ternaires? Quel quantite de code faut-il
modifier a chaque fois que vous voulez ajouter un nouveau membre a
l'interface (modele fermer). Malgre ce qui est dit dans le talk,
l'approche est tres orientee data et non behavior. La demo de reverse
est un bel exemple qui cherche a cacher les limitations de l'approche
en montrant un semblant de collaboration alors que les permutations
sont sur des pointeurs.

> et nous
> montrer quels concepts vos algorithmes generiques demanderont a leurs
> arguments dont les types seront inconnus a la compilation.

C'est simple : un algorithme nécessite des primitives pour
fonctionner.
Conceptualiser consiste à reconnaître ces primitives pour les
formaliser.



Jusque la pas de probleme. Mais le probleme arrive quand il faut
ecrire ces primitives.

http://www.generic-programming.org/



J'attendais que vous me parliez de generative programming comme dans
GMCL. Vous vous trompez de sujet et on tourne en rond.

a+, ld.
Avatar
Mathias Gaunard
On 1 juin, 07:46, Gabriel Dos Reis wrote:

| Parce que la sémantique d'entité marche mieux pour la programmation
| orientée objet qu'une approche valeur, particulièrement pour les
| fameux objets "métier".

J'ai une bibliothèque qui utilise ce qu'on appelle la programmation
orientée objet et qui marche très bien, sans que j'ai à virer quoi que
ce soit.  C'est un ensemble de classes C++ permettant de représenter des
programmes C++.  L'utilisateur se voit présenter une interface, qui n e
contient que des classes abstraites.  En quoi virer les constructeur de
copie et opérateurs d'affectation aurait fait « marcher mieux » ?



La réponse se trouve dans la partie que vous n'avez pas cité.
Ça marche mieux dans la programmation objet telle qu'elle est définie
par les design patterns, la modélisation orienté objet, les "Java
schools", etc.
Qu'on puisse faire autrement ne prouve aucunement que ce soit faux.

La copie, l'affectation, le splicing, le clonage, ces concepts sont
quasiment absents dans les formations et les outils utilisés. Et je
parle de de manière pluri-langages, pas d'experts C++.
L'orienté objet que les gens manipulent, c'est la vision telle qu'elle
est dans Java, C# ou UML.

Par ailleurs, il me semble avoir vu l'argument de la sémantique
d'entité venir fréquemment de Luc Hermitte, qui est contributeur
régulier à ce groupe et qui donne des formations sur l'orienté objet
dans les entreprises, si ma mémoire est bonne.


| "Apparemment" dénote une impression personnelle.
| Ce que j'en connais, ce sont les papiers postés tous les deux mois su r
| open-std.org, le groupe comp.std.c++, et les quelques contacts que
| j'ai qui ont participé à des comités.
                         ^^^^^^^^^^^^^^

« des comités C++ » ?



Non non, des rassemblements de grand-mère pour jouer au bridge...


C'est beaucoup plus nuancé que cela.



Je veux bien le croire, d'autant plus que chacun des membres a des
intérêts différents, mais c'est pourtant l'impression que ça donne.
Les aspects de programmation générique et fonctionnelle sont favorisé s
par le nouveau standard, et cela traduit une volonté de mettre en
avant ces fonctionnalités, que cela soit intentionnel ou non.
Avatar
Mathias Gaunard
On 1 juin, 07:52, Gabriel Dos Reis wrote:

Peut-être que les gens ne font pas ce que tu proposes parce que cela ne
marche pas ? Avant de répondre, prends le temps de donner un peut de
crédit aux gens qui ont écrit la proposition.



Rapport avec le reste ?
Je n'ai jamais dénigré cette proposition. Les multi-méthodes c'est
très bien. Je ne fais que proposer des alternatives pour pouvoir faire
autrement (ce que j'ai déjà dit, quoi, six fois dans ce fil ?)


| > Vous devriez essayer d'ecrire un interpreteur
|
| AST. Cas d'école d'un variant.

Fantastique.  Peux-tu montrer comment ta prescription marche
concrètement pour représenter un langage simple comme C++ ?



Les types sommes et le pattern matching des langages de type ML sont
très souvent présentés comme étant une des solutions les plus
élégantes pour manipuler des arbres telles que des AST.
Avatar
Mathias Gaunard
On 1 juin, 07:56, Gabriel Dos Reis wrote:
Mathias Gaunard writes:

[...]

| Une présentation intéressante sur l'utilisation du polymorphisme
| d'inclusion en tant que détail d'implémentation :
|https://admin.adobe.acrobat.com/_a295153/p53888531/

Peut-être que tu devrais savoir que Sean travaille aussi sur les
concepts dynamiques et que le problème est isomophorme aux
multi-méthodes.



Chose que je sais déjà, bien entendu, dans une certaine mesure.
Adobe.Poly, c'est quand même archi connu hein... Et les présentations
dessus sont dispos sur le même site.
Les concepts dynamiques, c'est de ça que je parle à chaque fois que je
dis type erasure dans ce fil (que j'ai déjà dit à plusieurs reprises) .

Puis-je savoir pourquoi vous insistez pour essayer de me rabaisser, en
m'adressant de manière personnelle des reproches ou des choses que je
devrais savoir ?
Ce genre de commentaire serait plus constructif en disant "par
ailleurs, la même personne travaille aussi sur [...]".

Apparemment vous m'avez pris en grippe quand j'ai donné mon impression
sur l'orientation de C++. Je ne cherchais pas à critiquer le travail
de l'AFNOR hein...
Avatar
Mathias Gaunard
On 1 juin, 07:34, Gabriel Dos Reis wrote:

| Ah, j'avais oublié que fr.comp.lang.c++ c'était pas très construc tif.

Tu as absolument raison et tes messages (y compris celui auquel je
réponds) en sont des évidences palpables



En effet, tout le sous-fil est devenu non constructif à votre
initiative, malgré mes efforts pour mettre de réelles informations et
pistes de réflexion dans mes messages.


tu as commencé à pontifier
avec des opinions fortes sur une proposition que tu sembles vaguement
avoir lue.  



Encore une fois, je n'ai aucune opinion particulière sur cette
proposition.
Je n'en ai jamais émis aucune, à part sur l'idée même des multi-
méthodes (j'ai dit que c'était très bien) et que permettre les
templates virtuels seraient probablement moins de travail
d'intégration et serait plus efficace, ce qui est une évidence
puisqu'il n'y aurait aucun surcoût par rapport aux fonctions
virtuelles déjà existantes.
Je suis persuadé que d'avoir les fonctions template virtuels serait
"mieux" (l'idéal étant d'avoir les deux, bien sûr), mais je suis auss i
parfaitement conscient que puisque export est controversé, cette
fonctionnalité le serait aussi, puisqu'elle nécessite des mécanismes
similaires.

Il faut arrêter de prêter des propos à des gens qui ne les tiennent
pas.

Oui j'ai vaguement lu la proposition, mais ce n'est pas mon boulot de
les lire et de les analyser.


| Je ne suis pas sur Internet pour donner un avis objectif, ni fournir
| une analyse complète.

Un euphémisme pour « je ne suis pas sur Internet pour être très
constructif » ?



C'est vrai qu'une attitude hautaine en lisant à moitié les messages et
sans chercher à comprendre le raisonnement des personnes qu'il y a
derrière c'est beaucoup mieux n'est-ce pas ?

Je ne vous en tiens pas rigueur cependant, vous avez probablement des
occupations qui vous empêchent de passer du temps sur une chose
pareille, comme chacun d'entre nous dans une certaine mesure.
Avatar
Gabriel Dos Reis
Mathias Gaunard writes:

| On 1 juin, 07:46, Gabriel Dos Reis wrote:
|
| > | Parce que la sémantique d'entité marche mieux pour la progr ammation
| > | orientée objet qu'une approche valeur, particulièrement pou r les
| > | fameux objets "métier".
| >
| > J'ai une bibliothèque qui utilise ce qu'on appelle la programmation
| > orientée objet et qui marche très bien, sans que j'ai à virer quoi que
| > ce soit.  C'est un ensemble de classes C++ permettant de reprà ©senter des
| > programmes C++.  L'utilisateur se voit présenter une interfac e, qui ne
| > contient que des classes abstraites.  En quoi virer les constructe ur de
| > copie et opérateurs d'affectation aurait fait « marcher mieux » ?
|
| La réponse se trouve dans la partie que vous n'avez pas cité.

Je ne l'ai pas citée parce qu'elle ne répondait pas à la que stion.

| Ça marche mieux dans la programmation objet telle qu'elle est dà ©finie
| par les design patterns, la modélisation orienté objet, les "Ja va
| schools", etc.

Comment et pourquoi ?

Je demande parce que j'image que tu dois avoir des raisons rationnelles
autres que « ca marche mieux. »

| Qu'on puisse faire autrement ne prouve aucunement que ce soit faux.

Tu dis que ça marche *mieux*. J'aimerais savoir pourquoi et comment,
Je n'ai pas dit que c'est faux.

| La copie, l'affectation, le splicing, le clonage, ces concepts sont
| quasiment absents dans les formations et les outils utilisés. Et je

Encore une fois, les classes que la bibliothèque présente à
l'utilisateur sont abstraites. Pourquoi dois-je virer des choses
en plus. Et pouquoi et comment est-ce que ta prescription marche mieux ?

| parle de de manière pluri-langages, pas d'experts C++.

Je ne parle pas de multi-langage -- je parle de la programmation
concrète sur fr.comp.lang.c++. J

| L'orienté objet que les gens manipulent, c'est la vision telle qu'el le
| est dans Java, C# ou UML.

C'est bon le Kool Aid ?

| Par ailleurs, il me semble avoir vu l'argument de la sémantique
| d'entité venir fréquemment de Luc Hermitte, qui est contributeur
| régulier à ce groupe et qui donne des formations sur l'orient é objet
| dans les entreprises, si ma mémoire est bonne.

J'avais supposé que tu ne faisais pas que répéter une prescr iption que tu
aurais lu ici ou là sans en comprendre l'essence...

| > | "Apparemment" dénote une impression personnelle.
| > | Ce que j'en connais, ce sont les papiers postés tous les deux mo is sur
| > | open-std.org, le groupe comp.std.c++, et les quelques contacts que
| > | j'ai qui ont participé à des comités.
| >                          ^^^^^^^^^^^^^^
| >
| > « des comités C++ » ?
|
| Non non, des rassemblements de grand-mère pour jouer au bridge...

donc, tu admettras sans difficulté que ces contacts ont une pertinence
nulle au sujet.

| > C'est beaucoup plus nuancé que cela.
|
| Je veux bien le croire, d'autant plus que chacun des membres a des
| intérêts différents, mais c'est pourtant l'impression que ça donne.
| Les aspects de programmation générique et fonctionnelle sont fa vorisés
| par le nouveau standard, et cela traduit une volonté de mettre en
| avant ces fonctionnalités, que cela soit intentionnel ou non.

« favorisé » est beaucoup plus fort que ceux qui *travaillen t* vraiment
sur le standard utiliserait. Je crois que j'ai fait des contributions
décisives aux deux aspects que tu as mentionnés et je ne crois pa s que ton
impressions soit proche de la réalité.

-- Gaby
Avatar
Gabriel Dos Reis
Mathias Gaunard writes:

| On 1 juin, 07:52, Gabriel Dos Reis wrote:
|
| > Peut-être que les gens ne font pas ce que tu proposes parce que ce la ne
| > marche pas ? Avant de répondre, prends le temps de donner un peut de
| > crédit aux gens qui ont écrit la proposition.
|
| Rapport avec le reste ?

tu as ignoré ? Je fais confiance à tes talents.

| Je n'ai jamais dénigré cette proposition. Les multi-méthod es c'est
| très bien. Je ne fais que proposer des alternatives pour pouvoir fai re
| autrement (ce que j'ai déjà dit, quoi, six fois dans ce fil ?)

Tes alternatives suggèrent :
( ) tu n'as pas lu la proposition
( ) tu n'as pas compris le problème

Coche la bonne case.

| > | > Vous devriez essayer d'ecrire un interpreteur
| > |
| > | AST. Cas d'école d'un variant.
| >
| > Fantastique.  Peux-tu montrer comment ta prescription marche
| > concrètement pour représenter un langage simple comme C++ ?
|
| Les types sommes et le pattern matching des langages de type ML sont
| très souvent présentés comme étant une des solutions les plus
| élégantes pour manipuler des arbres telles que des AST.

Je parlais de ta suggestion que tu as pris soin d'ignorer.
Je suppose que l'absence d'exemples illustratifs est un aveu ?
Avatar
Gabriel Dos Reis
Mathias Gaunard writes:

| On 1 juin, 07:56, Gabriel Dos Reis wrote:
| > Mathias Gaunard writes:
| >
| > [...]
| >
| > | Une présentation intéressante sur l'utilisation du polymorp hisme
| > | d'inclusion en tant que détail d'implémentation :
| > |https://admin.adobe.acrobat.com/_a295153/p53888531/
| >
| > Peut-être que tu devrais savoir que Sean travaille aussi sur les
| > concepts dynamiques et que le problème est isomophorme aux
| > multi-méthodes.
|
| Chose que je sais déjà, bien entendu, dans une certaine mesure.

I rest my case.

-- Gaby