 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Gabriel Dos Reis Guest
|
Posted: Fri Jun 27, 2003 7:02 pm Post subject: Re: decltype |
|
|
Julien Blanc <Julien.Blanc (AT) imag (DOT) fr> writes:
| Quote: | J'ai l'impression que les habitues des langages fonctionnels
devineront assez bien ce que ca fait. Ce sera en tout cas loin dans ma
liste des choses qui ne font pas ce a quoi on s'attend, meme en
connaissant assez bien le langage.
C'est vrai qu'à côté de cdr et car, fun semble tout à fait intuitif.
fun n'est pas utilisé en CAML ??
|
Bien sûr.
-- Gaby
|
|
| Back to top |
|
 |
Gabriel Dos Reis Guest
|
Posted: Fri Jun 27, 2003 7:21 pm Post subject: Re: decltype |
|
|
Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr> writes:
| Quote: | Gabriel Dos Reis wrote:
Marc Boyer <Marc.Boyer (AT) enseeiht (DOT) yahoo.fr> writes:
| Si ça passe, je serais très surpris. Je pensais pas que des
| concepts de typage automatique "à la caml" (pou citer le plus
| connu) passerait dans des langages aussi répandus que C++.
Pourquoi ? Et pourtant, tu en utilises déjà des rudiments dans le C++
actuel (déduction d'arguments templates et compagnie).
Il me semble (aprèciation personnelle, nullement fondée sur
une quelconque étude sociologique sérieuse) que les rudiments
actuels se rapportait à la famille des conversions implicites.
|
Et les déductions d'arguments de template ?
| Quote: | | Après, par rapport à mon expérience (limitée) de Caml,
| plusieurs choses me gènent:
| - l'inférence de type caml est faite quand on écrit le code,
| sans avoir à l'instancier. Cela permet de vérifier de la
| cohérence avant toute instanciation.
L'inférence de type est optionelle.
Mais qui écrit une fonction générique un peu complexe
sans vérifier un coup que son type correspond bien
à ce à quoi il pensait ?
|
et si ce à quoi il pensait est que justement le type sera connu à
l'instantiation ?
template<typename Fun, typename T>
auto apply(Fun f, T t) { return f(t); }
| Quote: | | - a cause du modele de genericité du C++ (ou l'on ne passe
| pas la signature des operateurs utilisés), on est incapable
| de deviner le type de retour des operateurs.
Dans la discussion actuelle, les returns multiples sont bannis.
auto function(auto x, auto y, bool b){
auto res; // Version 1
|
Invalide.
| Quote: | decltype(x+y) res; // Version 2
|
Invalide.
| Quote: | if (b)
res= x+y;
else
res= x<
}
Et ce genre de chose aussi ?
|
Ce code est invalide puisque res n'est pas initialisé.
| Quote: | Mais c'est mieux qu'une macro, en commançant pas les histoires de
portées.
Je ne te suis pas. Qu'est-ce qu'on gagne ?
|
La portée, et ce qui fait d'une fonction une fonction : les arguments
sont évalués une fois poru initialisé les paramètres.
| Quote: |
Ensuite, le but c'est juste de donner la possibilité de ne
pas avoir à se soucier du type. Il ne faut pas oublier que
l'annotation de type explicite est une *redondance*, il y a des cas où
c'est souhaitable et il y a des cas où cela ne l'est pas.
Disons que cela me semble une redondance de sécurité utile.
|
Mais la redondance peut être aussi source d'ennuis interminables.
Nombre de problèmes de langages comme C++ viennent du fait que le
programme veut répéter des informations que le compilateurs connait
mieux que lui.
| Quote: | Un peu comme le const de certaines fonctions.
|
Là, je ne suis pas.
| Quote: |
| C'est à l'instanciation qu'on aura la surprise.
C'est différent des templates actuels ?
C'est typiquement C++ : la surprise est dans l'utilisation.
Mais est-on obligé de faire des extentions qui augmentent
encore les défauts courant ?
|
Mauvaise question. N'importe quel outil util peut être abusé d'une
manière ou d'une autre, donc augmente potentiellement les défauts
courants. Dans le cadre de C++, la question serait plutôt, les
bénéfices valent-ils le coût de la complexité ? Dépassent-ils les
potentiels défauts ?
Dans le cas actuel, il n'est pas encore clairement établi qu'on
augmente les défauts courants.
-- Gaby
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|