C# ou C++

Bonsoir tout le monde,
oui je sais, ça doit déjà exister comme topic mais vu que mon cas personnel ne correspond pas forcément aux autres, je me permet de faire un nouveau topic

Alors voilà, je maitrise à peu près le Java ( merci école polytechnique qui impose le Java pour les premières années ) et je voudrais me tourner vers autre chose car ce langage montre très rapidement ses limites notamment au niveau vitesse.

Je suis intéressé par la prog 3D en particulier et j’aimerais avoir vôtre avis. Je possède des bases de C++ ( mais bases hein, rien de bien approfondis ) et je me demande si C# ne serait pas plus adapté au jour d’aujourd’hui. En effet on voit qu’il va être complètement intégré à Longhorn et qu’il est 100% compatible avec DX9 donc pour la 3D ce semble pas mal. Quand au C++, il a toujours pour lui la rapidité d’execution mais est-elle vraiment si significative par rapport au C# ?

Quel est vôtre experience avec ces 2 langages ? Est-ce que le fait que le C# soit similaire au Java devrait plus m’orienter vers le langage de microsoft ?

Merci d’avance pour vos suggestions !

-nicjac

Tout depend de ce que tu veux faire en fait ) vers le developpement de jeux : C++.
Faire du DirectX pour ton plaisir, tout en developpant des conaissances utiles hors de jeux pour le futur: C#.

Aussi, rien ne t’empeche de melanger les deux Au final je crois qu’il faut que tu nous parles un peu plus de ce que tu cherche a faire et de combien tu veux t’investir dedans. Passer au C++ quand on est pas pret a y passer beaucoup beaucoup de temps avant d’obtenir des resultat “rigolos” c’est pas forcement une bonne idee. C# te permettra d’obtenir plus vite des trucs gratifiants. En revanche si tu veux en faire ton metier, ou t’y investir a fond a fond pour pousser le truc dans ses retranchements c’est C++…
Ce message a été édité par GloP le 31/10/2003

En fait pour l’instant, le but c’est d’apprendre à fond un autre langage en parallèle avec Java ( encore obligé de l’utiliser pour plusieurs mois ).

Quelles sont les limites de C# par rapport au C++ ? J’ai vu que C# gère également les pointers dans une certaine mesure, mais il est aussi interpreté donc forcément on a une perte de performances. Une idée des perfs en DX9 ?

Je ne pense pas vouloir en faire mon métier ( en tout cas pas dans les prochaines années ) mais je veux pas apprendre quelque chose qui sera obsolète si j’en ai besoin à la fin de mes études. Mais il faudrait une boule de cristale pour vraiment savoir si C# va s’imposer =/

Ca reste de l’amateurisme pour le moment, même si j’ai beaucoup de temps à consacrer à l’étude d’un nouveau langage. Si C# est une musique d’avenir, il vaudrait mieux le maitriser lorsqu’il va exploser par chez nous. Donc, j’hésite =/

 

tout ce qu’on peut dire, c’est que ms veut faire de c# sont principal. la guerre gronde déjà entre c# et java. maintenant, quelle est la place de c++ dans tout ça…

reste que c++ est bien répendu et fonctionne pas si mal quand on sait l’utiliser mais qu’il garde de profonds anachronismes dans ses gènes, contrairement à c#, tout beau tout neuf…

–edit–
et puis j’oubliais, pour ce mettre à .net, c#, c’est sympa (ne me parlez pas ce vb)

Ce message a été édité par Tupperware_ass le 31/10/2003

Bon, allons y, trollons un petit peu puisque tu nous y invite …

Tout d’abord le choix d’un langage depend beaucoup de ce que tu veux
faire. Si tu veux coder un driver, c’est sur, C# n’est pas un
bon choix (tout comme coder ses applis web en C n’est pas forcement la
meilleure des solutions).

Si tu veux faire un truc qui booste, mieux vaux choisir le C++ a mon avis.

Apres si t’as pas besoin d’un truc super rapide ou que t’as une bonne
machine avec de la ram, perso je conseillerait plutot le Java :

  • c’est un langage bien rodé,

  • pas mal de libs opensource dispo avec une communaute active,

  • t’as du choix dans l’editeur (perso je conseille Eclipse qui est vraiment pas mal, gratuit et libre)

  • et Java a le gros avantage d’etre
    portable (c’est un truc assez important la portabilite, de pas
    t’enfermer sur un OS/platforme). Ca permet de rester independant d’une societe, et ca peux permettre de faire des economies

Apres pour le debat .NET/Java, tu peux deja lire ca.

c# interpêté ? Non, c’est un langage compilé, tout comme le C++, non ?

Et puis; c’est un langage qui (sera) portable également. Et avec moins de bugs ou de problèmes de conception que le java. Moins lourd et plus rapide aussi.

Bon, bien sûr, tout n’est pas rose pour le c# aujourd’hui, c’est un langage tout neuf qui est encore un peu jeune, mais d’ici quelques mois, ca va s’améliorer.

C’est compile en ce qui s’appelle du bytecode, c’est a dire du code
destiné a tourner dans une machine virtuelle (comme java). Le C++ par
contre c’est compilé directement en code machine.

[quote]Et puis; c’est un langage qui (sera) portable également. Et avec
moins de bugs ou de problèmes de conception que le java. Moins lourd et
plus rapide aussi.[/quote]
Apparement les discourts marketing fonctionnent assez bien

Pour la portabilité j’ai quelques doutes, .NET c’est un truc fait
specialement dans l’esprit Windows. Ca devrait etre possible d’adapter
le truc en utiliser des gros hacks, mais si tu veux pas avoir de problème ca tournera toujours
mieux sous WIndows.

Ce message a été édité par n4rb4rt le 31/10/2003

Effectivement, tout dépend de tes objectifs.
A mon avis, si tu n’es pas déjà un tueur en C++, commence par le C#.
Avec un peu de chance, quand tu seras fin prêt à faire des super trucs de la mort, le C# aura commencé à s’imposer chez les développeurs de jeux. En effet, pour moi, il n’y a aucune raison que ça n’arrive pas. C# ne sera jamais aussi rapide que du code non managé, mais la différence est assez faible et la productivité y est tellement plus importante que les développeurs devraient rapidement faire le calcul.
A mon avis. Et puis comme dit GloP, on peut faire les deux.
Au niveau DirectX, aucun souci.
A noter que sous Avalon (la nouvelle plate-forme de développement d’interfaces graphiques de Windows Longhorn), c’est DirectX qui fait tourner la boutique, et pourtant on développe en code managé et en XAML. Ca devrait montrer la voie.

Tout ça pour dire que le C# a probablement un bel avenir devant lui, y compris au niveau du développement ludique. Et c’est tellement plus rigolo et facile…

megar a dit:

Et puis; c’est un langage qui (sera) portable également. Et avec moins de bugs ou de problèmes de conception que le java. Moins lourd et plus rapide aussi.

[/quote]ça me rapelle un peu la ligne de com de ms sur son bébé.

attention, je serais aussi tenté d’y croire puisque bilou s’est largement inspirer de java. mais tant que c# n’a pas atteind sa vitesse de croisère en terme de déploiement et d’utilisation… wait 'n see.

et puis il faut rendre à caesar ce qui ait à caesar : si c# est si formidable, c’est surtout grace au framework .net.
Ce message a été édité par Tupperware_ass le 31/10/2003

[quote]C’est compile en ce qui s’appelle du bytecode, c’est a dire du code destiné a tourner dans une machine virtuelle (comme java). Le C++ par contre c’est compilé directement en code machine.
Bytecode, c’est Java. .NET, c’est IL pour Intermediate Language, ce qui exprime bien le fait que cette forme est transitoire puisque ce code est ensuite compilé “Just In Time” (comme en Java… et surtout comme en J++) pour tourner en code natif de la machine. Ce qui veut dire que la différence au final est faible avec un “vrai” langage compilé.

[quote]Pour la portabilité j’ai quelques doutes, .NET c’est un truc fait specialement dans l’esprit Windows. Ca devrait etre possible d’adapter le truc en utiliser des gros hack ailleurs, mais ca tournera toujours mieux sous WIndows.[/quote]Mono tourne très bien sous Linux, et Microsoft a sorti une implémentation sous FreeBSD et MacOSX… Comme quoi le discours marketing ne passe pas partout…

Justement c’est surtout les vidéos de Longhorn qui m’ont fait hésité. Alors qu’on m’a apprit à etre dans le style anti-Microsoft / pro-Sun, j’ai été surpris en bien par le potentiel de cette technologie.
Un desavantage semble être les runtimes .net qui sont nécéssaires mais peut-on esperer les voir installées sur la majorité des PC sous Win dans un avenir assez proche ?
Enfin bref j’hésite toujours =/

pour moi, si tu connais java, va plutôt vers c#. le c++ est plus complexe (passez-moi l’expression) et plus traitre : si tu veux bien l’utiliser, il faut très bien le comprendre. les sales habitudes et les imprécisions de mènent en général vers le mur…

et puis perso, vu ce que j’ai du bouffer en ++ pour arriver là où je suis aujourd’hui, je me vois mal refaire ça tout seul sans prof, avec des bouquins.

[quote]Mono tourne très bien
sous Linux, et Microsoft a sorti une implémentation sous FreeBSD et
MacOSX… Comme quoi le discours marketing ne passe pas partout…[/quote]
Tu veux dire que si je te file n’importe quel truc en .NET tu me fais
tourner ca sans pb de facon identique sous Linux sur mono ou freebsd ?

Nan, on en est pas encore la …
Et c’est pas sur qu’on y arrive.

Et quand on parle de portabilité c’est pas uniquement Windows/Linux/FreeBSD, meme si c’est une grosse partie.

Java quand a lui a été concu des le depart pour etre portable, et réussis très bien dans ce domaine.

Je souscrit totalement à ce que dit boudin (smack). Le C# est compilé en IL, comme tous les langages “managed” de .NET (C++ Managed, VB.NET, J#, …). Ce IL est JIT-é (compilé pour le processeur cible à la volée), donc au final, c’est du code natif qui tourne, donc c’est assez performant (comme Java quand il est JIT-é aussi en fait).

Maintenant, quand je lis “oui les développeurs de jeux vont bien voir que c’est génial et vont s’y mettre”, je rigole doucement quand même
Ce message a été édité par tuo le 31/10/2003

[quote]n4rb4rt: Tu veux dire que si je te file n’importe quel truc en .NET tu me fais tourner ca sans pb de facon identique sous Linux sur mono ou freebsd ? Nan, on en est pas encore la … Et c’est pas sur qu’on y arrive. Et quand on parle de portabilité c’est pas uniquement Windows/Linux/FreeBSD, meme si c’est une grosse partie. Java quand a lui a été concu des le depart pour etre portable, et réussis très bien dans ce domaine.

Ben on n’en est quand même pas bien loin. Regarde le statut de Mono. Même les Winforms y sont…
Une fois que tu as Windows, Linux, FreeBSD et MacOS, il reste quoi, sérieusement?
C’est sûr que .NET n’est pas conçu avec l’obsession de la portabilité. Ca permet justement des optimisations de performances intéressantes.

[quote]Nicjac: Un desavantage semble être les runtimes .net qui sont nécéssaires mais peut-on esperer les voir installées sur la majorité des PC sous Win dans un avenir assez proche ?
Le framework est déjà d’origine dans Windows 2003. Il est proposé à tous les utilisateurs d’autres versions de Windows dans Windows Update. Il sera bien entendu dans Longhorn. Autant dire que la diffusion est déjà considérable.
De plus, tu devras de toute façon redistribuer DirectX avec ton jeu, et c’est plus gros que .NET.

Ce message a été édité par boudin le 31/10/2003

[quote]Maintenant, quand je lis “oui les développeurs de jeux vont bien voir que c’est génial et vont s’y mettre”, je rigole doucement quand même[/quote]C’est pas pour tout de suite, on est d’accord. A long terme, c’est moins sûr.
Regarde DirectX. Même si c’est très différent, il y a quand même quelques similitudes. C’est une techno 100% Windows, et pourtant quasi-universelle dans les jeux PC d’aujourd’hui. Et pourtant c’était pas gagné d’avance.
Ca a marché parce que tout le monde y a gagné en productivité, non?
On en reparle dans 5 ans.

Et il n’y a PAS de machine viruelle en .Net au sens propre du terme, comme en Java. Il y a un compilateur JIT qui traduit un langage intermediaire en natif, et qui sutout interprete les meta data associees au code. C’est loin de la lourdeur d’une machine virtuelle complete qui abstrait tout ce qu’il y a dessous. L’interop natif peut etre tres present en C#, alors que c’etait une heresie en Java (Sun est en train de GRAVE changer d’avis sur la question et de flinguer la portabilite avec les futurs Java 1.5 et 1.6, les API portables mais avec des implementations dediees a une seule plate forme (et des perfs dramatiquement differentes selon la plate forme) arrivent a grands pas. Pour rattraper justement la rapidite et les avantages de .Net, en se tirant a la chevrotinne en pleine poire sur le seul veritable avantage de Java a ce jour pour la majorite: la portabilitee super large. L’autre avantage ce sont les EJB et tout le monde est en train d’en revenir comme la solution ultime. C’est super dans un domaine d’application restreint et c’est pas la panacee pour faire tout et n’importe quoi des qu’on veut du n-tier. Enfin bon fin de la paranthese, la question c’est C# ou C++, pas C# Ou Java, et encore une fois je trouve ca super penible quand qqn pose une question du genre “j’ai un pb avec MSN” de voir les reponses du type “installe trillian” “non, miranda” “non trillian”… Priere de rester sur le sujet.)

Pour tuo je pense qu’a long terme tu te trompes Du moins en partie, et aujourd’hui tu as 100% raison. Les optimisations de ouf et tout disparaitront jamais mais c’est un peu le meme debat qu’a l’epoque de la  programmation de jeu sous win 95. Au depart je me souviens ultra bien de la reaction des programmeurs… “programmer sous win? non mais ca va pas? et pas gerer tout moi meme? je vais trop y perdre en perfs et tout ca vaut pas le coup”.

Aujourd’hui et surtout avec la possibilite de melanger natif/managed et l’explosion de puissance des prochaines generation de machines (console ou PC) je pense que de plus en plus le facteur limitant va devenir le logiciel et sa logique et non pas la puissance du hardware. Dans cette optique la l’important c’est la productivite dans le developpement d’algos complexes. C’est a dire jusqu’ou on peut aller dans le logiciel, dans ce qu’il peut faire, pas forcement de tirer les 8% qui restent de perfs d’un CPU. Je parle dans une optique sur 5/10 ans. Au bout d’un moment on arrive a un point ou on sait plus quoi faire avec la puissance qu’on a sans passer plus de temps sur le contenu lui meme, ou sans juste se borner a rajouter des effets de partout. Sans vouloir lancer de polemique on l’entend deja aujourd’hui: “rien de nouveau, juste une skin plus jolies sur un vieux concept…“. Il faut aussi voir qu’il n’y a pas que les graphisme dans un jeu (meme si c’est tres important). Dans cette optique la le code managed est TRES avantageux et bien sur n’empeche pas du tout de mettre des bouts en assembleur au milieu.

Je crois vraiment que quel que soit le domaine, jeux compris, on se dirige vers une approche hybride et que ca soit avec .Net ou autre chose, la gestion a la main de la memoire pour TOUT et la reecriture ou le rachat systematique de librairies plus ou moins standards sont des choses qui vont vite passer de mode… Et c’est sur ce point LA que C# est fondamentalement different de JAVA, C# est, a la base fait pour permettre cette approche hybride alors que Java refuse completement (jusqu’a present) cette vision. On peut pas du tout comparer l’effet qu’a eu Java sur les jeux (bien que le marche des jeux alacon™ java represente quand meme des milliards de $ par an) avec celui qu’aura .Net et C#, de part sa difference fondamentale de concept, d’approche et d’integration aux futurs OS de MS sur PC et XBox.

Ce message a été édité par GloP le 01/11/2003

Merci pour ces réponses, je vais regarder du côté de C# et voir ce que ça donne

Attention à ne pas confondre une API, exposée en C++, et un framework proposant son propre langage, interpréteur, API, etc.

DirectX a été utilisé oui… sur PC uniquement (une version modifiée sur XBox, mais c’est anecdotique). Si DirectX n’avait été utilisable qu’en Visual Basic, il n’aurait pas été utilisé dans les jeux, parce que les jeux sont fait en C/C++, et qu’il existe une réelle demande de portabilité dans notre domaine. Donc développer un jeu utilisant l’API DirectX, oui, ça cadre dans le plan global (archi du jeu en C/C++, petite partie spécifique à la plateforme isolée dans des libs dédiées).

Par contre, un framework comme .NET ne cadre plus avec ce tableau. Il n’est ABSOLUMENT PAS envisageable d’avoir une version C#/C++ Managed et une version C++, juste pour le plaisir du geste. Parce que mine de rien, le C++ Managed a beau être excellent (je l’utilise régulièrement), il apport des limitations qui lui sont propre, et qui posent de gros problèmes à un projet de jeu. Donc, personnellement, je pense que .NET sera utilisé dans les outils de jeux (et c’est déjà le cas), mais que les jeux eux même seront toujours développés en C++. Pour la même raison que les jeux PC en Java sont peu nombreux et/ou peu répandus.

Et d’ailleurs, DirectX n’est toujours pas, à l’heure actuelle, la seule API utilisée sur PC (cf Quake 3 et tous ses dérivés en OpenGL par exemple, et c’est pas le seul).

(par contre on utilisera p’tet .net en remplacement de win32, mais en tant qu’API, et pas avec l’IL, juste histoire de se mettre à jour niveau gestion de fenêtres quoi )

Ce message a été édité par tuo le 01/11/2003

Ce message a été édité par tuo le 01/11/2003

[quote]Edit pour répondre à Tupperware : perso j’ai appris le C++ tout seul et je n’en ai pas été traumatisé, donc bon, faut relativiser un peu quand même

hé hé, on parle pas de trauma non plus. mais j'ai eu un prof tordu qui m'a montré comment ++ était lui aussi tordu (je crois qu'il faut l'être pour le comprendre...). c'est de ça que je parle.

mais je maintient que mal appris, le ++ sera mal utilisé.