RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Serv: irc.irc-land.org
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 Les inconvénients du C++

Forum : C++
Sous Catégorie : Aucune
Type du sujet : Post-it
FAQ : FAQ C++

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET SUJET NON RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGES : [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [>>]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM C++

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
pac
Co-Administrateur
Superviseur :
- Méthodologie.
Modérateur :
- Delphi
Chef de projet(s) :
- Jeu Awalé
- EcoSystem
- MySudoku

Avatar de pac
Inscrit : 08/04/2004
Messages : 6571
Message
#114156
Posté le 29/10/06 à 13:57
Tout le monde parle du C++ comme un langage dur parce que complet et performant. Il a une grande popularité parce qu'il est difficile.

Mais en réalité, les gens l'aiment parce que justement ils peuvent faire les malin de connaître le C++.

Pour moi, il est loin d'être parfait, j'ai commencé avec le C, puis le C++, puis je suis passé sur d'autres langages comme Delphi et C# et je me suis rendu que ça ne sert à rien qu'un langage soit compliqué. On peut faire tout aussi bien, même mieux avec un langage plus simple en se prenant moins la tête et plus rapidement.

Pour moi, un des gros points noirs du C++ est la construction statique des objets. A quoi ça sert ? Ca utilise des constructeurs par défaut et destructeurs sans qu'on ne s'en rende compte, sans qu'on ne les appelle.
Il est tout à fait possible et utile de ne faire que des constructions dynamiques, on appelle explicitement le constructeur et le destructeur. On sait exactement ce qui se passe, on maîtrise le processus de création des objets, du début à la fin.

Combien de programmeurs se sont pris la tête pour comprendre quand quel constructeur est appelé à quel moment ? Qui n'a jamais utilisé de variable globale qui compte le nombre d'appel de constructeurs pour savoir exactement combien de fois il est appelé ? C'est un exercice typique lors de l'apprentissage du C++.

Beaucoup d'autres langages POO n'ont pas de construction statique automatisée, ils n'ont d'ailleurs même plus de pointeurs, tout passe par référence. On déclare une référence de classe, puis on créé l'objet si on le désire ou bien on référence un objet déjà construit.

Les pointeurs ne sont pas utiles non plus, ils permettent de faire tellement d'erreurs et de segmentation fault. Tout passer par référence fonctionne très bien. Ce soucis vient du fait que le C++ dérive du C et qu'en C on est obligé d'utiliser les pointeurs car les références n'existent pas. Il a donc gardé les pointeurs.

Vous me direz "pourquoi on les utilise si souvent alors si ce n'est pas utile ?"
Je vous répondrais "Pourquoi tant de langages n'utilisent que des références et jamais aucun programmeur n'a eu de problème avec et n'a demandé que les pointeurs existent ou a voulu changé de langage pour retrouver les pointeurs ?"
En Delphi, les pointeurs existent encore, en 2 ans, je m'en suis servi peut-être 2x pour utiliser du vieux code qui les utilisait encore. Il est déconseillé de les utiliser et on n'en a pas besoin.

Donc nous avons déjà vu que le C++ utilisait des choses inutiles et complexes, mais pire, il ne possède certains aspects de la POO forts utiles, les property.
En POO, il est conseillé de mettre tous les champs en private ou protected afin d'utiliser des Get et des Set pour protéger les données des utilisateurs lambda. C'est ce qu'on appelle l'encapsulation.
Les property permettent de simuler un champ en public qui appellerait le Get s'il est en lecture ou le Set s'il est en écriture. C'est un niveau supérieur d'abstraction et d'encapsulation qui permet d'avoir un code plus lisible.

Il est plus joli d'écrire :

MonAnimal.Taille = 5; cout >> MonAnimal.Taille >> endl;

Que d'écrire :

MonAnimal.SetTaille( 5 ); cout >> MonAnimal.GetTaille( ) >> endl;

Avec les property, les 2 codes sont équivalents, on appelle le Get et le Set en fonction du besoin.

Il y a d'autres points que je ne maîtrise pas comme les assertions qui n'existent pas, donc je n'en parlerai dans ce sujet.

Voilà quelques raisons qui font que je n'ai pas envie de revenir au C++ mais plutôt de me tourner vers de nouveaux langages comme le C#.

Bien entendu, ceci est l'ouverture d'un débat (et je n'espère pas d'un troll) sur les désavantages du C++. Un débat qui n'a presque jamais lieu.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu]Image.

Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

patriarch24
Membre actif
Avatar de patriarch24
Inscrit : 08/05/2005
Messages : 100
Message
#114505
Posté le 31/10/06 à 16:17
pac dit :
Pour moi, il est loin d'être parfait

Pour moi non plus C++ n'est pas parfait. D'ailleurs, peut-on parler de langage parfait ?

pac dit :
Pour moi, un des gros points noirs du C++ est la construction statique des objets

C'est assez déroutant en effet. Il faut s'y habituer... Cependant, les objets qui ne sont pas des valeurs (built-in like types) ne devrait pas se trouver sur la pile, mais sur le tas. Autant le constructeur par défaut de std::string n'a rien de gênant, autant un constructeur lambda pour un type défini par l'utilisateur est moins bien venu.

pac dit :
Beaucoup d'autres langages POO n'ont pas de construction statique automatisée, ils n'ont d'ailleurs même plus de pointeurs, tout passe par référence. On déclare une référence de classe, puis on créé l'objet si on le désire ou bien on référence un objet déjà construit.


Derrière la notion de référence, il y a celle de pointeur. Il n'y a dans ces langages aucune différence. En C++, il en existe une : une référence est un alias de nom, un pointeur est une adresse sur le tas (mémoire dynamique). En Java par exemple, une référence "pointe" sur une adresse du tas, mais cela est transparent au programmeur.

pac dit :
Les pointeurs ne sont pas utiles non plus, ils permettent de faire tellement d'erreurs et de segmentation fault. Tout passer par référence fonctionne très bien.

Les pointeurs sont la seule manière en C++ d'avoir un objet persistant en mémoire. Les erreurs de segmentations en C++ sont très rares, du fait que de nombreuses classes ont été écrites justement pour permettre d'éviter les accès hasardeux au tas.

pac dit :
les properties

Tu parles de C#, que je connais peu.

pac dit :
Il est plus joli d'écrire :

C'est très subjectif...
__________________________
Lisp : (have a (nice day))
C : have (a, nice, day);
C++/Java : have.aNice(day);
OCaml : have a nice day;;
shell : have a nice $day

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

pac
Co-Administrateur
Superviseur :
- Méthodologie.
Modérateur :
- Delphi
Chef de projet(s) :
- Jeu Awalé
- EcoSystem
- MySudoku

Avatar de pac
Inscrit : 08/04/2004
Messages : 6571
Message
#114516
Posté le 31/10/06 à 17:16
Je suis d'accord que les références sont des pointeurs masqués, mais avec les références, on peut travailler de la même façon et avoir un code plus lisible.
Tu me diras que c'est subjectif, tout est question d'habitude. Mais pour quelqu'un qui de se mettre aux pointeurs ou aux références, il galèrera moins avec les références.

Il existe tout de même un point où les pointeurs sont indispensables, c'est pour faire des tableaux dynamiques.

Les properties existent aussi dans d'autres langages que le C#comme en Delphi par exemple, d'ailleurs les similarités entre le C# et Delphi ne s'arrêtent pas là car ils ont le même concepteur (un homme de génie) mais le sujet n'est pas sur ce point.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu]Image.

Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

vortex666
Modérateur :
- C & C++
- OpenGL
- Delphi
Chef de projet(s) :
- Vortez3DEngine

Avatar de vortex666
Inscrit : 20/09/2004
Messages : 483
Message
#118315
Posté le 14/12/06 à 22:35
Je croi que tu a tord de sous estimer le langague C/C++.
Tout dépent de ce quel genre d'application tu désire crée.
Si tu préfere programmer des applications Windows, ben la,
c sur que Delphi ou C# sont peut etre mieux adapter pour
faire ca, et en beaucoup moin de temp, je te l'accorde, mais en
terme de vitesse, le C/C++ est bien plus rapide
que les languages de plus haut niveau. Et rien ne t'empeche d'utiliser
une dll ecrite en C++ dans un programme ecrit dans un de ces language.
Et pour ce qui est des pointeurs, il sont très utiles, car il rendre l'ecriture
de code complexe plus facile une fois qu'on l'ai a maitriser.
Croit tu que les programmeurs de jeux peuvent se permette
la lenteur des programmes ecrit en delphi ou en C# pur...
Ca peut marcher certe pour des petit project mais pour un gros
jeu, oublie ca, ca s'ecrit en C/C++ et pas autre chose...

@+

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

pac
Co-Administrateur
Superviseur :
- Méthodologie.
Modérateur :
- Delphi
Chef de projet(s) :
- Jeu Awalé
- EcoSystem
- MySudoku

Avatar de pac
Inscrit : 08/04/2004
Messages : 6571
Message
#118321
Posté le 14/12/06 à 23:04
En termes de performances pures, on parle toujours du C/C++ comme étant le must sans jamais apporter d'explications et tout le monde le prend pour argent comptant sans jamais aller vérifier. J'aimerais bien un jour que quelqu'un m'explique si effectivement il est plus performant et si c'est le cas pourquoi.
Parles-t-on encore de nanosecondes gagnées ?
Il existe beaucoup de librairies graphiques portant sous d'autres langages que le C et le C++ comme la SDL ou openGL qui existent par exemple en C#.

Le fait de pouvoir utiliser des pointeurs sans encapsulation qui vérifie les types et empêche les débordements de mémoire ou écriture de données n'importe où dans la mémoire n'est pas en soit une avancée qui garantie une vitesse d'exécution plus grande.

Et même si le C++ est plus rapide, ça n'enlève en rien ce qui est dit dans le tout premier post, il pourrait très bien être rapide et ne pas posséder les inconvénients précités.

Je voudrais qu'on arrête de dire que les programmes écrits en Delphi et C# sont lents car ce n'est pas le cas. Ceux écrits en Delphi sont compilés tout comme les programmes écrits en C++, c'est donc du code machine qui est exécuté. Je travaille en Delphi et les performances sont importantes, si on avait un concurrent 2x plus rapide parce qu'il était en C++, on serrait obligé de changer de langage, mais ce n'est pas le cas, nos temps sont dans les ordres de grandeur qu'on peut faire avec d'autres langages, sinon plus rapides sur certains points.

C'est trop facile de continuer à avancer des faux arguments passés dans l'inconscient collectif qui veut que le C++ est plus rapide.

Je vous propose une chose, faire un programme dans différents langages qui exécuterait une certain nombres d'opérations, avec compteur de temps. On fournit les sources et l'exécutable puis on compare les temps.
Le truc est de trouver des opérations pas trop élémentaires et assez évolués qui serraient significatives dans une application. Ensuite on pourra effectivement comparer les temps d'exécution des programmes en fonction du langage et je pense que certains seront surpris par les résultats.
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu]Image.

Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

vortex666
Modérateur :
- C & C++
- OpenGL
- Delphi
Chef de projet(s) :
- Vortez3DEngine

Avatar de vortex666
Inscrit : 20/09/2004
Messages : 483
Message
#118323
Posté le 15/12/06 à 00:34
Bon, ok, j'exagere un peu, mais, d'apres moi, pour un jeu,
on doit gagner au moin 5-20%. Mais la performance
importe peu quand il sagit d'un programme Windows
car il passe la plupart du temp a ne rien faire de toute facon.
Seule les fonctions importante du prog. on besoin d'un peu
plus effort sur l'optimisation, sans exagerer bien sur.
La ou le c++ se démarque, c'est ca "malèabilité".
Il y a plein de petit truc cool qu'on peut faire en C++ et qu'on ne
peut pas faire avec les autres. Et pour les erreurs de pointeurs,
il suffit d'etre attentif a ce que l'on fait et s'avoir ce servir du debogeur.
C tout. En fait j'aime autant le C++ que Delphi ou C#, mais je le repete
encore, tout depent du type d'application qu'on veut faire.

Et désoler de t'avoir vèxcer Pac!

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

pac
Co-Administrateur
Superviseur :
- Méthodologie.
Modérateur :
- Delphi
Chef de projet(s) :
- Jeu Awalé
- EcoSystem
- MySudoku

Avatar de pac
Inscrit : 08/04/2004
Messages : 6571
Message
#118329
Posté le 15/12/06 à 09:01
Si j'ai été vexé, c'est pas grave, c'est moi qui suis un peu soupe au lait ces temps ci.
vortex666 dit :
La ou le c++ se démarque, c'est ca "malèabilité".

Il y a plein de petit truc cool qu'on peut faire en C++ et qu'on ne

peut pas faire avec les autres.

Ce serrait bien de justement nous donner ces petits trucs cool.

En ce qui concerne le petit concours sur la rapidité des langages, ça peut être intéressant de le lancer pour déjà rassembler un peu les programmeurs des différents langages mais aussi faire qqch ensemble (bon ok c'est la même chose).
__________________________
Lisez la charte, pensez à regarder la FAQ, les tutoriaux, l'annuaire et faites une recherche dans les forums.
N'oubliez pas le Tag [Résolu]Image.

Initiez-vous à Delphi avec Turbo Delphi Explorer, au C ou au C++ avec Code::Blocks et C# avec Visual C# 2005 Express.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

kit
Nouveau membre
Inscrit : 29/12/2006
Messages : 3
Message
#119442
Posté le 29/12/06 à 20:34
pac dit :
En termes de performances pures, on parle toujours du C/C++ comme étant le must sans jamais apporter d'explications et tout le monde le prend pour argent comptant sans jamais aller vérifier.


Ouais mais si on part comme ça, chacun devrait "vérifier" le fait que c'est la Terre qui tourne autour du soleil au lieu de le prendre pour "argent comptant".

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Czayfaboo
Co-Administrateur
Superviseur :
- Langages Dot.
Modérateur :
- CSharp (C#)
Chef de projet(s) :
- ID3.NET Library
- MoteurProg Work.

Avatar de Czayfaboo
Inscrit : 05/01/2005
Messages : 2853
Message
#119445
Posté le 29/12/06 à 22:52
C'est pas une analogie valable çà ... :S
__________________________
Sujet résolu ? Pensez à mettre le tag Image
Un problème en C# ? Vérifiez celui-ci n'est pas déjà résolu dans la FAQ et que le sujet n'est pas traité parmis les tutoriaux ou les articles avant de poster dans le forum C#.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

kit
Nouveau membre
Inscrit : 29/12/2006
Messages : 3
Message
#119447
Posté le 29/12/06 à 23:22
Pas forcément mais elle peut aider à comprendre que parfois il y a des choses tellement laborieuses et dures à vérifier qu' on peut faire confiance à ceux qui l'ont vérifié et prouvé avant, surtout si'ils sont nombreux.

"Oui mais où est la preuve que ça a été prouvé?" peut-être auriez-vous envie de me demander.

A mon avis, s'il y a autant de gros programmes qui sont écrits en C++ (WinXP, IE, Office, Visual Studio, Half-Life, Doom III, WoW, tous les jeux Microsoft, les moteurs de jeu des jeux de EA,...) c'est parcequ'en effet, c'est un langage rapide.

Ce n'est pas surprenant par ailleurs, du fait qu'il est fondé sur un langage bas niveau très rapide: le C.

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM C++



    PAGES : [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [>>]



.: Site Web développé par Julien Pichot et l'équipe MPWG avec www.evolvia-web.com :.