|
Publicité ' | ||||||||||||||||||||||||
|
|
#161 | ||
|
Expert Confirmé
![]() ![]() Joel LamotteDéveloppeur de jeux vidéo Inscription : août 2004 Messages : 1 552 ![]() |
Code :
|
||
|
00
|
|
|
#162 | ||||||
![]() ![]() |
Citation:
La fonction membre size() de n'importe quelle collection de la STL est constante, et, pourtant, le code suivant est tout à fait correct: Code :
Citation:
Il ne faut pas considérer le compilateur comme un ennemi, bien au contraire: c'est ton meilleur allié. C'est lui qui va t'aider à respecter tes engagements et une saine logique dans le cas où un objet est constant avant l'étape fatidique de l'exécution, parce qu'à ce moment là, il sera trop tard, et, loi de murphy aidant, toujours de nature à te mettre dans une situation peu enviable. Citation:
Il n'y a aucun danger à permettre invocation d'une fonction constante au départ d'un objet non constant... Ce n'est pas le fait d'ajouter des restrictions qui est dangereux, c'est le fait d'en retirer Citation:
[EDIT] Du moins, si on entend par "constifier si besoin" le fait de considérer un objet non constant comme un objet constant[/EDIT] A la différence près que tu semblais suggérer que le compilateur puisse déterminer si, effectivement, une fonction est constante ou non, et là, je dit NON Le comportement du compilateur se doit d'être clairement déterminé dans une situation donnée. On ne peut pas se permettre de lui laisser la possibilité de choisir "ce qui est le mieux" du point de vue de la conception si l'auteur du code ne précise rien. Si tu lui laisse cette possibilité, il y aura toujours une chance sur deux qu'il... choisisse la mauvaise. Au final, le choix est simple: Soit on part (comme c'est le cas actuellement) du principe que les fonctions membres sont non constantes sauf indication explicite du contraire, soit on part du principe que les fonctions membres sont constantes sauf indication explicite du contraire. Si tu essaye de partir du principe que les fonctions membres sont non constantes mais que, si l'auteur du code ne l'indique pas, il se peut qu'elles soient, malgré tout constantes, et que c'est au compilateur de vérifier ce qu'il en est, tu t'apprête à foncer droit dans un mur...
__________________
en bas de page
|
||||||
|
|
00
|
|
|
#163 |
![]() ![]() |
Il faut bien se rendre compte que le compilateur a un travail à faire, et que c'est déjà bien suffisant: fournir un code exécutable.
Pour ce faire, il doit suivre trois règles:
Ce serait un peu comme de demander à une machine de concevoir une application et de la programmer sans avoir recours à la main d'oeuvre humaine. Je sais que les films comme terminator ou I robot on beaucoup déliré sur l'idée, mais on est encore loin d'y arriver
__________________
en bas de page
|
|
|
00
|
|
|
#164 |
|
Invité(e)
![]() Messages : n/a ![]() |
je refuse que des feignasses fassent du code pas propre en disant "le compilo va optimiser tout ca". c'est la meme excuse qui pousse les gens a dire "mais la performance de ce code n'est pas critique". un ingenieur software se doit de pondre le code sans erreur et adapté et pas de pecher par feignantise.
je pars du principe exactement inverse, une fonction devrait etre const par defaut et un mot clé devrait signaler que la fonction modifie l'objet. tout comme on devrait signaler qu'une fonction est virtelle. ce n'est _pas_ le job du compilateur de completer l'interface, c'est le job d'un architecte logiciel. quelqu'un qui ne comprend pas ca n peut pas travailler en equipe pour moi ca se range dans la categorie "avoir un nom de fonction qui explicite ce que fait la fonction dans son ensemble". parce que la lecture du code on la fait principalement dans l'interface, pas dans l'implementation. Dernière modification par screetch ; 07/01/2010 à 15h26. |
00
|
|
|
#165 |
|
Invité(e)
![]() Messages : n/a ![]() |
et pour completer sur le topic general, a la lueur des derniers posts je me rends compte que D n'est pas un langage orienté industrie, c'est un langage orienté recherche. il est tres abouti d'un point de vue theorie du langage (templates tres puissants, multi paradigmes) mais ne passe pas le "crash test" de la pratique; des problemes plus delicat comme le partage du code entre programmeurs et les outils associés sont en retard sur le reste de l'industrie.
Dernière modification par screetch ; 07/01/2010 à 15h25. |
00
|
|
|
#166 |
|
Membre Expert
![]() Inscription : juillet 2006 Messages : 1 520 ![]() |
Franchcment, cette remarque ne peut objectivement tenir la route.
Tout d'abords parce que java par exemple fait la même chose, et qu'il a très bien passé le crash test comme tu dis. Ensuite, car question illisibilité, le C++ se pose quand même la. |
|
|
00
|
|
|
#167 |
|
Invité(e)
![]() Messages : n/a ![]() |
le C++ a amené une plus grande facilité de partage du code par rapport a C, qui a contribué a le rendre populaire.
C# et Java sont des langages (comme le C++ ne me fait pas dire ce que j'ai pas dit) tres imparfaits mais des iterations sur les outils ont permis d'aider grandement a la productivité (exemple, le "folding" dans l'editeur permet de cacher les implémentations) le D n'apporte ni beaucoup plus de puissance ni plus d'aide a la relecture ni des outils efficaces, c'est costaud de s'imposer comme cela. il me semble que trop de temps a été passé sur la puissance/vitesse du compilateur et sur des details interessants au niveau du langage en delaissant ce dont l'industrie a reellement besoin, et je maintiens quelque part que le D n'est pas un langage de partage de code. Le C++, en fait, encore moins. Si un langage doit innover pour etre adopté par l'industrie c'est peut etre par la qu'il faudrait passer? ou alors dans les outils pour le rendre plus facile d'acces. |
00
|
|
|
#168 |
|
Expert Confirmé Sénior
![]() ![]() Développeur d'applications Inscription : novembre 2005 Messages : 2 562 ![]() |
Je suis pas tout à fait d'accord avec ce qui a été dit dans le post précédent mais c'est vrai qu'une palette d'outils et un IDE puissant aide beaucoup une technologie à gagner en popularité.
D'ailleurs les librairies graphiques préférées sont souvent celles qui offrent les meilleurs designers visuels, donc la meilleure productivité. |
|
|
00
|
|
|
#169 | |
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
Citation:
En C++ c'est pénible à cause de la séparation GCC/MSVC/autre, boost/pas boost, RTTI/pas RTTI, STL/pas STL, Qt/pas Qt, fromage/dessert. Un langage qui débarque ne peut pas vraiment avoir un environnement aussi utile et stable que les standards de l'industrie. Il y a bel et bien des efforts d'intégration (IDEs spécifiques, intégration Eclipse etc...) mais pas forcément les ressources pour faire tout ce que les gens demandent ("je veux que ca marche sur ARM", "je veux un plugin pour le support dans Visual Studio..."). Et puis pour construire la réputation d'un langage il faut convaincre des gens à la fois dans l'industrie et dans l'académie, c'est comme ca parce que les thésard ont du temps. D reste tout de même beaucoup moins académique qu'Haskell et Scala. Bref, pour une fois que quelqu'un propose un langage qui n'est pas moins-puissant-que-C++ et qui promet une belle économie de ressources, on lui reproche de ne pas avoir de bouton "fold" dans une IDE. Le serpent se mort la queue. |
|
|
00
|
|
|
#170 |
|
Membre Expert
![]() Inscription : juillet 2006 Messages : 1 520 ![]() |
J'ajouterais que code block à une intégration sympatique de D. Ça ne vaut pas visual studio, mais c'est vraiment sympatoche.
|
|
|
00
|
|
|
#171 | |||
|
Membre éprouvé
![]() Inscription : mai 2005 Messages : 223 ![]() |
Citation:
Pour rappel, D utilise un const explicite, comme le prouve ce code, qui foire à la compilation Code :
|
|||
|
|
00
|
|
|
#172 | |
|
Membre du Club
![]() Inscription : juin 2009 Messages : 68 ![]() |
Citation:
http://herbsutter.wordpress.com/ |
|
|
|
00
|
|
|
#173 |
|
Membre Expert
![]() ![]() Inscription : juillet 2008 Messages : 1 580 ![]() |
C'est pas nouveau :p. Sa fait un moment qu'il est attendu. (LA référence sur le D).
|
|
|
00
|
|
|
#174 |
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
C'est un hippie, je parie qu'il écrit son livre dans un garage
|
|
00
|
|
|
#175 |
|
Expert Confirmé
![]() ![]() Joel LamotteDéveloppeur de jeux vidéo Inscription : août 2004 Messages : 1 552 ![]() |
Ce n'est pas nouveau, au début du thread je parlais justement de discussions a propos du D qui ont été déclenchées après la publication d'un article d'Alexandrescu et il y a effectivment mention du bouquin.
Ce qui est interessant c'est que visiblement le bouquin va certainement servir de spécification pour mieu fixer le language. Ca me semble pas tout a fait pratique mais bon... Sinon Alexandrescu est aussi star-developer sur le language, il y participe activement. |
|
00
|
|
|
#176 | |
|
Membre éprouvé
![]() Inscription : mai 2005 Messages : 223 ![]() |
Citation:
Il a d'ailleurs prévu des nouveaux changements importants dans le langage : par exemple le mécanisme de surcharge d'opérateurs devrait être refondu avant la publication de son livre, qui coïncidera avec la stabilisation de D2. |
|
|
|
00
|
|
|
#177 |
|
Membre Expert
![]() |
Le jour de la fin du C++ n'est pas là et je pense qu'elle est encore très très loin, ce langage permet de tout faire, et le nombre indénombrable de bibliothèques et frameworks qui permettent de l'étendre à tout les domaines et toutes les applis codées avec sont là pour en attester. C++ c'est vraiment l'équilibre parfait entre l'homme et la machine niveau langage (Java et C# sont bien trop loin de la machine pour moi quoi qu'en pense Microsoft), il y a certes quelques défauts mais il n'y a pas besoin d'un autre langage pour le remplacer, il suffit de modifier l'existant, et vu les possibilités...
|
|
00
|
|
|
#178 | |
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
Citation:
Enfin bon, si tu penses que C++ est un parfait équilibre c'est probable que le D ne t'intéressera pas. |
|
|
00
|
|
|
#179 |
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
Juste une liste de choses que je ne peux pas faire en C++ aujourd'hui:
- CTFE - arrays ops - slices - propriétés - import - auto - templates mixins - nested functions - de pas écrire de headers - constexpr ("const") - pas besoin de preprocesseur - compiler en 2 sec un programme en entier (200 ms pour du link incrémental) alors qu'avec D1 je peux et je le fais aujourd'hui. Je précise que le C++, j'en vis et que merci je le connais. |
|
00
|
|
|
#180 |
|
Expert Confirmé
![]() ![]() Joel LamotteDéveloppeur de jeux vidéo Inscription : août 2004 Messages : 1 552 ![]() |
Sans douter de tes connaissances, quelques reflexions :
- CTFE Tu peux préciser stp? Je connais pas cet acronyme... - arrays ops Je ne suis pas sur de comprendre non plsu ce que tu entends par là? - slices Là par contre je ne vois pas bien en quoi en D il y a un avantage par rapport a C++, un slice a priori, est de toutes manière dépendant du conteneur ou des fonctions qui l'effectuent non? - propriétés Cette feature est pour le moins contestée au niveau C++... a mon avis avec ou sans c'est pas très important. - import Oui, tout ce qui est module est problématique en C++, visiblement le problème sera (avec de la chance) travaillé pour le TR2 (après c++0x). - auto Sera disponible dans C++0x et est aujourd'hui déjà implémenté dans des compilateurs récents comme gcc 4.4.x (si je me trompe pas) et le prochain vc10 qui devrait être officiellement dispo dans quelques mois et dont la beta est déjà dispo. - templates mixins Pas d'avis là dessus personellement. - nested functions Possibles a partir de C++0x via les lambda. - de pas écrire de headers Je ne comprends pas ce point : tu peux tout a fait coder sans header si tu n'as pas de types communs a tes différents cpp... ? - constexpr ("const") Ca arrive avec C++0x - pas besoin de preprocesseur Je ne comprends pas non plus : si tu n'utilise pas de commandes de préprocesseur, alors il ne sera pas utilisé. Ou alors j'ai mal compris ce que tu veux dire? - compiler en 2 sec un programme en entier (200 ms pour du link incrémental) C'est clair! D'après ce que j'ai lu sur le net, il se peut que si un systeme de module est mis en place, cela aiderai à largement accélérer la compilation. Mais je n'ai pas suivi les détails, je dis peut être des bêtises. En tout cas, rendre la compilation rapide aiderai grandement au niveau organisations iteratives façon scrum parcequ'on perdrait moins de temps a récupérer une version pour du feedback. |
|
00
|
Copyright © 2000-2013 - www.developpez.com