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++ 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).
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
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
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
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)
c'est bien connu, l'algorithmie est telment plus simple en Java
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
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.
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.
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
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.
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.
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.
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é, ...)
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
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
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.
Partager