Partage
  • Partager sur Facebook
  • Partager sur Twitter

c++ ou c#?

lequel choisir?

    13 juillet 2007 à 9:04:09

    Salut, je ne me suis jamais vraiment mis au c++ mais j'ai appris les bases du c# qui me séduit beaucoup plus. Le c# est un langae de plus haut niveau, plus puissant et complètement orienté objet avec des classes standard. Mais je souhaite connaître la différence entre une application écrite en c++ et une écrite en c#, leur atouts et leurs inconvénients. L'utilisation d'une application en c# demande obligatoirement la présence de net framework sur sa machine?
    • Partager sur Facebook
    • Partager sur Twitter
      13 juillet 2007 à 9:24:42

      Hello,

      Je ne peux pas te parler des avantages du C#, car je n'ai jamais essayé, je sais juste que le code ressemble dans les grandes lignes au code C++.

      Par contre pour répondre à ta question. Il faut obligatoirement le framework .net pour lancer l'application. Ce qui implique que ton application ne tournera que sous Windows (sous réserve de l'installation du framework).

      P.S.: Ce n'est pas parce qu'un langage est plus haut niveau qu'il est "mieux". (D'ailleurs c'est quoi un langage meilleur qu'un autre ?)
      • Partager sur Facebook
      • Partager sur Twitter
      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
        13 juillet 2007 à 9:32:07

        J'ai pas dit que c'est parce qu'il était de plus haut niveau qu'il était mieux, j'ai même pas dit qu'il était mieux j'ai dit qu'il était plus puissant et entièrement orienté objet. Mais c# a aussi ses inconvénients vis à vis du c++, comme la dépendance au framework.
        • Partager sur Facebook
        • Partager sur Twitter
          13 juillet 2007 à 9:37:15

          Ce que j'entendais par "mieux" était puissant. Pourquoi le c# serait plus puissant que le C++ ?

          Qu'est-ce qu'un langage plus puissant qu'un autre ?
          • Partager sur Facebook
          • Partager sur Twitter
          Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
            13 juillet 2007 à 9:39:14

            J'entend par "plus puissant" le fait qu'un langage soit capable de réduire à 3 lignes ce qu'un autre effectue en 10 lignes. Ce qui est le cas avec c# et les winforms. ;)
            • Partager sur Facebook
            • Partager sur Twitter
              13 juillet 2007 à 9:42:46

              Au niveau rapidité des algos, je pense que le C est plus rapide, le C++ étant quasi au meme niveau.

              Le C# doit, je pense, etre un peu moins rapide que le C++, car il doit y avoir des mécanismes sous jascents automatiques (surement un garbage collector comme Java, et d'autres vérifications) que le C++ ne fait pas.

              Cela dit, dans beaucoup de cas, cette difference de vitesse doit etre négligeable je pense.

              Aprec, c'est sur, le C# est de plus haut niveau, du fait qu'il gere sa mémoire tout seul, etc...
              • Partager sur Facebook
              • Partager sur Twitter

              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                13 juillet 2007 à 9:55:39

                Salut,

                Citation : Fvirtman

                Cela dit, dans beaucoup de cas, cette difference de vitesse doit etre négligeable je pense.


                Ca dépend des cas. Je suis actuellement un projet de moteur 3D en C#. L'auteur affirme que ses tests de performances entre le C++ et le C# rapportaient des différences suffisemment négligeables pour lui faire choisir l'usage du C#, mais pas suffisemment pour ne pas le pousser à utiliser exclusivement les shaders dans ses rendus, pour reléguer la plupart du travail au GPU afin de laisser souffler le CPU, qui a déjà suffisemment à faire avec une application en C#.

                Niveau langage, je pense qu'il est clair que tu développeras beaucoup plus rapidement avec le C#. Niveau rapidité d'exécution, à moins que tu ai des calculs complexes à réaliser en un temps record, je ne pense pas non plus que l'usage du C# soit un handicap.
                • Partager sur Facebook
                • Partager sur Twitter
                  13 juillet 2007 à 10:01:36

                  Citation : [ctp]jed

                  a- Le c# est un langae de plus haut niveau,
                  b- plus puissant et
                  c- complètement orienté objet avec des classes standard.

                  d- Mais je souhaite connaître la différence entre une application écrite en c++ et une écrite en c#, leur atouts et leurs inconvénients.

                  e- L'utilisation d'une application en c# demande obligatoirement la présence de net framework sur sa machine?


                  a- J'en doute. Il est moins bas niveau, c'est sûr (on n'a pas accès aux détails). Mais plus haut niveau ? Hum... je dirai globalement équivalent. L'un va avoir des trucs que n'a pas l'autre et vice-versa.
                  Le niveau d'un langage s'étend dans plusieurs directions.

                  b- bof non.
                  Et pour le genre de puissance que tu décris,
                  - ne confond pas langage et API disponibles.
                  - fais du perl. Pour décrire des algos en une ligne, il est très fort.

                  c- Définitivement pas. Il a des types primitifs. Il a les structs (que n'avait pas Java). Il ne dispose pas de tous les concepts OO : héritage multiple de réutilisation (il n'a que l'héritage multiple de substitution), aucun support pour la programmation par contrat.
                  Mais bon, de toutes façons : 100% OO n'est pas un critère de qualité. J'aurais même tendance à dire le contraire.

                  d- Je vois plus le C# comme un excellent langage d'assemblages de briques, ce que n'est pas vraiment le C++. Pour la programmation de coeurs de systèmes critiques, ce n'est pas forcément ce qu'il y aurait de plus adapté. C'est un peu comme cela que microsoft vend C# et C++/CLI (!= C++) -> C++/CLI pour couler tes briques de légo. C# pour les assembler.

                  e- Tout à fait.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                    13 juillet 2007 à 10:22:31

                    Bon bin un avis un peu inutile mais il se trouve que j'ai essayé les deux langages. Je préfère largement le C++ parce que j'ai plus le sentiment de comprendre ce que je fais, ce que je manipule exactement. Et puis j'aime ne pas être contraint à programmer OO =)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 juillet 2007 à 12:01:52

                      Bon avis pas génial non plus mais pas grave. J'ai aussi essayé les 2 langages, si je n'avais le choix qu'entre ces deux langages je pencherais plutôt vers le C++ (en réalité j'en préfère encore un autre :D cf ma signature :D).
                      Personnellement, je trouve le C# extrêmement verbeux pour pouvoir surcharger une méthode de sa super-classe il faut que dans la super-classe la méthode soit "virtual" et dans la sous-classe qu'elle soit "override"...
                      Les propriétés c'est du sucre syntaxique dont on peut très bien se passer et qui n'est pas forcément plus clair...

                      J'ai développé en équipe (puis seul) tout un projet en ASP.NET C#, et je trouvais ça particulièrement chiant, bordélique et souvent je me perdais dans mon code tellement le langage était peu clair... Enfin bon ce n'est que mon avis :D .
                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 juillet 2007 à 13:14:07

                        Salut,

                        J'ai utilisé le C# pendant à peu près quatre ans, et personnellement j'apprécie beaucoup ce langage. Beaucoup plus simple à mon goût que le C++ (que j'ai aussi essayé, mais que je n'ai pas (encore) réussi à maîtriser, même si j'y travaille ^^ ).

                        Sur la verbosité, le C# est peut-être plus verbeux et moins clair que l'Objective-C (je n'ai pas suffisamment essayé ce dernier pour en avoir une idée correcte), mais AMHA (et quitte à me faire assassiner par les afficionados du C++ ^^ ) le C++ est bien pire.
                        Il suffit de jeter un oeil aux fichiers d'en-tête de la bibliothèque C++ pour s'en convaincre :
                        template<class _Traits>
                            basic_istream<char,_Traits>&
                            operator>>(basic_istream<char,_Traits>& __in, signed char* __s)
                            { return (__in >> reinterpret_cast<char*>(__s)); }


                        En revanche, pour l'ASP.NET, que j'ai essayé pendant... 5 minutes, je partage a priori l'opinion de psychoh13, c'est un b*rd*l incompréhensible, mais je ne pense pas que ça vienne du langage C# lui-même, c'est plutôt l'architecture de ASP.NET qui veut ça (avec n'importe quel langage .NET, ce serait la même chose AMHA).
                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 juillet 2007 à 13:32:53

                          Salut, j'ai un peu le même problème: je préfère le c# mais en asp.net c'est vraiment galère, surtout pour les webforms et la gestion de bdd. Je crois que je vais me replier sur le c#, qui je pense, me sera un atout pour comprendre le java quand je m'y metterais. ;)
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            13 juillet 2007 à 14:13:36

                            Je tiens à participer à ce sujet.

                            Pour mon expérience personnelle, j'ai commencé par le C++ (sans apprendre le C auparavant). C'est un très bon langage, très puissant, cependant, je le trouvais trop complexe (pointeurs, références, ...) et je me suis renseigné sur le C#.

                            Le C# cependant, nécessite d'avoir une très bonne maitrise de la POO (penser objet). Sinon, autant faire du C/C++. Ce que j'ai apprécié dans C#, c'est son typage statique fort (aucune conversion implicite, aussi présent en C++), mais surtout :

                            • Des références sécurisées, automatisées et simplifiées
                            • Plus besoin de delete les objets alloués avec new
                            • Beaucoup d'API très puissantes incluses dans le framework
                            • La notion "tout objet" : c'est une facon de programmer différente, il faut s'y faire



                            Cependant, il faut installer le .NET framework. Mais, beaucoup de personnes l'ont installé, il ne mange pas de pain, et est déjà inclus à Vista :p

                            Et, ce n'est pas réservé aux Windowsiens, enfin plus pour longtemps (je pense en particulier à Mono).

                            Enfin après, je le répète souvent, progamme avec le langage qui TE plait, pas celui qui plait aux autres ;)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              13 juillet 2007 à 14:43:41

                              C'est plus simple, c'est plus rapide à programmer

                              Qu'est-ce qui est mieux? aucun des deux, Un bon programmeur C# est capable de faire de meilleurs programmes plus rapides et plus optimisés qu'un programmeur C ou C++ moyen.

                              L'important c'est que l'outil (un langage de programmation c'est un outil de porgrammeur) convient au programmeur et à ce qu'il veut faire.

                              Pour ma part je travail autant en C# qu'en C++ et en Java selon le projet que j'ai à développer, le délai et les demandes du Boss ;-) (Je suis chanceux, j'ai carte blanche)

                              En ce qui concerne Java et C# je pense que C# était une grossière copie de Java après un infructueux J# mais qui a su prendre sa place et ses différences malgré que la syntaxe ressemble encore énormément à Java.

                              Dernière chose : le framework .NET est vraiment pratique, il est présent dans tout les ordinateurs Win2000+ mis à jour (même 98 a le framework 1.1). Il permet d'alléger la taille de ton programme et de diminuer le temps de programmation car tout y est! C'est un peu comme la machine virtuelle de java et son JDK.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                13 juillet 2007 à 14:46:53

                                Citation : Artefact2

                                Enfin après, je le répète souvent, progamme avec le langage qui TE plait, pas celui qui plait aux autres ;)



                                Entièrement d'accord avec toi, mais si tu développe un programme grand public, faut quand même faire en sorte qu'il puisse être porté sur la plupart des machines clients. Enfin c'est vrai que le framework de toute façon est indispensable à des tas d'autres programmes grand public, donc on peut être sûr à 90% que le client le possède déjà. :)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  13 juillet 2007 à 16:04:03

                                  Et les connaisseur de Linux connaissent (où ont facilement accès) à Mono
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    13 juillet 2007 à 18:00:21

                                    Salut, d'un avis personnel je ne pence pas que reduire le code rende un langage plus puissant qu'un autre.
                                    Et d'un autre coté je pence que sa limite la liberté d'action que l'on puisse faire grâce à des gardes fous ..

                                    L'assembleur est un langage bas niveau et pourtant quand on c'est bien l'utuliser il est extremement puissant et rapide. On peut faire ce que l'on veut car on a accés au registre de mémoire etc ...

                                    Je voie de nombreux langage ou l'on est limité dans ce que l'on desire faire cr si tu l'écrit en 3 ligne et 10 d'un autre ( imaginer le nombre de ligne en assembleur ..) au final sa doit devenir du langage machine donc ce n'est juste pas toi mais le compilateur qui va le faire à ta place et va t'il le faire de la meilleur façon qu'il existe je n'en suit pas sur.

                                    Sur ceux ami programmeur
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      13 juillet 2007 à 21:13:09

                                      Citation : Artefact2

                                      Ce que j'ai apprécié dans C#, c'est son typage statique fort (aucune conversion implicite, aussi présent en C++)



                                      Bah moi je trouve justement que c'est son point que j'ai trouvé le plus emmerdant ! Surtout en présence d'ASP.NET, les trucs du genre :
                                      ((table1.Cells[1].Controls[0] as TableView).Columns[4].Controls[1] as TextField).Value = 10;


                                      Je peux te dire que j'en ai soupé, et cette ligne c'est pas vraiment de l'exagération, bien au contraire c'est loin de la réalité...

                                      Je préfère largement le système Objective-C ou le typage est dynamique et où le travail se fait à l'exécution... Enfin bon je vais entamer de troll ou de polémique sur quel est le meilleur langage.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        13 juillet 2007 à 21:20:31

                                        Excusez mon ignorance, mais qu'est-ce que le "typage" ?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          13 juillet 2007 à 21:26:09

                                          Le typage c'est mettre des types. Voici le typage d'une variable :
                                          int variable;


                                          Certains langages ont un typage faible, c'est-à-dire que le type peut être modifié implicitement comme en PHP.
                                          Certains langages ont un typage fort, c'est-à-dire qu'il faut que le type d'une variable soit explicitement décrit sinon ça fait des erreurs...
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            13 juillet 2007 à 22:01:52

                                            @ psychoh13 : l'opérateur as peut être très pratique, mais selon moi son utilisation abusive révèle une mauvaise conception.

                                            Personnellement, le typage fort de C# ne m'a jamais posé de problèmes --- en fait, je ne l'ai jamais vu ni comme un point faible ni comme un point fort. C'est une des propriétés du langage, c'est tout.

                                            Citation : caxd

                                            Je voie de nombreux langage ou l'on est limité dans ce que l'on desire faire cr si tu l'écrit en 3 ligne et 10 d'un autre ( imaginer le nombre de ligne en assembleur ..) au final sa doit devenir du langage machine donc ce n'est juste pas toi mais le compilateur qui va le faire à ta place et va t'il le faire de la meilleur façon qu'il existe je n'en suit pas sur.


                                            Ça dépend du langage et des compilateurs. En règle générale, les compilateurs C (que ce soit celui d'Intel, celui du projet GNU, etc.) ont une longue évolution derrière eux et sont devenus capables de se livrer à des optimisations extrêmement poussés, de sorte qu'AMHA programmer en assembleur juste pour espérer de meilleures performances ne se justifie plus vraiment.

                                            D'ailleurs, quand UNIX (initialement écrit en assembleur) a été ré-écrit en C (langage développé pour l'occasion), ses concepteurs ont estimé que la perte de performance n'excédait pas 10%, et que le confort apporté par le C par rapport à l'assembleur était une compensation largement suffisante.

                                            Mais c'est vrai que ce n'est pas forcément le cas de tous les compilateurs pour tous les langages : le compilateur Java, par exemple, produit un bytecode très peu voire pas du tout optimisé (du moins, celui de Java 1.4, le dernier pour lequel j'ai testé). Peut-être parce qu'il laisse l'optimisation aux soins de la machine virtuelle (qui interpréte le byte-code), mais peut-être aussi parce que ce compilateur (et le langage Java en général) est encore relativement jeune (par rapport au C qui va sur ses quarante ans).
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              13 juillet 2007 à 22:11:15

                                              Citation : psychoh13

                                              Le typage c'est mettre des types. Voici le typage d'une variable :

                                              int variable;



                                              Certains langages ont un typage faible, c'est-à-dire que le type peut être modifié implicitement comme en PHP.
                                              Certains langages ont un typage fort, c'est-à-dire qu'il faut que le type d'une variable soit explicitement décrit sinon ça fait des erreurs...



                                              Ok merci beaucoup !
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                13 juillet 2007 à 22:14:01

                                                Citation : gouttegd

                                                @ psychoh13 : l'opérateur as peut être très pratique, mais selon moi son utilisation abusive révèle une mauvaise conception.



                                                Il faut dire qu'avec ASP.NET t'as pas vraiment le choix de l'utiliser, c'est ça ou le cast ce qui revient au même...
                                                Personnellement, je trouve le dynamisme à outrance de l'Objective-C bien plus agréable.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  13 juillet 2007 à 23:07:46

                                                  Citation : Artefact2


                                                  • a) Des références sécurisées, automatisées et simplifiées
                                                  • b) Plus besoin de delete les objets alloués avec new
                                                  • c) La notion "tout objet" : c'est une facon de programmer différente, il faut s'y faire

                                                  a) En C#, comme en Java, une référence s'apparente à une sorte de pointeur intelligent. Les références C++ sont des alias.

                                                  b) Tant que tu sais éviter les cycles, les shared_ptr (et autres encapsulations RAII) c'est bien! Et cela marche aussi sur autre chose que la mémoire. Le C# a repris le même principe de libération déterministe de ressources avec "using". Java n'a que le dispose-pattern (-> try-finally).
                                                  Pour C#, je ne sais pas, mais en Java, mettre un pointeur à 0 une fois que l'on a fini de s'en finir est encore un hack courant pour aider le GC. Du coup le "pas besoin de s'occuper" de la mémoire a tendance à doucement me faire glousser.

                                                  c) Non. Tout n'est pas objet en C#.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

                                                  c++ ou c#?

                                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                  • Editeur
                                                  • Markdown