IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Débats sur le développement - Le Best Of Discussion :

[Débat] C++ vs Java


Sujet :

Débats sur le développement - Le Best Of

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2002
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 152
    Par défaut [Débat] C++ vs Java
    Quels sont les avantages et les inconvénients respectifs majeurs des langages de programmation C++ et Java l'un vis-à-vis de l'autre ?


  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 31
    Par défaut
    C++ beaucoup plus rapide que java.
    java beaucoup plus portable que C++.

    pour toi nouveauté de programmation :
    - Le C++ n'est pas tout objet
    - les pointeurs !

  3. #3
    Invité de passage
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    1
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1
    Par défaut badra
    "C++ beaucoup plus rapide que java."

    C'est ce que j'ai croyé moi aussi mais en testant une fonction récursive qui résoud la suite de Fibonacci:
    U(0)=1
    U(1)=2
    U(n)=U(n-2)+U(n-1)
    j'ai découvert que la même version de la fonction écrite en java était plus rapide que en celle écrite en c++(tout en respectant les petites différences syntaxiques entre les deux langages).

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 168
    Par défaut
    Citation Envoyé par goethe Voir le message
    C++ beaucoup plus rapide que java.
    java beaucoup plus portable que C++.

    pour toi nouveauté de programmation :
    - Le C++ n'est pas tout objet
    - les pointeurs !
    +1

    dans le domaine de la médiation télécom, la plupart des systèmes sont basés sur le C/C++ (rapidité d'exécution).

  5. #5
    Membre éclairé Avatar de fantomas261
    Inscrit en
    Avril 2007
    Messages
    486
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 486
    Par défaut
    ce debat ne finira jamais,
    je fais de la 3D en java, base de donne,site web, essaie de faire ca en c++.
    il n y a pas une grande difference de rapidite en java et c++. et java est un langage qui est mis à jour, donc l ecart va se reduire

  6. #6
    Membre très actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Afghanistan

    Informations forums :
    Inscription : Juin 2003
    Messages : 452
    Billets dans le blog
    1
    Par défaut
    Il faut regarder l'évolution des performences de java depuis les premières version .
    Je pense que le C++ n'a pas progressé autant.
    Cette évolution laisse à penser que les performences de java finiront par être sensiblement les mêmes que c++.
    C'est l'inteligence du compilateur qui pour l'instant ne permet d'optimiser assez le byte code java .
    Et le compilateur JIT n'optimise pas assez le code natif

  7. #7
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    Citation Envoyé par super_navide Voir le message
    Oui dans l'industrie des jeux videos a pognons sans inovation avec de super graphisme , oui le C++ est primordial.
    merci, ca fait plaisir... perso, je bosse dans ce milieu de cretin incapable d'inover, et je peut te dire que TOUTES les dernières inovation en terme de gameplay demande TOUJOURS de la puissance de calculs en plus que ne fournis pas Java (les moteurs physique etant le cas le plus connu), et j'attend tes exemples de jeu Java au gameplay révolutionnaire
    Citation Envoyé par super_navide Voir le message
    Mais si on veut faire un jeux avec un nouveau concept avec des graphisme convenable on peut utiliser Java.
    oui, c'est vrai, il suffit de regarder Jake 2, le port de quake 2 en Java qui a mis 10 ans à atteindre le niveau de perf de l'original (et ceci uniquement sur des proceseurs récent, sur des proc de l'époque )
    Citation Envoyé par super_navide Voir le message
    Moi je pense qu'il faut commencer par java trouver les bons algorithmes.
    Et puis si il y a effectivement des problèmes de performance envisager d'utiliser le C++ via une JNI ou de piloter JAVA de puis le C++.
    c'est bien connu, l'algorithmie est telment plus simple en Java

    Citation Envoyé par leopard261 Voir le message
    ce debat ne finira jamais,
    je fais de la 3D en java, base de donne,site web, essaie de faire ca en c++.
    il n y a pas une grande difference de rapidite en java et c++. et java est un langage qui est mis à jour, donc l ecart va se reduire
    tant qu'on ne pourra pas descendre bas niveau en Java, il ne pourra pas atteindre les niveau de perf du C++...
    la compilation Just in time qui utilise les dernières instruction des processeurs est juste une vaste blague... aucun compilateur off-line à l'heure actuelle n'est capable de détecter ou utiliser les instruction de vectorisation de manière efficace, alors avec un compilateur à la volé, ca ne risque pas d'arriver...
    En plus, l'optimisation de l'occupation mémoire en Java est... comment dire... limité
    en 3D ou on utilise des vecteurs à tour de bras, savoir qu'on paye plusieurs octets de plus pour chaque vecteur (de 12 octets normalement), c'est difficilement supportable (surtout qu'on utilise déjà suffisament de mémoire dans les jeux video )

    sinon, pour info, les bench réalisé sur du calculs physique par l'auteur du moteur physique Bullet donne Java 50 fois plus lent que le C++, et ceci sans utiliser d'optimisation bas niveau en C++
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  8. #8
    Membre très actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Afghanistan

    Informations forums :
    Inscription : Juin 2003
    Messages : 452
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bafman Voir le message
    merci, ca fait plaisir... perso, je bosse dans ce milieu de cretin incapable d'inover, et je peut te dire que TOUTES les dernières inovation en terme de gameplay demande TOUJOURS de la puissance de calculs en plus que ne fournis pas Java (les moteurs physique etant le cas le plus connu), et j'attend tes exemples de jeu Java au gameplay révolutionnaire
    En java sur un PC maintenant tu peut faire les même jeux que sur une DS ou une PSP.
    Je pense pas que tous les jeux sur DS et PSP soit de la merde (désolé pour le terme )
    Donc on peut faire de très bon jeux sans pour autant avoir besoin d'un puissance énorme.
    Exemple Zooma est un jeux que je trouve super marrant et fun pourtant il ne nécéssite pas une grande puissance de calcul .
    C'est comme les petits jeux de WII c'est inovant et marrant et il ne nécéssite pas de grande de puissance de calcul.

  9. #9
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Citation Envoyé par bafman Voir le message
    tant qu'on ne pourra pas descendre bas niveau en Java, il ne pourra pas atteindre les niveau de perf du C++...
    la compilation Just in time qui utilise les dernières instruction des processeurs est juste une vaste blague... aucun compilateur off-line à l'heure actuelle n'est capable de détecter ou utiliser les instruction de vectorisation de manière efficace, alors avec un compilateur à la volé, ca ne risque pas d'arriver...
    En plus, l'optimisation de l'occupation mémoire en Java est... comment dire... limité
    en 3D ou on utilise des vecteurs à tour de bras, savoir qu'on paye plusieurs octets de plus pour chaque vecteur (de 12 octets normalement), c'est difficilement supportable (surtout qu'on utilise déjà suffisament de mémoire dans les jeux video )
    C++ est une couche objet au dessus de C, que ce soit au niveau syntaxe, compilation et run-time.

    Les performances du C++ sont donc voisines de celles du C. Il y a un tres leger ralentissemnt dû a la run-time engine du C++ qui gere les objets (new/delete, appel de methode, overiding ).

    Coté Java ca n'a rien a voir. Java n'est pas une couche objet au dessus d'un langage imperatif. Le ByteCode, qui est le code "bas niveau" dans java est un code objet. Donc meme en optimisant "a mort" du java (en modifiant le bytecode), on sera toujours dans un monde objet avec des "new", "invoke", et toujours pas de "delete" ou "malloc".

    De plus, les fonctionalités telles que la GC, la Reflexion et le classloader necessitent d'avoir une run-time engine plus complexe, et donc plus lourde (lente), que celle du C++.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Par défaut
    Citation Envoyé par leopard261 Voir le message
    je fais de la 3D en java, base de donne,site web, essaie de faire ca en c++.
    Hum... c'est vrai que l'on a attendu de voir java apparaitre il y a 10 ans a peine pour faire du site web, de la bdd, et de la 3D.... mais bon je dis ça moi, je dis rien, hein....

  11. #11
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 519
    Par défaut
    Citation Envoyé par leopard261 Voir le message
    ce debat ne finira jamais,
    je fais de la 3D en java, base de donne,site web, essaie de faire ca en c++.
    il n y a pas une grande difference de rapidite en java et c++. et java est un langage qui est mis à jour, donc l ecart va se reduire
    C++ est aussi mis à jour

  12. #12
    Membre très actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    452
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Afghanistan

    Informations forums :
    Inscription : Juin 2003
    Messages : 452
    Billets dans le blog
    1
    Par défaut
    Peut on gérer en C++ les template aussi bien qu'en java

    Par exemple pour spécifier qu'un type paramétré doit être une sous classe d'un type donnée.

    T <T extends Bidule> get(T x)

    Je vois que personne n'a répondu pour l'implémentation d'un proxy en c++ comme en Java

    un Proxy en java permet d'implémenter dynamiquement une interface

    par example
    interface Personne {
    String nom();
    String prenom (); }

    on peut créer un objet proxy (sans créer explicitement de classe ) qui implemente l'interface
    et chaque appel à un méthode de l'interface provoque l'execution d'une méthode
    Object invoke(Object reiceiver,Method m,Object [] arguments)

    cet mecanisme permet de faire bcp de chose par exemple tracer tous les appel fait a un objet

  13. #13
    Inactif  
    Homme Profil pro
    Architecte matériel
    Inscrit en
    Décembre 2017
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Architecte matériel

    Informations forums :
    Inscription : Décembre 2017
    Messages : 155
    Par défaut
    Citation Envoyé par goethe Voir le message
    C++ beaucoup plus rapide que java.
    Les paramètres tableaux en Java sont plus optimizables sur que les pointeurs en C++.

    Si une fonction prend en référence deux tableaux x et y (deux pointeurs sur les éléments en C ou en C++) :

    en Java

    deux références de tableaux comme paramètres d'une fonction sont soit
    - deux références sur le même tableau
    - deux références sur deux tableaux disjoints : tout élément d'un tableau ne peut pas être un élément de l'autre

    Comme en géométrie euclidienne deux droites parallèles sont
    - la même droite
    - ou disjointes

    Attention : les éléments différents peuvent recevoir des valeurs égales. Un tableau de références peut avoir tous les éléments contenant une référence égale; donc tous les éléments se référent à un même objet. Même changer la valeur d'un élément (la référence, pas le référant) n'affecte pas la valeur d'un autre.

    Donc un compilateur peut insérer un test x!=y et ensuite supposer que les accès aux tableaux sont indépendants : une modification de x[i] ne peut pas affecter un accès à y[j] quels que soient les valeurs de i et j (il faut aussi gérer le cas x==y évidemment)

    Sans le test x!=y, le compilateur sait que x[i] et y[i+1] ne se réfèrent pas au même élément.

    en C++

    Deux pointeurs à l'intérieurs de tableaux x,y peuvent
    - être égaux : x==y

    - être différents d'une certaine valeur d :
    y-x == d et x+d == y

    - être différents sans aucune relation entre eux (pointant dans deux tableaux disjoints)

    Vérifier x!=y n'implique pas que les tableaux sont disjoints.

    x[i] et y[i+1] peuvent se référer au même objet.

  14. #14
    Nouveau candidat au Club
    Homme Profil pro
    Développeur du logiciel denis-draw
    Inscrit en
    Mai 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Développeur du logiciel denis-draw
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2023
    Messages : 2
    Par défaut C++ permet d'utiliser des functions non objet dans ce cas nous n'avons pas besoin d'instancier de déclarer
    Citation Envoyé par goethe Voir le message
    C++ beaucoup plus rapide que java.
    java beaucoup plus portable que C++.

    pour toi nouveauté de programmation :
    - Le C++ n'est pas tout objet
    - les pointeurs !
    C++ permet d'utiliser des functions non objet dans ce cas nous n'avons pas besoin d'instancier de déclarer son utilisation qui demande du temps et de la mémoire supplémentaire pour allouer sa déclaration en mémoire vive mais aussi au moment de l'exécution en devant systématiquement en Java créer chaque objet car chaque méthode de java doit être et c'est identique pour les variables déclarées dans un classe objet il n'est pas possible en voulant dé-protéger la lecture d'adresse mémoire $B800 pour les connaisseurs n'importe ou dans l'ordinateur en java alors que c et c++ le permet très efficacement ainsi que le langage Delphi utiliser comme compilateur pascal à vérifier avec Rust que je ne connait pas encore complémentent.

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 145
    Billets dans le blog
    4
    Par défaut
    Java connait static qui peut être appliqué aux méthodes et aux variables.
    Oui il faut toujours que ce soit au sein d'une classe, ce qui rend la syntaxe lourde imo, mais il n'y a rien à instancier.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  16. #16
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 137
    Par défaut
    Java et C++ sont deux langages distincts (bien que très semblables) et n'ont pas les mêmes objectifs. En effet, pour faire ton choix entre les deux cela dépend de ton objectif et de tes contraintes (support, nombre d'utilisateurs, portabilité, ...)

  17. #17
    Membre confirmé
    Inscrit en
    Décembre 2002
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 152
    Par défaut
    Eh bien en fait je désire connaître (un bien grand mot, disons plutôt apprendre ) les deux.

    Et c'est justement la question que je me pose de savoir dans quel cas il est plus judicieux d'utiliser l'un plutôt que l'autre. J'ai bien compris en ce qui concerne la rapidité d'exécution et la portabilité mais quels sont les autres critères de choix en fonction de quel genre d'application ?


  18. #18
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 3
    Par défaut
    Citation Envoyé par aliasjcdenton Voir le message
    Eh bien en fait je désire connaître (un bien grand mot, disons plutôt apprendre ) les deux.

    Et c'est justement la question que je me pose de savoir dans quel cas il est plus judicieux d'utiliser l'un plutôt que l'autre. J'ai bien compris en ce qui concerne la rapidité d'exécution et la portabilité mais quels sont les autres critères de choix en fonction de quel genre d'application ?

    Coucou,
    en gros le C++ est un langage à 99, 99% objet qui reprend la syntaxe du C.
    son avantage est sa rapidité, le nombre de librairies disponible et sa portabilité (car mis à part qq trucs , si on code bien en c++ avec des libs multi plateforme, le code est portable).
    son desavantage est sa complexité (gestion memoire) et sa possible future obsolescence (pitié non car je ne connais quasiment que le c/c++) face au C# ou au Java.
    Le java est 100% portable mais un peu lent donc à déconseiller pour des appli 3D ou de traitement vidéo / son /image ou les calculs doivent être rapide.
    A bientot

  19. #19
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Citation Envoyé par toomytooms Voir le message
    (snip)
    son desavantage est sa complexité (gestion memoire) et sa possible future obsolescence (pitié non car je ne connais quasiment que le c/c++) face au C# ou au Java.(snip)
    Sur ce point, on peut te rassurer...

    Si même C et C++ *peuvent* (éventuellement) être considérés comme "obsolètes" dans un futur indéterminé, il n'en reste pas moins que, comme tout langage qui a été utilisé pendant plusieurs décennies, ils resteront utilisés, ne serait-ce que dans certains secteurs réellement particuliers...

    Quelques exemples "choisi":

    -Ada est encore utilisé dans le programme "Ariane"
    -COBOL est encore utilisé dans les domaines des assurances et des banques
    -Fortran est encore régulièrement utilisé pour les applications de mathématiques scientifiques
    ...

    La raison principale de ce fait est que, l'un dans l'autre, il revient "moins cher" de maintenir et d'améliorer les décennies de code déjà écrit que de devoir... prévoir leur remplacement dans d'autres langages.

    De plus, certains langages sont particulièrement puissants dans certains secteurs bien particulier (sauf erreur, C et C++ n'arrivent aux performances de COBOL pour la gestion de gros fichier).

    De ce fait, s'il faut prévoir le temps nécessaire pour remplacer le code pour obtenir au final quelque chose qui travaillera en une fois et demie ou deux fois plus de temps (ou peut être plus), la question de savoir s'il faut effectuer la transition est... vite réglée
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  20. #20
    Membre éclairé

    Inscrit en
    Décembre 2002
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 60
    Par défaut
    C++ est plus complet (on peut a peu pres tout faire avec), plus performant (quand correctement concu et code), plus generaliste(bien que en principe objet, on n'est pas oblige de faire de l'object avec), plus puissant (template, ...), plus complet (il vit depuis longtemps et possede de tres nombreuses librairies, standard ou non). C'est egalement un langage tres complique et tres sujet a l'erreur et a l'introduction de bogues.

    Java est plus facile a apprendre et utiliser, plus portable, plus objet.

    Dans les deux cas il peut y avoir des problemes de compatibilite. Au niveau C++, c'est surtout lie a la portabilite (si tu code du C++ standard), mais le code est ensuite rarement compatible, sur une meme machine , d'un compilateur a un autre. Au niveau Java, il y a des problemes de compatibilite et support entre les versions. La version 2.0 de Java n'est pas supportee partout et par tous.

Discussions similaires

  1. [Débat] Technologie .NET vs JAVA
    Par neo.51 dans le forum Débats sur le développement - Le Best Of
    Réponses: 1047
    Dernier message: 14/01/2019, 16h15
  2. [Débat] .NET vs JAVA/J2EE
    Par tssi555 dans le forum VB.NET
    Réponses: 5
    Dernier message: 10/12/2008, 07h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo