Citation:
Envoyé par Grégory Picavet
Pour ceux qui ont eu le courage de suivre la discussion jusqu'ici, je vais essayer de présenter objectivement :lol: les différences entre c++ et java.
chaque technologie possède des avantages et des inconvénients dépendant du contexte d'utilisation. Vous trouverez ci-dessous une liste que j'espere assez exhaustive et qui
reprend les points abordé jusqu'ici.
N'hésitez pas à compléter ou corriger les erreurs.
Je ne peux que louer votre effort de synthèse.
Je suis plutôt d'accord avec l'ensemble de ce qui y est dit, mais voudrais
corriger quelque points.
Citation:
-java est fortement typé, c++ non (en java, un entier n'est pas un réel, sauf si on explicite la conversion)
En C++ non plus un entier n'est pas un réel !!!!
Qu'est ce que c'est que cette histoire ?
Test Java
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
class X
{
public void f()
{
double x = 1.0 ;
int i = 2 ;
x = i ;
i = x ;
}
} |
Resultat: (avec JDK sun linux)
Code:
1 2 3 4 5 6 7
|
x.java:9: possible loss of precision
found : double
required: int
i = x ;
^
1 error |
Test C++ (avec gcc linux)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
class X
{
public:
void f()
{
double x = 1.0 ;
int i = 2 ;
i = x ;
x = i ;
}
} ; |
Résultat:
Code:
1 2 3 4
|
x.cpp: In member function `void X::f()':
x.cpp:9: warning: assignment to `int' from `double'
x.cpp:9: warning: argument to `int' from `double' |
En fait, les deux langages sont fortement typés, sauf que
(comme vous l'avez dit) les conteneurs génériques de C++
permettent de conserver un typage normal alors que Java relâche le typage
lorsqu'on utilise des conteneurs permettant de stocker en vrac n'importe
quel type d'objet.
Citation:
-java peut accéder directement à la mémoire (les DirectBuffer du nouveau package java.nio), mais dans ce cas la sécurité du code n'est plus garantie. La sécurité est cependant toujours plus élevée car pas d' arithmétique des pointeurs
Je prédis un "brillant" avenir à ce paquetage. Il est en contradiction
avec la philosophie de Java.
Citation:
-l'arithmétique des pointeurs en c++ pas en java (simplification très utile pour l'accès direct)
Pouvez vous expliquer les dangers de l'arithmétique et cette simplification ?
Citation:
-passage des paramètres uniquement par valeur d'identifiant mémoire en java (donc pas de copie sur la pile), par copie et par référence en c++.
Donc possibilité de copie ou non en C++, au choix.
Citation:
-java intègre son méta-modèle accessible avec java.lang.reflect. (ex : pour créer des scripts qui ne nécessitent pas d'être recompilés à chaque fois)
Les gens intéressé par l'utilisation d'un méta modèle en C++ peuvent se pencher
le fonctionnement de Qt (http://www.trolltech.com)
Celui ci offre (gratuitement) un précompilateur qui extrait un méta modèle
du code source. Tout Qt est basé dessus et ça marche parfaitement bien.
Si vous utilisez KDE, vous mettez en oeuvre ce méta modèle a chaque seconde,
sans le savoir puisqu'il est à la base du système signal-slot.
Citation:
-java n'a pas besoin de fichier header, puisqu'il n'a pas de précompilateur (du coup pas de templates non plus...).
Les templates ne sont PAS gérés par le pré-processeur
(ni par un pré-compilateur). Ils sont gérés par le compilateur.
Citation:
-en java : threads gérés par la jvm et non le système d'exploitation. Gestion des sections critique, des attentes et notification, des groupes. Programmation simple par rapport à
unix ou windows.
Vrai et faux. Java offre aussi la possibilité d'utiliser les threads natifs
(source: JDK). Je pense que les green-threads doivent avoir des
inconvénients dans certains cas.
Il existe de nombreuses bibli de threads en C++.
Je recommande Jthreads++, (http://www.iona.com/devcenter/orbacus/jtc.htm)
qui fournit une implémentation des threads Java-like très élégante,
tout aussi facile à utiliser que celle de Java.
Ceci montre que la véritable puissance d'un langage est avant tout
d'être extensible.
Citation:
Je travaille sur un projet personnel de moteur 3D temps réel en java et opengl. J'obtient environ 80-90% des performances du c++ optimisé sans avoir
sacrifié mon modèle objet. Certe des optimisations triviales comme la gestion d'un cache plutot qu'une allocation dynamique aléatoire est plus que souhaitable
en java (regardez les serveurs d'application java). Je travaille également sur une application web distribuée d'entreprise (mon gagne pain cette fois!). La rapidité de développement, la
qualité et la maintenabilité sont des contraintes importantes. Le C++ ne permettrait pas d'obtenir la même qualité pour un temps de développement donné.
Je suis intéressé par vos chiffres et il me laissent un peu perplexe.
Comme je ne vous prends pas pour un menteur et que je suis plutôt sûr de
mes mesures (qui ne collent absolument pas avec les votres), j'aimerai
savoir ce que fait votre application, et ce que vous avez mesuré.
Mon inquiétude vient de l'utilisation d'open GL.
Il est notoire que les calculs 3D coûtent cher et doivent
donc représenter une part importantes des temps d'exécution.
Je me demande donc si vous n'avez pas mesuré les performance d'open GL
(qui ne doit pas être écrit en Java, et peut d'ailleurs largement reposer
sur le matériel) au lieu de celle de votre code.
Avez vous profilé l'appli pour voir ou se passe le temps d'exécution ?
Bref, l'histoire de la mouche dans un couloir de TGV et dont
le GPS indique qu'elle vole à 280 Km/h.
Qu'en pensez vous ?