|
Publicité ' | ||||||||||||||||||||||||
|
|
#181 | ||
![]() ![]() Inscription : juin 2008 Messages : 7 631 ![]() |
http://en.wikipedia.org/wiki/Compile_time_function_executionCf : La métaprogrammation en C++
Citation:
Citation:
J'avoue que je ne comprends pas trop non plus. Force de l'habitude ? Peut être, mais j'avoue aimer pouvoir séparer la déclaration dans un fichier d'en-tête de l'implémentation dans un fichier source. |
||
|
|
00
|
|
|
#182 | ||||||||||
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
Pouvoir exécuter une fonction à la compilation.
Par exemple: const a = sin(1.5); // a est connue à la compil Citation:
Code :
Citation:
Citation:
Citation:
Citation:
Exact, mais C++0x n'est pas encore là. Les lambdas C++, c'est une très bonne nouvelle mais je n'aime pas l'idée de spécifier quoi mettre dans la closure manuellement. Citation:
On dit C++1x ![]() Citation:
Citation:
Un système de module en C++ nécessiterait d'exporter des templates, or c'est dur à faire. Ca m'étonnerait que ca vienne dans le compilateur de Microsoft par exemple... En D, un template n'a pas besoin d'être dans chaque "translation unit". Le D, c'est comme si une partie de Boost était dans le langage. Pas besoin d'attendre trois plombes que ca compile. |
||||||||||
|
00
|
|
|
#183 | |||||||||
![]() ![]() |
Citation:
Citation:
Disons que les tableaux dynamiques de D sont des std::vector builtins d'où un gain en expressivité au prix de la généricité. Citation:
Le concept de propriété est fondamentalement en désaccord avec des règles de POO qui sont souvent, et parfois volontairement, mal interprétées ou passées sous silence par certains langages. Je pense, entre autres, à la loi demeter Citation:
Comme l'ont si bien fait remarquer plusieurs personnes, la plupart des compilateurs actuels implémentent déjà une bonne partie des features de la prochaine norme Citation:
Citation:
L'auto-complétion n'est jamais qu'une "facilité fournie" par le traitement de texte intégré à ton environnement de développement... Le préprocesseur n'est qu'une étape de la compilation qui applique des macros... Si tu n'utilise pas les macros du préprocesseur, tu peux parfaitement t'en passer Si un EDI donné a besoin du préprocesseur pour permettre l'auto-complétion, j'aurais presque tendance à dire qu'il est beaucoup trop couplé avec le compilateur Citation:
La notion de module est utilisé en quasi permanence chaque fois que tu utilise une bibliothèque externe, que ce soit soit la forme d'une bibliothèque statique ou dynamique... Maintenant, rien ne t'empêche d'appliquer un raisonnement fort similaire pour tes propres développements, et de "modulariser" ton projet de manière à... créer des bibliothèques qui soient le plus indépendantes les unes des autres... Evidemment, il faut avouer que cela demande un peu plus d'effort de conception, mais qui oserait prétendre que l'on crée une application comme on écrit une lettre à sa douce
__________________
en bas de page
|
|||||||||
|
|
00
|
|
|
#184 |
|
Invité(e)
![]() Messages : n/a ![]() |
il ne faudrait pas non plus confondre la finalité avec les outils
"pouvoir tout faire" en C++ (même si je ne crois pas que ca soit vrai) voudrait plus dire selon moi que l'on peut réaliser tout type de programme avec les outils dont on dispose tandis que vous listez tous les outils dont D dispose, ce qui ne dit pas si on peut faire "plus de choses". |
00
|
|
|
#185 |
|
Membre Expert
![]() ![]() Inscription : juillet 2008 Messages : 1 580 ![]() |
+1 avec screetch... surtout que si on part par là, le C++ est turing complet, donnc il peut " tout faire"... Tout comme le BF
__________________
"Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu |
|
|
00
|
|
|
#186 | ||||||||
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
Citation:
Citation:
Citation:
Citation:
Citation:
Citation:
Cite moi un programme réel sans macros et sans #ifdef Citation:
Citation:
|
||||||||
|
00
|
|
|
#187 | |
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
Citation:
EDIT: Mais surtout, il ne fait pas moins comme tous les autres langages proposés comme "remplacement". Je cherche juste à répondre aux contre-vérités, pas à inciter qui que ce soit à programmer en D (il faut être un peu maso). |
|
|
00
|
|
|
#188 |
![]() ![]() Inscription : juin 2008 Messages : 7 631 ![]() |
A priori, avec son développement polynomial si mes souvenirs mathématiques sont bons
|
|
|
00
|
|
|
#189 | |||
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
Citation:
Sauf qu'un développement de Taylor comme ca, non seulement ca converge lentement mais ca ne marche bien qu'autour de zero. Donc ce n'est pas comme si "on pouvait faire ca en méta-programmation". Si j'ai envie de calculer ca à la compilation en C++: Code :
|
|||
|
00
|
|
|
#190 |
![]() ![]() Inscription : juin 2008 Messages : 7 631 ![]() |
Visual (donc hors du langage en lui même) propose les intrinsic, c'est à dire qu'il t'inline le code de fonctions comme sin, cos, etc. à la place de l'appel.
|
|
|
00
|
|
|
#191 | |||||||||
![]() ![]() |
Citation:
Je crois d'ailleurs que ce point est expliqué dans l'article sur la méta programmation déjà cité par 3D Citation:
Ce que je voulais exprimer, c'est que tu as sans doute trop pris l'habitude des propriétés pour te rendre compte que le concept lui-même est sujet à caution, entre autre à cause de demeter. Et comme les habitudes prises "au bibron" (comprend: quand on débute) sont les plus tenaces... Citation:
S'il est vrai que le concept d'encapsulation est une des composantes de demeter, ce n'est absolument pas le seul point de vue qu'elle aborde. De plus, tu sembles croire que le seul but de l'encapsulation est... de cacher le contenu d'un objet, et, là encore, ce n'est pas le cas. Si tu place un accesseur ou pire, un mutateur sur le membre d'une classe, il ne sert souvent pas à grand chose de le placer en visibilité privée pour *soi disant* l'encapsuler... Demeter dit que, si une classe B utilise (a comme membre un objet du type) une classe C, et que, si une classe A utilise un objet dont le type est un B, la classe A ne devrait absolument rien connaitre... du type C. Si tu crée une fonction qui renvoit... (une référence sur) un objet de type C, et, pire, si tu manipule depuis ton objet de type A (la référence sur)l'objet de type C renvoyé par ton objet de type B, tu crées une dépendance très forte de ta classe A vis à vis de... la classe C, alors que la seule dépendance réellement subie par la classe A devrait être vis à vis de... B L'idée poursuivie par l'encapsulation est de réfléchir d'une manière proche de Citation:
Citation:
Citation:
Si tu ose "prendre le pari" de déjà utiliser les possibilités de la prochaine norme, quitte à ce que cela se fasse à coup de compilation conditionnelle, tu te mets en bonne position pour réagir rapidement aux évolutions futures... En effet, une fois que la norme sera finalisée et appliquée, il te suffira d'une option de compilation pour être en mesure... de profiter de ses avantages, et, pourquoi pas, de supprimer toute une partie du code qui serait moins efficace. Cela prend, certes, plus de temps aujourd'hui, mais c'est, très certainement, de nature à t'en faire gagner énormément par la suite... Sur le court terme, cela ne changera pas grand chose du fait que cela ne te prend que quelques minutes de prendre les deux situations en compte au moment même, mais, sur le long terme, cela te fait gagner un temps précieux parce que tu t'économise le temps important que pourrait nécessiter le fait de tout reprendre (avec les problèmes de refactoring que cela implique) pour adapter ton code à la nouvelle norme Citation:
Citation:
Citation:
Et puis, il n'y a pas que les bibliothèques dynamiques, dans la vie... le bibliothèques statiques ont pas mal de choses à nous apporter, surtout lorsqu'il s'agit de modulariser un projet
__________________
en bas de page
|
|||||||||
|
|
00
|
|
|
#192 |
|
Invité(e)
![]() Messages : n/a ![]() |
les flottants et doubles ne sont pas supportés par les templates C++.
la raison est que le code est généré sur une machine A et éxécuté sur une machine B qui pourraient donner des résultats différents, donc le code flottant doit être calculé et non inliné. sinon il faut un compilateur capable d'émuler l'architecture cible, mais là encore, quid des exceptions de virgule flottante? |
00
|
|
|
#193 | ||
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
Citation:
A mon avis proposer un getter ou setter alors qu'on ne devrait pas (ie. violer Demeter) est orthogonal avec le fait d'utiliser ou non des propriétés, qui sont du sucre syntaxique autour (ou alors tu penses qu'on a jamais besoin de getter Il y a pire, j'ai vu un langage où chaque définition de champ définissait un getter et un setter automatiquement ![]() Citation:
|
||
|
00
|
|
|
#194 | |
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
Citation:
|
|
|
00
|
|
|
#195 | |||
![]() ![]() |
Citation:
Les propriétés n'étant, comme tu le fais remarquer, qu'un "sucre syntaxique" remplaçant les mutateur et accesseurs, tu est tenté de déclarer "propriété" (avec les accesseurs et mutateurs que le terme induit) quelque chose qui... ne devrait pas l'être... Citation:
Et, si j'admets encore "assez facilement" (alors que tu auras remarqué que je ne suis pas leur meilleur partisan) l'usage d'accesseurs, j'ai, toutes proportions gardées, encore beaucoup plus de mal à admettre les mutateurs. Or, si tu fournis un mécanisme qui tend à simplifier la mise en oeuvre de comportement qui devraient rester exceptionnels, tu incite de facto à la généralisation de l'utilisation de ces comportements. Et c'est en cela que j'ai énormément de mal à accepter le concept de propriété. Citation:
__________________
en bas de page
|
|||
|
|
00
|
|
|
#196 | ||||
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
Citation:
![]() Citation:
Cela dit, c'est une question de balance entre faire vite et faire bien ; on peut aussi s'en tenir à des conventions qu'on essaye de garder. Citation:
Citation:
Quelque part le C++ vient avec l'assertion que chaque partie du code sera réutilisé. De mon côté, j'écris beaucoup de code jetable qui n'aura que quelques utilisations seulement. (EDIT: la philosophie du C++ est aussi de faire confiance au programmeur ; libre à lui de se tirer une balle dans le pied, non ?) |
||||
|
00
|
|
|
#197 | |||
![]() ![]() |
Citation:
Le temps passé à assurer une conception correcte est très largement amorti au vu du temps passé en debugage et recherche d'erreur lorsque la conception fait défaut. Encore une fois, cela implique une vision à terme un peu plus large que... simplement les cinq prochaines minutes A titre personnel, la première chose que je fais quand on me demande un code, c'est de fumer une cigarette ou de boire un café... pour prendre le temps de réfléchir aux différentes implications de ce qu'on me demande. A défaut de sortir l'artillerie lourde (schema UML ou nassi schneiderman), pour des petites choses particulièrement limitées dans le temps, cela me permet, au moins, d'avoir une vue d'ensemble avant de commencer à coder, et de gagner énormément de temps par rapport à ceux qui se jettent sur leur clavie et commence à "vomir des lignes de code" sans savoir exactement ce qu'ils doivent faire... Si tu ne me crois pas, je t'invite à en faire l'expérience par toi même Citation:
C'est un peu comme si tu estimais devoir faire plus attention en écrivant un système d'exploitation qu'en écrivant une simple calculatrice en ligne de commande: quand on fait quelque chose, même si c'est un "petit projet" qui n'est pas destiné à être récupéré, on le fait bien, ou pas du tout... J'apprécie énormément les logiciels de qualité, et je présumes que je suis loin d'être le seul. Si tu te "contente" de fournir quelque chose d'à peine passable, il ne faut pas t'étonner outre mesure si ton concurrent direct, qui fournit quelque chose de meilleure qualité, a plus de succes que toi. Mais bon, ce n'est qu'un avis qui n'engage que moi... Mais je le partage Citation:
Il y a déjà tellement de pièges dans lesquels on risque de tomber, que ce soit au niveau de la conception ou au niveau d'un langage particulier (je vise particulièrement C++ ici), qu'il me semble inutile d'en rajouter "uniquement pour le plaisir"
__________________
en bas de page
|
|||
|
|
00
|
|
|
#198 | |
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
Citation:
Mais avoir assez vite quelque chose qui marche, dégage du temps pour une autre qualité justement ; pas forcément la qualité du code, que personne ne voit malheureusement, mais les choses à côté. Il y a aussi des moments où c'est la panique et qu'il faut aller vite (deadlines "presque tenable"...). Je n'ai pas l'impression que le C++ encourage spécialement à la qualité en fait (qualité dans le sens "pas de bugs"). (EDIT: même si le langage a peu d'influence là dessus) |
|
|
00
|
|
|
#199 |
|
Invité(e)
![]() Messages : n/a ![]() |
ce qui m'interesse le plus dans le C++ c'est le code généré pour moi par le compilateur; l'aggrégation de deux classes copiables est copiable, l'héritage aussi, le destructeur qui 95% du temps ne devrait pas être changé (et j'essaye vraiment de m'en tenir a cette règle)
a côté de cela, avoir une propriété ou bien appeler une fonction ne me fait ni chaud ni froid. |
00
|
|
|
#200 |
![]() ![]() Inscription : juin 2005 Messages : 8 592 ![]() |
Au fait, si on fait une version constexpr de sin, on peut très bien faire ça en C++0x hein ponce.
__________________
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++ Le guide pour bien débuter en C++ |
|
00
|
Copyright © 2000-2013 - www.developpez.com