|
Publicité ' | ||||||||||||||||||||||||
|
|
#21 |
![]() ![]() Inscription : juin 2005 Messages : 8 586 ![]() |
Ce qui est dommage, c'est qu'on ne savait pas trop à quoi s'attendre pour les axiomes... On va dire qu'on a du mal à voir comment le compilo peut en faire quelque chose.
__________________
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
|
|
|
#22 |
|
Invité(e)
![]() Messages : n/a ![]() |
si GCC avait un support direct du D (sur toute les plate formes, sans qu'il soit exterieur) alors D serait plus populaire.
|
00
|
|
|
#23 | |||
|
Expert Confirmé Sénior
![]() Mathias GaunardIngénieur développement logiciels Inscription : décembre 2003 Messages : 3 550 ![]() |
Citation:
Je trouve qu'il est plus clair de définir ce qu'est un concept avec une suite d'expressions valides plutôt qu'avec une signature. Ça ne compose pas très bien avec le genre de fonctionnalité que proposent les concept_map, par contre. Citation:
Citation:
En particulier, ne faire aucune optimisation est une implémentation valide. Une émulation (à moins qu'elle ne soit couplée à un optimiseur d'expressions Boost.Phoenix ou que sais-je) ne ferait aucune optimisation.
__________________
Boost ftw |
|||
|
|
00
|
|
|
#24 |
|
Membre éprouvé
![]() |
J'ai du mal à comprendre pourquoi il faut absolument trouver un successeur au C++
|
|
|
00
|
|
|
#25 | |||||
|
Membre Expert
![]() ![]() Inscription : mai 2008 Messages : 937 ![]() |
Du même exemple qu'a donné Florian, je suppose.
Ceci : Code :
Code :
Citation:
Et pourtant, bizarrement, dans pas mal d'entreprise, la politique c'est PAS DE TEMPLATE, car justement personne n'arrive à comprendre et maintenir ce genre de "syntaxe comparable claire et concise" à base de boue illisible de SFINAE, traits et autres hacks. |
|||||
|
|
00
|
|
|
#26 | ||||||||||
|
Expert Confirmé Sénior
![]() Mathias GaunardIngénieur développement logiciels Inscription : décembre 2003 Messages : 3 550 ![]() |
Comparons.
Définition de concept : Code :
Code :
Ensuite, l'usage : Code :
Code :
Alternativement on peut aussi faire Code :
__________________
Boost ftw |
||||||||||
|
|
00
|
|
|
#27 |
![]() ![]() |
Salut,
Pour en revenir au noeud du problème, je peux t'assurer que les "chroniques d'une mort annoncées" d'un langages ont eu lieu de tous temps... Et, de tous temps, elles se sont révélées n'être que des mirages, quel que soit le langage (utilisé de manière professionnelle) visé ou le temps laissé pour qu'elles se réalisent... Le bémol que l'on peut émettre, c'est que certains langages se sont retrouvé limités à des secteurs de niches particuliers, mais, dans l'ensemble, dés que tu as des développements étalés sur dix ans avec un langage précis, il est souvent plus facile et moins onéreux de trouver "la perle rare" qui connait le langage et de continuer à l'utiliser que reprendre le développement intégral dans un autre langage Cela a été le cas avec Ada, Cobol, et C quand un nouveau langage a été annoncé (je me demande même si, concernant fortran, il n'y aurait pas eu prophétie identique à la sortie de C), et, pourtant, ils sont toujours utilisés De plus, la décision prise concernant les concepts en C++ ressemble plus à un ajournement concernant leur mise au point qu'à un abandon définitif Sans compter le fait que ce n'est pas parce qu'une feature particulière n'est pas adoptée que, forcément, cela implique que le langage subira une "perte de vitesse", même si cette feature semble importante Tout cela pour te dire qu'il "n'est pas impossible" que l'absence des concepts fasse que certains nouveaux programmeur décident de ne pas l'utiliser, mais qu'il y a encore de la marge pour en arriver au fait que cette absence décide ceux qui l'utilisent à changer de langage Ceci dit, mon avis personnel est qu'il est bon d'être "spécialisé" dans un langage particulier, mais que cela n'empêche absolument de connaitre au minimum les bases des autres, et qu'il est même souhaitable d'être en mesure de se débrouiller avec Il n'est pas souhaitable de vouloir les maitriser parfaitement tous, car à trop vouloir savoir tout faire, on en vient à ne rien savoir faire correctement, mais c'est malgré tout une bonne chose que d'être en mesure de poser un oeil attentif sur un code écrit dans un autre langage que celui dans lequel on est "spécialisé" et d'arriver à comprendre ce qui est fait
__________________
en bas de page
|
|
|
00
|
|
|
#28 |
|
Membre chevronné
![]() ![]() Inscription : septembre 2008 Messages : 680 ![]() |
Merci Koala, c'est très rassurant pour moi de lire tout ceci
__________________
Cours : Initiation à CMake Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours) Ce message a été tapé avec un clavier en disposition bépo. |
|
|
00
|
|
|
#29 |
![]() ![]() ![]() ![]() Alexandre LaurentIngénieur développement logiciels Inscription : mai 2008 Messages : 10 437 ![]() |
So, mettons nous tous au D \o/
|
|
00
|
|
|
#30 |
|
Membre Expert
![]() Inscription : juillet 2006 Messages : 1 520 ![]() |
Bon alors sur proposition de Florian Goo, je relance le topic.
Tout d'abords, pour que vous cituiez le personnage, je suis un utilisateur expérimenté de C++, mais surtout un utilisateur de D bien que j'ai bien moins d'expérience dans ce langage. Dans un premier temps, soyons réaliste : D ne va pas tuer C++. C++ à un tel passif qu'il ne va pas disparaitre du jour au lendemain. On a un tas de libs en C++, tout plein de programmeurs expérimentés, et c'est une techno connue vers laquelle un décideur se tournera plus facilement qu'une techno moins connues (dissonance cognitive tout ça). D propose de faire du C++ à l'envers. En C++, on part bas niveau, mais, avec divers outils comme les smart pointers, ce que tous le monde utilise de nos jours, on s'élève à un niveau supérieur. D propose de coder haut niveau d'origine, mais de descendre bas niveau quand cela est nécessaire. Ce qui est à mon avis une meilleur approche étant donné la proportion de code haut niveau vs bas niveau dans une appli standard. Par exemple, la mémoire alloué l'est par défaut par un GC, mais on peut décider d'utiliser le mécanisme de notre choix. Ou bien les fonction membres d'une classe sont virtuelle par défaut. On précise qu'elles en le sont pas à l'aide du mots clef final, se besoin est. Pour moi, D, c'est ce qu'aurait du être le C++ si on l'avait conçu avec l'expérience qu'on a maintenant. J'ai vu ici que D avait été conçu par des théoriciens. Mon avis d'utilisateur est diamétralement opposé. En connaissant C++, j'ai juste l'impression de coder plus facilement sans me sentir vraiment plus limité. La syntaxe est plus simple, les bugs moins nombreux (ou détectés plus tôt/facilement), et ça compile vite ! D'ailleurs, ça compile suffisamment vite pour que D puisse être utilisé en langage de scripting. Le compilateur dmd fournis déjà cette possibilité. Parmi les choses sympathiques, il y a par exemple les unitest, les lazy évaluation pour les paramètres de fonction, les templates sont bien mieux pensées qu'en C++, permettent de faire plus plus simplement (C++0x propose des choses intéressantes la dessus, mais tout est déjà dans D), la surcharge d'opérateur est aussi mieux pensée. Voila pour D1. D2 promet bien plus, notamment sur le multithreading, ou l'approche est vraiment intéressante. D2 est un peu le C++0x version D, le truc génial qui peine à venir. Maintenant D souffre de quelques soucis de jeunesse. Il y a deux lib standard en compétition (sic) ce qui n'aide pas à s'y retrouver au début, et google est bien prolifique en réponses qu'avec C++ (bien qu'on ai généralement moins de questions aussi). La compatibilité avec C est très bien assurée, mais pas avec C++. Ceci est principalement du au fait que noms ne sont pas standardisées en C++, ce qui pose des soucis quand il faut lier le tout. Si appeler du code C est facile, D rompt la compatibilité au niveau syntaxique, ce qui est le principal défaut de C++ selon moi. Repartir sur une base saine et fraiche, c'est a mon avis ce qu'il faut à C++. Bref, c'est pour moi une bonne solution pour un projet tout neuf. Mais il faut savoir être réaliste, réutiliser l'existant est un gros point fort de C++. |
|
|
00
|
|
|
#31 | |||
|
Membre chevronné
![]() ![]() Inscription : septembre 2008 Messages : 680 ![]() |
Le D différencie allocation sur la pile et sur le tas, et donc permet le RAII. Ça c'est fort bien !
Citation:
Enfin, vu qu'on a plus de chances de s'exclamer « ah ben voilà pourquoi ça bugue, j'avais oublié de rendre la fonction virtuelle ! » que la même chose avec s/virtuelle/finale. Après tout, les variables sont mutables par défaut en C++. C'est certainement plus cohérent. Citation:
Citation:
Si on pouvait utiliser du C++ aussi bien que du C en D, ce serait un essor formidable.
__________________
Cours : Initiation à CMake Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours) Ce message a été tapé avec un clavier en disposition bépo. |
|||
|
|
00
|
|
|
#32 | |
|
Membre Expert
![]() Inscription : avril 2009 Messages : 1 359 ![]() |
Citation:
C'est, mine de rien, ce qui a contribué au succès initial du C++: partant d'un gros existant C, on pouvait assez facilement lui ajouter des bouts de C++, et ainsi de suite. C'est aussi ce qui a fait que le C++ traine toujours, 20 ans après, cet héritage... Francois |
|
|
|
00
|
|
|
#33 |
|
Membre chevronné
![]() ![]() Inscription : septembre 2008 Messages : 680 ![]() |
La possibilité d'utiliser des libs C++ serait déjà intéressante.
EDIT : Grâce à Scalpel (voir signature), on pourrait envisager un générateur de binding. Rendre possible l'inclusion directe de C ou C++ dans du code D serait reproduire l'erreur commise par le C++… la même « erreur » qui a permis des migrations de gros programme de C vers C++, certes.
__________________
Cours : Initiation à CMake Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours) Ce message a été tapé avec un clavier en disposition bépo. |
|
|
00
|
|
|
#34 | ||
|
Membre Expert
![]() Inscription : juillet 2006 Messages : 1 520 ![]() |
Citation:
- Une fonction virtuelle qui ne devrait pas l'être ne va pas poser de gros problèmes, si ce n'est une indirection lors de l'appel. Ce qui est en fait insignifiant dans la plupars des cas (cela n'est signifiant que si la fonction est destinée à être appelée très souvent). - Le compilo peut optimiser de lui même en « finalisant » une méthode. Mais bon, visiblement, ton message montre que tu as bien comprit ce point. De plus, D fait une différence très nette entre classe et structure. Dans une classe les méthodes sont virtuelles par défaut. On y fait de l'héritage, et toutes les classe héritent de la classe Object. Bref, on est dans le paradigme objet a fond les ballons. Dans le cas de la structure, on ne peut pas avoir de méthodes virtuelles ni d'héritage. Il y a fort a parier que nombre de tes classes C++ devraient être en fait traduite en D par des structures plutôt que des classes. Je ne te le fais pas dire ! Citation:
D prévoit de s'interfacer avec le C++, mais ce problème d'ABI fait que cela a été reporté à plus tard. |
||
|
|
00
|
|
|
#35 | ||
|
Membre Expert
![]() Inscription : juillet 2006 Messages : 1 520 ![]() |
Citation:
Citation:
Pour importer des lib bien connues, on peut faire : import std.c.stdio Ce qui revient à inclure stdio.h . Pour des choses personnalisées : extern (C) int foo(int a); //Pour cdecl extern (Windows) int foo(int a); //Pour stdcall Bref, rien de plus simple. On compile le C d'un coté, le D de l'autre, et on lie tout ensemble. |
||
|
|
00
|
|
|
#36 | |
|
Membre chevronné
![]() ![]() Inscription : septembre 2008 Messages : 680 ![]() |
Citation:
__________________
Cours : Initiation à CMake Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours) Ce message a été tapé avec un clavier en disposition bépo. |
|
|
|
00
|
|
|
#37 | ||||
![]() ![]() |
Citation:
Citation:
Mais c'est un travers repris par plus d'un langage. Je comprend le principe, mais cela signifie:
Citation:
Attention, n'allez pas me faire dire ce que je n'ai pas dit: je trouve énormément de qualités au paradigme objet... Mais cela n'empêche que j'estime que son potentiel est encore bien plus large s'il est couplé, par exemple, avec le paradigme générique, voire, pourquoi pas, avec une petite dose de procédural pur (une bonne fonction libre, éventuellement générique peut éviter pas mal de circonvolutions qui seraient nécessaires si on devait s'en tenir au seul paradigme objet) Citation:
Mais, en C++ la distinction entre une classe et une structure est à ce point ténue (elle tient dans la visibilité par défaut de la classe/structure) qu'il est tout à fait possible d'utiliser indifféremment l'un pour l'autre
__________________
en bas de page
|
||||
|
|
00
|
|
|
#38 |
|
Membre chevronné
![]() ![]() Inscription : septembre 2008 Messages : 680 ![]() |
Tiens, il m'avait échappé le coup de la classe Object… je ne suis pas fan non plus.
Concernant l'héritage multiple en losange, diamant ou parallélépipède rectangle, pas de problème puisque l'héritage multiple n'est pas autorisé. Je te rejoins sur l'exagération de la suprématie du paradigme objet. En revanche il me semble que les fonctions libres sont autorisées en D, donc fausse alerte.
__________________
Cours : Initiation à CMake Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours) Ce message a été tapé avec un clavier en disposition bépo. |
|
|
00
|
|
|
#39 | |
![]() ![]() |
Citation:
La raison est, sommes toutes, des plus simple, mais je lui trouve une certaine importance: Cela t'oblige à prendre en compte les restrictions imposées par le langage alors que tu n'est encore que très loin d'envisager ne serait-ce que la première ligne de code, du moins, dans un process idyllique de mise au point d'une application. Je m'explique: A la base de la mise au point, il y a (normalement) une analyse des besoins, des cas d'utilisation et tout plein de chose qui, au final, déboucheront sur un ou plusieurs diagrammes de classes. Et il est plus que vraisemblable que, à un moment donné, tu en vienne à te dire que "ce serait pas mal si ma classe C héritait de ma classe A et de ma classe B", dans le plus pur respect de LSP. Mais, c'est à ce moment là que tu te rappelle que "mince, zut, flute, j'avais oublié: le langage que j'utilise n'autorise pas l'héritage multiple" Alors, de deux choses l'une: Ou bien celui qui s'occupe de la conception en connait "suffisamment" sur le langage pour savoir qu'il doit éviter l'héritage multiple, mais il se retrouve confronté à devoir faire des circonvolutions pour "faire avec" cette limite. Ou bien il ne connait pas la limite (ou décide de ne pas en tenir compte, ce qui serait bien pire, mais qui arrive surement), et c'est le pauvre type chargé de l'implémentation qui doit, au mieux, demander à ce que l'on refasse le travail (avec le surcout et la perte de temps que cela implique), au pire se "démerder" et ne pas suivre le "plan" que l'on a tracé pour lui. Mais soyons clair sur un point: c'est un reproche que je fais de manière générale à tout langage qui place ce genre de restriction... Même si j'arrive à m'y faire lorsque je suis obligé d'utiliser un tel langage [EDIT]Je précise que, selon moi, une bonne conception (ou un bon algorithme, d'ailleurs) devrait pouvoir être totalement indépendant du langage dans lequel il ou elle sera implémenté et que ce n'est, en tous cas, pas au langage de placer des restrictions "arbitraires"...
__________________
en bas de page
|
|
|
|
00
|
|
|
#40 |
|
Membre chevronné
![]() ![]() Inscription : septembre 2008 Messages : 680 ![]() |
Depuis le moment où j'ai appris l'existence des principes « préférez la composition à l'héritage » et « une classe hérite pour être réutilisée dans un contexte polymorphe et non pour réutiliser les fonctions de la classe mère » , je n'ai pas rencontré de cas où l'héritage multiple s'imposait (sauf pour les bidouilles du style boost::noncopyable ou boost::enable_shared_from_this, qui n'auraient pas lieu d'être en D).
Je ne suis pas un grand fan du Java, mais j'ai fini par concéder qu'un système à base d'héritage simple et d'interfaces était suffisant voire supérieur et à imiter en C++.
__________________
Cours : Initiation à CMake Projet : Scalpel, bibliothèque d'analyse de code source C++ (développement en cours) Ce message a été tapé avec un clavier en disposition bépo. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com