| Les concepts relevent du meme mecanisme: abandonner une certaine
| souplesse au profit d'une verification statique plus poussee.
Note cependant que pour nous, les concepts sont des prédicats de types
et de valeurs, et donc peuvent être manipulés direcrement avec les
opérateurs logiques.
De plus, on peut faire de la surcharge à base des concepts
| Les concepts relevent du meme mecanisme: abandonner une certaine
| souplesse au profit d'une verification statique plus poussee.
Note cependant que pour nous, les concepts sont des prédicats de types
et de valeurs, et donc peuvent être manipulés direcrement avec les
opérateurs logiques.
De plus, on peut faire de la surcharge à base des concepts
| Les concepts relevent du meme mecanisme: abandonner une certaine
| souplesse au profit d'une verification statique plus poussee.
Note cependant que pour nous, les concepts sont des prédicats de types
et de valeurs, et donc peuvent être manipulés direcrement avec les
opérateurs logiques.
De plus, on peut faire de la surcharge à base des concepts
Note cependant que pour nous, les concepts sont des prédicats de types
et de valeurs, et donc peuvent être manipulés direcrement avec les
opérateurs logiques. De plus, on peut faire de la surcharge à base des
concepts
concept Small<typename T, int N>
where sizeof (T) < N
{ }
template<typename T> where Small<T, 256>
void f(const T&);
template<typename T> where !Small<T, 256>
void f(const T&);
Note cependant que pour nous, les concepts sont des prédicats de types
et de valeurs, et donc peuvent être manipulés direcrement avec les
opérateurs logiques. De plus, on peut faire de la surcharge à base des
concepts
concept Small<typename T, int N>
where sizeof (T) < N
{ }
template<typename T> where Small<T, 256>
void f(const T&);
template<typename T> where !Small<T, 256>
void f(const T&);
Note cependant que pour nous, les concepts sont des prédicats de types
et de valeurs, et donc peuvent être manipulés direcrement avec les
opérateurs logiques. De plus, on peut faire de la surcharge à base des
concepts
concept Small<typename T, int N>
where sizeof (T) < N
{ }
template<typename T> where Small<T, 256>
void f(const T&);
template<typename T> where !Small<T, 256>
void f(const T&);
Marc Boyer writes:
| Le 19-11-2005, écrit :
| > Miam, il y a l'air d'y avoir du bon. Pour l'instant, j'ai juste lu (une
| > première fois, d'autres lectures seront nécessaires) le document "A
| > formalism for C++". Un point me gêne : Je ne vois pas à quoi peut
| > servir ce formalisme. As-tu un exemple ?
|
| Je me demande si sans ce formalisme ils auraient pu prétendre
| aussi facilement que leur notion de concept permettait de
| vérifier à la compilation qu'un ensemble de contraintes
| suffit à garantir la signature d'un template.
cela serait effectivement beaucoup plus dur à avancer :-)
Nous avons appris beaucoup de choses avec ce formalisme (même
incomplet) :-)
Marc Boyer <Marc.Boyer@enseeiht.yahoo.fr.invalid> writes:
| Le 19-11-2005, loic.actarus.joly@numericable.fr écrit :
| > Miam, il y a l'air d'y avoir du bon. Pour l'instant, j'ai juste lu (une
| > première fois, d'autres lectures seront nécessaires) le document "A
| > formalism for C++". Un point me gêne : Je ne vois pas à quoi peut
| > servir ce formalisme. As-tu un exemple ?
|
| Je me demande si sans ce formalisme ils auraient pu prétendre
| aussi facilement que leur notion de concept permettait de
| vérifier à la compilation qu'un ensemble de contraintes
| suffit à garantir la signature d'un template.
cela serait effectivement beaucoup plus dur à avancer :-)
Nous avons appris beaucoup de choses avec ce formalisme (même
incomplet) :-)
Marc Boyer writes:
| Le 19-11-2005, écrit :
| > Miam, il y a l'air d'y avoir du bon. Pour l'instant, j'ai juste lu (une
| > première fois, d'autres lectures seront nécessaires) le document "A
| > formalism for C++". Un point me gêne : Je ne vois pas à quoi peut
| > servir ce formalisme. As-tu un exemple ?
|
| Je me demande si sans ce formalisme ils auraient pu prétendre
| aussi facilement que leur notion de concept permettait de
| vérifier à la compilation qu'un ensemble de contraintes
| suffit à garantir la signature d'un template.
cela serait effectivement beaucoup plus dur à avancer :-)
Nous avons appris beaucoup de choses avec ce formalisme (même
incomplet) :-)
Les papiers sur SELL ont l'air interessant aussi.
Les papiers sur SELL ont l'air interessant aussi.
Les papiers sur SELL ont l'air interessant aussi.
"" wri tes:
[...]
| Autre question, qui m'est venue en lisant ça, et par le fait que je
| découvre un peu le Java et le C# en ce moment. J'ai un peu
| l'impression que dans ces langages, les interfaces remplissent assez
| souvent le rôle que l'on voudrait faire remplire aux concepts en C++.
| Suis-je le seul à être de cet avis ?
Je crois que la ressemblance est seulement superficielle.
En générale, les gens ont tendance à dire que les concepts
ressemblent aux « type classes » de Haskell. Mais là, également,
nous avons expliqué dans les deux papiers (ainsi qu'à POPL) la
semaine dernière que la ressemblaence est encore superficielle même
si elle est forte.
"loic.actarus.joly@numericable.fr" <loic.actarus.joly@numericable.fr> wri tes:
[...]
| Autre question, qui m'est venue en lisant ça, et par le fait que je
| découvre un peu le Java et le C# en ce moment. J'ai un peu
| l'impression que dans ces langages, les interfaces remplissent assez
| souvent le rôle que l'on voudrait faire remplire aux concepts en C++.
| Suis-je le seul à être de cet avis ?
Je crois que la ressemblance est seulement superficielle.
En générale, les gens ont tendance à dire que les concepts
ressemblent aux « type classes » de Haskell. Mais là, également,
nous avons expliqué dans les deux papiers (ainsi qu'à POPL) la
semaine dernière que la ressemblaence est encore superficielle même
si elle est forte.
"" wri tes:
[...]
| Autre question, qui m'est venue en lisant ça, et par le fait que je
| découvre un peu le Java et le C# en ce moment. J'ai un peu
| l'impression que dans ces langages, les interfaces remplissent assez
| souvent le rôle que l'on voudrait faire remplire aux concepts en C++.
| Suis-je le seul à être de cet avis ?
Je crois que la ressemblance est seulement superficielle.
En générale, les gens ont tendance à dire que les concepts
ressemblent aux « type classes » de Haskell. Mais là, également,
nous avons expliqué dans les deux papiers (ainsi qu'à POPL) la
semaine dernière que la ressemblaence est encore superficielle même
si elle est forte.
writes:
| Gabriel Dos Reis writes:
|
| > "" writes:
|
| > [...]
|
| > | Autre question, qui m'est venue en lisant ça, et par le fait que je
| > | découvre un peu le Java et le C# en ce moment. J'ai un peu
| > | l'impression que dans ces langages, les interfaces remplissent assez
| > | souvent le rôle que l'on voudrait faire remplire aux concepts en C++.
| > | Suis-je le seul à être de cet avis ?
|
| Si les contraintes sur les générics s'étaient exprimées comme c eci :
|
| class Foo <T implements Constraints> (*)
| { ... }
|
| au lieu de
|
| class Foo <T : extends Base >
| { ... }
|
| , je crois que je serais de cet avis.
Je ne comprends pas.
| > Je crois que la ressemblance est seulement superficielle.
|
| Est-ce en pensant à quelque chose du genre (*) que vous y voyates une
| ressemblance superficielle ? :)
Quelque chose comme (*) spécifie des contraintes sur des paramètres
individuellement, c'est rarement ce dont on a besoin dans le contexte
de C++
-- je passe sous silence l'argument traditionnel qu'une
solution à base de hiérarchie de classe ne convient pas à C++. Voir
D&E et les papiers d'octobre 2003 sur les concepts.
fabien.chene.invalid@nospam.laposte.net writes:
| Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> writes:
|
| > "loic.actarus.joly@numericable.fr" <loic.actarus.joly@numericable.fr> writes:
|
| > [...]
|
| > | Autre question, qui m'est venue en lisant ça, et par le fait que je
| > | découvre un peu le Java et le C# en ce moment. J'ai un peu
| > | l'impression que dans ces langages, les interfaces remplissent assez
| > | souvent le rôle que l'on voudrait faire remplire aux concepts en C++.
| > | Suis-je le seul à être de cet avis ?
|
| Si les contraintes sur les générics s'étaient exprimées comme c eci :
|
| class Foo <T implements Constraints> (*)
| { ... }
|
| au lieu de
|
| class Foo <T : extends Base >
| { ... }
|
| , je crois que je serais de cet avis.
Je ne comprends pas.
| > Je crois que la ressemblance est seulement superficielle.
|
| Est-ce en pensant à quelque chose du genre (*) que vous y voyates une
| ressemblance superficielle ? :)
Quelque chose comme (*) spécifie des contraintes sur des paramètres
individuellement, c'est rarement ce dont on a besoin dans le contexte
de C++
-- je passe sous silence l'argument traditionnel qu'une
solution à base de hiérarchie de classe ne convient pas à C++. Voir
D&E et les papiers d'octobre 2003 sur les concepts.
writes:
| Gabriel Dos Reis writes:
|
| > "" writes:
|
| > [...]
|
| > | Autre question, qui m'est venue en lisant ça, et par le fait que je
| > | découvre un peu le Java et le C# en ce moment. J'ai un peu
| > | l'impression que dans ces langages, les interfaces remplissent assez
| > | souvent le rôle que l'on voudrait faire remplire aux concepts en C++.
| > | Suis-je le seul à être de cet avis ?
|
| Si les contraintes sur les générics s'étaient exprimées comme c eci :
|
| class Foo <T implements Constraints> (*)
| { ... }
|
| au lieu de
|
| class Foo <T : extends Base >
| { ... }
|
| , je crois que je serais de cet avis.
Je ne comprends pas.
| > Je crois que la ressemblance est seulement superficielle.
|
| Est-ce en pensant à quelque chose du genre (*) que vous y voyates une
| ressemblance superficielle ? :)
Quelque chose comme (*) spécifie des contraintes sur des paramètres
individuellement, c'est rarement ce dont on a besoin dans le contexte
de C++
-- je passe sous silence l'argument traditionnel qu'une
solution à base de hiérarchie de classe ne convient pas à C++. Voir
D&E et les papiers d'octobre 2003 sur les concepts.
( =?iso-8859-15?q?Fabien_CH ÊNE?=) writes:
[ ...]
|
| Je m'étonne du "only required", si on regarde l'exemple suivant :
|
| concept PostIncrementable <class T>
| {
| Var<T> v;
| v++;
| }
|
| template <class T>
| where PostIncrementable<T>
| T f( )
| {
| T t;
| t++;
| return t;
| }
|
| D'après ce que j'ai lu dans le dernier papier sur les concepts, T doit
| obligatoirement fournir les operations spécifiés dans le concept
| PostIncrementable, mais peut aussi fournir d'autres opérations, comme
| par exemple la construction par défaut d'un T.
Oui.
| Les commentaires dans le squelette du concept Parallelizable sus-cité
| me paraisse contradictoire avec ce que je comprends.
Je ne comprends pas.
| Peut-être est-il envisagé une solution de ce genre (?) :
|
| template <class T>
| expectexactly PostIncrementable<T>
| T f( )
| {
| T t; // Erreur
| t++;
| return t;
| }
|
| qui demande au compilateur de regarder dans la scope de f (au moins
| ...), si chaque opération sur un T est spécifié dans sa clause
| "expectexactly". Cela me parait difficilement faisable non ?
Je ne suis pas aou courant d'une proposition « expectexactly » et ce
qu'est sa sémantique.
Le commentaire dans dans Parallelizable veut dire que seules les
opérations spécifiées seront acceptées dans le corps de la foncti on
qui est controlée par Parallelizable.
Voir plus de details dans le papier « A Concept Design (Rev. 1) » ou
le papier « Specifying C++ Concepts »
fabien.chene.invalid@nospam.laposte.net ( =?iso-8859-15?q?Fabien_CH =CANE?=) writes:
[ ...]
|
| Je m'étonne du "only required", si on regarde l'exemple suivant :
|
| concept PostIncrementable <class T>
| {
| Var<T> v;
| v++;
| }
|
| template <class T>
| where PostIncrementable<T>
| T f( )
| {
| T t;
| t++;
| return t;
| }
|
| D'après ce que j'ai lu dans le dernier papier sur les concepts, T doit
| obligatoirement fournir les operations spécifiés dans le concept
| PostIncrementable, mais peut aussi fournir d'autres opérations, comme
| par exemple la construction par défaut d'un T.
Oui.
| Les commentaires dans le squelette du concept Parallelizable sus-cité
| me paraisse contradictoire avec ce que je comprends.
Je ne comprends pas.
| Peut-être est-il envisagé une solution de ce genre (?) :
|
| template <class T>
| expectexactly PostIncrementable<T>
| T f( )
| {
| T t; // Erreur
| t++;
| return t;
| }
|
| qui demande au compilateur de regarder dans la scope de f (au moins
| ...), si chaque opération sur un T est spécifié dans sa clause
| "expectexactly". Cela me parait difficilement faisable non ?
Je ne suis pas aou courant d'une proposition « expectexactly » et ce
qu'est sa sémantique.
Le commentaire dans dans Parallelizable veut dire que seules les
opérations spécifiées seront acceptées dans le corps de la foncti on
qui est controlée par Parallelizable.
Voir plus de details dans le papier « A Concept Design (Rev. 1) » ou
le papier « Specifying C++ Concepts »
( =?iso-8859-15?q?Fabien_CH ÊNE?=) writes:
[ ...]
|
| Je m'étonne du "only required", si on regarde l'exemple suivant :
|
| concept PostIncrementable <class T>
| {
| Var<T> v;
| v++;
| }
|
| template <class T>
| where PostIncrementable<T>
| T f( )
| {
| T t;
| t++;
| return t;
| }
|
| D'après ce que j'ai lu dans le dernier papier sur les concepts, T doit
| obligatoirement fournir les operations spécifiés dans le concept
| PostIncrementable, mais peut aussi fournir d'autres opérations, comme
| par exemple la construction par défaut d'un T.
Oui.
| Les commentaires dans le squelette du concept Parallelizable sus-cité
| me paraisse contradictoire avec ce que je comprends.
Je ne comprends pas.
| Peut-être est-il envisagé une solution de ce genre (?) :
|
| template <class T>
| expectexactly PostIncrementable<T>
| T f( )
| {
| T t; // Erreur
| t++;
| return t;
| }
|
| qui demande au compilateur de regarder dans la scope de f (au moins
| ...), si chaque opération sur un T est spécifié dans sa clause
| "expectexactly". Cela me parait difficilement faisable non ?
Je ne suis pas aou courant d'une proposition « expectexactly » et ce
qu'est sa sémantique.
Le commentaire dans dans Parallelizable veut dire que seules les
opérations spécifiées seront acceptées dans le corps de la foncti on
qui est controlée par Parallelizable.
Voir plus de details dans le papier « A Concept Design (Rev. 1) » ou
le papier « Specifying C++ Concepts »