Je programme en C++(je maitrise SDL, FMOD, SFML, et un peu OpenGl ainsi que la STL(list,map,deque)), mais j'ai décidé de me mettre à étudié le C# et j'ai commencé par la wiki du C#, mais j'ai surtout l'impression que le C# est plus limité que le C++
Donc j'aimerais savoir ce que vous pensez du C# par rapport au C++ , en argumentant si possible, car j'ai du mal à voir ce qu'offre le vraiment C# par rapport au C++.
C# est plus haut niveau que C++, d'ailleurs C# est plutôt au niveau de Java. En C#, tu as un garbage collector, c'est plus fortement typé, et il y a quelques librairie suplémentaires (comme l'équivalent de l'API reflection de Java).
Bonjour,
Comparer le C++ et le C# n'est pas facile. Ce sont deux langages qui ne sont pas utilisés pour les mêmes choses.
C# est plus porche du Java, sur lequel il à tout pomper (troll ?? nooonnnn ;-)
Honnetement, je suis pro C++, et considere que C# est une riposte de microsoft au Java.
C# est un langage totalement objet, permettant de faire rapidement des prog propre, grâce à une collection d'objet permettant d'avoir accès à tout sans ce casser la tête (interface graphique, réseau, stockage...)
C++ est plus proche du matériel, mais j'ai du mal à dire qu'il est de plus bas niveau. Je dis cela car lorsque l'on maitrise bien le C++ et les bibliotheques qu'il peux utiliser, il n'a pas grand chose à envier au C#, ni point de vue tech, ni point de vue concept.
Bien entendu, C++ ne dispose pas de certaine chose, tel que l'introspection comme le font le Java et C# (et bien d'autre langages), mais on arrive à s'en passer (si si)
Ce qui m'a le plus décu sur le C# (avis datant d'il y a 2 ans) c'est la lourdeur des interface graphique (ça a peut être changé maintenant) et surtout le fait qu'il ne soit pas vraiment portable, pas de support officiel de Mircosoft c'est vraiment pas cool.
En conclusion, étant expert C++ et d'un bon niveau en C# je ne trouve pas d'interet à utiliser C# qui ne m'apporte rien d'essentiel. Si je veux faire un prog rapidement, j'utilise Java ![]()
C++ me permet de faire des prog plus rapide et leger en mémoire, donc globalement plus performant.
Pour ceux qui lancerait l'excuse de la meilleur utilisation des instructions des proc en C# (compil just in time & co), je leur répondrai que je suis du genre à faire plusieurs compilation du même code avec différentes configurations de compilation pour les différentes plateformes (32, 64, SSE 1&2 & co (j'adore le man GCC sur la parallelisation)) ;-p
Oui, je suis d'accord avec toi KouicKouic que le C++ n'a pas grand chose à envier au C# c'est pourquoi je me demandais pourquoi avoir créé un nouveau langage etc...
Je suis globalement de l'avis de KouicKouic a l'exception de l'utilisatoin de java pour les choses graphique/rapide. Les libs graphique des C# sont bien integre dans windows alors que celle de java ne le sont pas. Si on vise une plateforme windows, C# est probablement un meilleur choix que java.
Pourquoi C# a ete cree par microsoft, c'est parcequ'ils avaient beson d'un java like dans les langages compris par .NET. Choisir java, ca fait mauvais genre, donc ils ont fait un clone. La difference entre C# et java ne m'a pas l'air suffisante pour justifier un nouveau langage.
Pour moi, la difference entre C++ et C# pour les developpeurs windows, c'est la difference entre j'ai potentiellement besoin de perf et donc de descendre potentiellement dans des details sordides ou je n'en ai pas besoin.
D'abord le lien sacré : http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp
Pourquoi programmer en C# au lieu de C++ ? Bah je dirais que c'est beaucoup plus agréable de coder en C# qu'en C++, GC, framework énorme sous windows qui permet de faire *tout* et facilement http://msdn.microsoft.comom/fr-fr/library/d11h6832.aspx (si jamais tu veux faire un truc qui n'est pas disponible avec le CLR, tu peux utiliser l'interopérabilité COM).
Pour les jeux vidéo, tu as des wrapper/binding de lib connu en C++ pour .NET, et surtout XNA, je te laisse regarder ça http://www.youtube.com/watch?v=TgChURF5fQE , le tout sans lag (donc perf pas si naze que ça) et en plus ça fonctionne sous PC et xbox 360.
Pour les IHM, c'est kif-kif entre C++/Qt et WPF, si tu connais bien Qt tu peux être très productif, après personnellement, j'utilise WPF pour les raisons citées plus haut, l'intégration avec windows, la communauté, et la doc.
Ce que le C# offre de plus que le C++? Ben il offre un framework très riche pour tout ce qui est GUI, RIA, BDD et applications serveurs.
Comme ça a été dit, c'est commode à bosser avec, les bibliothèques de base sont infiniment plus riches et commode à employer que la STL, tout ce qui est socket, connexion, webservice se créé beaucoup plus simplement en C# qu'en C++...
Que dire c'est facile à coder, facile à débugger, facile à profiler, ça réduit quasiment à zéro les risques de fuite mémoire...
En fait les gens s'acharnent à vouloir comparer ces deux technos. C'est inutile car elles ont des utilisations complètement différentes. C# est surtout utilisé dans le domaine de la gestion, des applications web/server. C/C++ touche plutôt le développement industriel, le bas niveau ou les applications ou la vitesse est critique.
Quant à la comparaison avec java... mouarrff. C#, question pur langage, est des kilomètres devant. Question productivité aussi... Par contre cette limitation au monde windows est encore un trop restrictive et il existe beaucoup plus de frameworks ciblés en java (ce qui apporte aussi un certain lot de problèmes en plus de la flexibilité).
(PS: Pour info, j'ai des expériences professionnelles sur les 3 langages)
"Quant à la comparaison avec java... mouarrff. C#, question pur langage, est des kilomètres devant. Question productivité aussi..."
Haaa, nous rentrons dans le vif du sujet. Pourrais tu, _skip, approfondir cette assertion ?
kouickouic, la page wikipedia est assez extensive sur le sujet.
Allez, quelques éléments pour te répondre :
-C# supporte les génériques et leur optimisation en runtime (en java ça te génère le même bytecode que sans génériques). En plus les types valeurs peuvent servir de paramètre aux classes génériques, comme en c++.
-C# supporte les structures, le passage de type valeur par référence, les unions sauf erreur (même si ça a aucun sens).
-C# la redéfinition de certains opérateurs.
-C# supporte les properties (Et ça allège énormément les classes et la documentation).
-C# supporte les closures, les pseudo pointeurs de fonctions (delegate), les expressions lambdas tout ça (très utile quand on veut lancer des threads dans un contexte de méthode sans trop disperser)...
-C# supporte les blocs ARM (avec la directive using qui évite des try-multiple_catchs-multiple_rethrow). Et dire que ce n'est pas passé pour java 7 qui arrive... Dommage ça!
Je parle pas en temps que fanboy, attention, je fais juste que constater + ou - objectivement malgré mes préférences.
La page de wikipedia est pas mal, mais c'est juste une liste des différences. Ce qui est interressant, c'est les avis des personnes connaissant bien le langage. Sur ce point la, j'ai été exaucé
Sinon, pour en revenir au C++ / C# :
C'est vrai que la video XNA Racing Game est jolie. Faire une partie du jeu en .NET et ce qui demande de la rapidité en C, le tout couplé, est un bon compromis apparemment.
Bon, je re-dévi du sujet, mais sa m'interresse bcp.
Depuis, qu'Oracle à racheté Sun, le ciel s'assombir pour Java (moi pécimiste ?? nooooooonnn).
Si .NET tournait sous Unix/Linux/Windows sans distinction il serait alors loin devant Java. Ce n'est pas encore ca actuellement, il ne bat pas le rapport qualité / prix de Java (pour le moment, attendons l'effet Oracle).
Actuellement, je pense qu'un serveur d'appl Linux + Apache+tomcat/Jboss/glassfish et moins chère qu'une solution .NET équivalente.
Me trompe-je ?
Java est open source et c'est le produit phare de SUN au niveau software (ouais bon y'a aussi solaris). Oracle pourra pas faire ce qu'il veut avec. En revanche je suppose que cela peut impacter sur les cycles d'évolution et leur rapidité (qui est pas fameuse actuellement).
Par contre on se demande ce qu'ils feront de javafx par exemple et des autres projets un peu à la traîne.
Je vois plus de gens s'inquiéter pour mysql en revanche, même si perso je pense pas que ce soit le même marché que les DB Oracle, de loin pas.
Si .NET tournait sous Unix/Linux/Windows sans distinction il serait alors loin devant Java. Ce n'est pas encore ca actuellement, il ne bat pas le rapport qualité / prix de Java (pour le moment, attendons l'effet Oracle).
Java est pas seulement implanté dans le monde non microsoft mais aussi, c'est le langage de choix pour tout ce qui est open source. Ca fait qu'une énorme floppée de projets et de librairies open source sont en java actuellement.
Beaucoup des plus intéressantes ont été portées en .Net mais l'écart est encore important.
il ne bat pas le rapport qualité / prix de Java (pour le moment, attendons l'effet Oracle).
Actuellement, je pense qu'un serveur d'appl Linux + Apache+tomcat/Jboss/glassfish et moins chère qu'une solution .NET équivalente.
Me trompe-je ?
Alors je vais être subjectif, c'est pas moins cher en tout cas en terme de coût de mise en place, de coût de développement et de coût de maintenance.
Si tu regades JBoss, même J2EE en général l'usine à gaz que c'est... Je te jure que c'est la jungle sauvage de configurer ces serveurs d'applications à coups de multiples fichiers XML, avec des documentations à l'emporte-pièces-détachées comme on en trouve sur le net...
Le monde microsoft ou tout se configure à l'aide d'interface graphique, c'est nettement plus confortable et intégré.
Après c'est une question de besoin, mais si tu peux sortir IIS à la place de jboss ou websphere, faut pas s'en priver.
final-hearts
Comme tu as compris ce sont deux langages différents et qui n'ont pas le même usage et surtout qui ne nécessitent pas la même manière de penser.
Si tu est habitué a utiliser les destructeurs de classe les allocations mémoires et surtout manipuler les pointeurs. tu oubli tout ca en C#
Si tu veux apprendre un langage de ce type commence par le java, au moins il est portable (tu ne fera pas marcher du C# sur autre chose que du windows)
J'ai vu que tout comme le C++ le C# permet d'utiliser le HLSL, malheureusement j'ai pas vu d'équivalent JAVA.
A toi de voir, de toute façon si tu connais le C++ tu n'auras aucun mal a te mettre a un autre langage.
A part le GC toute les notions que tu verra dans les autres langages existent dans le C++. ![]()
Le codage en C# sous Linux est possible grace au travail de Miguel de Icaza (à l'origine de Gnome entre autre), et qui pour notre plus grand bonheur, c'est aussi attaqué au portage de silverlight.
http://www.mono-project.com/Main_Page
« Le codage en C# sous Linux est possible grace au travail de Miguel de Icaza »
il aurait mieux fait de s'abstenir./
Non seulement ça existe mais ça marche du tonnerre en plus à tel point que les développeurs le préfèrent à java sur les stations de travail linux :
http://www.sdtimes.com/link/33618
C'est un excellent projet, puis une chance d'avoir un langage managé de qualité sur des plateformes linux. J'ai vraiment du mal à voir comment on peut être contre.
Par ailleurs, contrairement à ce qui a été dit plus haut, il existe des implémentations de GC en C++.
"il aurait mieux fait de s'abstenir."
Ah ouai et pourquoi ça ?
Personne ne voulait de mono, et aujourd'hui c'est un (yet another big and useless) prérequis à Gnome.
Il n'y a vraiment que des utilisateurs de Linux pour sortir des trolls gros comme ça ...
Il y aussi le vieux barbu, là, Richard Stallman qui est contre. Parce que la spécification CLI et C# en tant que langage est libre, mais pas assez GPL à son goût.