[C++] Porter du Java en C++

Porter du Java en C++ [C++] - C++ - Programmation

Marsh Posté le 30-07-2004 à 09:04:48    

Bonjour @ tous,
J´aimerais avoir votre opinion sur le travail nécessaire pour porter des sources Java en C++...
En gros, combien de temps faut il pour reprogrammer une application java qui a nécessité 1 Unité de Temps (disons, 1 année) pour être pensée, développée et débuggée.
J´ai lu que le rapport dans les temps de développement entre Java et C++ (en partant de 0) étaient de 2/3...
Merci !!!

Reply

Marsh Posté le 30-07-2004 à 09:04:48   

Reply

Marsh Posté le 30-07-2004 à 09:17:17    

ça dépend des tes capacités en C++, si elles sont faibles, il va te falloir beaucoup de temps pour obtenit la même qualité

Reply

Marsh Posté le 30-07-2004 à 09:28:27    

Taz a écrit :

ça dépend des tes capacités en C++, si elles sont faibles, il va te falloir beaucoup de temps pour obtenit la même qualité


 
Ok mais en estimant que ce sont des équipes d´ingénieurs fortement qualifiés dans les 2 langages... ?
 
Merci!!!

Reply

Marsh Posté le 30-07-2004 à 10:48:19    

ça dépend de ton appli. par exemple si tu utilises beaucoup de réflexion, va falloir repenser pas mal de choses.

Reply

Marsh Posté le 30-07-2004 à 14:41:07    

La reflexion? Qu'est-ce que c'est?

Reply

Marsh Posté le 30-07-2004 à 14:49:30    

l'autre nom de l'introspection

Reply

Marsh Posté le 30-07-2004 à 14:55:33    

;) Taz t'es dur là !

Reply

Marsh Posté le 30-07-2004 à 15:43:08    

la reflexion => la capacité a connaitre (et modifier ?) la structure des objets a l'execution


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 30-07-2004 à 15:44:55    

Je suis pas sûr, j'avais lu vite, et peut être j'ai mal compris, mais il me semble bien avoir croisé un document (thèse je crois) où le gars avait recodé pas mal d'api Java en C++ et réalisé une sorte de petit framework pratiquement source compatible entre Java et C++. Le but était de comprarer les performances.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 30-07-2004 à 18:50:51    

d'ailleurs pourquoi recoder ?

Reply

Marsh Posté le 30-07-2004 à 18:50:51   

Reply

Marsh Posté le 30-07-2004 à 19:50:15    

Taz a écrit :

d'ailleurs pourquoi recoder ?

pour constater une fois pour toutes que Java est une brouette face au C++ :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-07-2004 à 20:17:24    

nulle n'est besoin de preuve, c'est la définition de Java

Reply

Marsh Posté le 31-07-2004 à 16:37:31    

Harkonnen a écrit :

pour constater une fois pour toutes que Java est une brouette face au C++ :o


euh je ne suis qu'un programmeur amateur débutant alors ca veut dire quoi? que java va moins loin que c++ ou le contraire? :pt1cable:  
 :bounce:  :bounce:  :bounce:


---------------
!jb!
Reply

Marsh Posté le 31-07-2004 à 18:39:57    

je pense que ça veut surtout dire que java est plus lent, et c'est en effet dans sa définition puisqu'il est interprété par une machine virtuelle et non pas par ta propre machine, à toi, directement.

Reply

Marsh Posté le 17-08-2004 à 10:22:56    

je pense que ça veut surtout dire que java est plus lent, et c'est en effet dans sa définition puisqu'il est interprété par une machine virtuelle et non pas par ta propre machine, à toi, directement.
 
 
On peut compiler du java comme on compile du C++.

Reply

Marsh Posté le 17-08-2004 à 10:54:32    

hegros a écrit :

On peut compiler du java comme on compile du C++.


Avec quoi?

Reply

Marsh Posté le 17-08-2004 à 11:08:29    

Il existe deja JIT ( just in time )  
la première fois qu'une instruction est exécutée, elle est compilée de sa forme Java en une forme que l'ordinateur peut comprendre nativement puis chaque fois que cette instruction est de nouveau rencontrée , elle est native et donc plus rapide. La performance est ainsi accrue de 10 à 20 fois

Reply

Marsh Posté le 17-08-2004 à 11:23:20    

On devrait tt les gros trolleurs. Surtout quand ils sont modérateurs ! :o

Reply

Marsh Posté le 17-08-2004 à 12:07:49    

Citation :

La performance est ainsi accrue de 10 à 20 fois


Ca dépend de la vision que tu portes. On peut tout aussi bien dire que la lenteur est réduite de 10 à 20 fois... :-)
Alors hegros, on change de forum ? :hello:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 17-08-2004 à 12:43:04    

Citation :

La performance est ainsi accrue de 10 à 20 fois
Ca dépend de la vision que tu portes. On peut tout aussi bien dire que la lenteur est réduite de 10 à 20 fois... :-)
Alors hegros, on change de forum ? :hello:


 
Sans vouloir lancer de dbat java vs c++ car il y en a eu deja beaucoup. java vient corriger et améliorer des éléments du c++. On gagne d'un coté et on perd de l'autre. On peu pas etre gagnant partout  :na:  

Reply

Marsh Posté le 17-08-2004 à 13:04:41    

jvois pas trop pk tu migrerais une application java en c++ si c'est celle-ci fonctionne
 
attendez d'avoir un réel besoin de revoir l'application de A à Z pour les fonctionnalités, et là vous en profiterai pour passer au C++ si c'est tjrs ce que vous souhaitez

Reply

Marsh Posté le 17-08-2004 à 13:09:06    

Burgergold a écrit :


attendez d'avoir un réel besoin de revoir l'application de A à Z pour les fonctionnalités, et là vous en profiterai pour passer au C++ si c'est tjrs ce que vous souhaitez


Il suffit d'avoir besoin de publier l'application sur des serveurs (ou d'avoir besoin d'augmenter les perfs/l'efficacité), les logiciels qui prennent 15-20Mo de RAM par instance alors qu'en C++ ils en prennent 2, quand il faut faire tourner 50 ou 60 instances par serveur le choix est vite fait [:itm]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 17-08-2004 à 13:10:16    

Masklinn a écrit :

Il suffit d'avoir besoin de publier l'application sur des serveurs (ou d'avoir besoin d'augmenter les perfs/l'efficacité), les logiciels qui prennent 15-20Mo de RAM par instance alors qu'en C++ ils en prennent 2, quand il faut faire tourner 50 ou 60 instances par serveur le choix est vite fait [:itm]


 
et nous au boulot les gens migre les applications C++ vers du Java :D
 
bon faut dire qu'on est vachement multi plateforme (OS/2, Win2k, AIX, Z/OS) alors c'est tout dans notre intérêt

Reply

Marsh Posté le 17-08-2004 à 13:14:21    

ben si les applications sont pas resource critical il n'y a pas spécialement de raison de les avoir en C/C++, surtout si on a besoin de multi plateforme
 
mais par exemple pour mon stage j'ai codé un petit moniteur de ressources, la première version était nickel mais en Python/wxPython -> 15Mo pour chaque instance, sur des serveurs applicatifs metaframe avec ~30 utilisateurs par serveur manges tes 600Mo de RAM pour une mini appli.
 
Je l'ai recodée en C++/wxWidgets, je suis descendu a ~2.5Mo de RAM, les serveurs vont bien mieux :)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 17-08-2004 à 14:01:12    

Ouais, enfin bref, le gars vient demander un renseignement. Il viens pas demander des conseils de stratégie pour sa boite. S'il veut migrer vers C++, c'est pas toi, en débarquant, sans aucun élément, qui pourra lui dire si oui ou non il doit faire ça !

Reply

Marsh Posté le 17-08-2004 à 14:06:17    

El_gringo a écrit :

Ouais, enfin bref, le gars vient demander un renseignement. Il viens pas demander des conseils de stratégie pour sa boite. S'il veut migrer vers C++, c'est pas toi, en débarquant, sans aucun élément, qui pourra lui dire si oui ou non il doit faire ça !


 
ce genre de réponses calmes et modérées devraient etre purement interdite. Si tout le monde faisait comme ca, je me demande bien ou on pourrait encore s'empoigner et se tataner sur les forums.

Reply

Marsh Posté le 17-08-2004 à 14:18:51    

El_gringo a écrit :

Ouais, enfin bref, le gars vient demander un renseignement. Il viens pas demander des conseils de stratégie pour sa boite. S'il veut migrer vers C++, c'est pas toi, en débarquant, sans aucun élément, qui pourra lui dire si oui ou non il doit faire ça !


la personne a posé sa question et a eu une/des réponses, qu'est ce qui empêche ensuite de débattre calmement de l'intérêt du portage C/C++ -> langages haut niveau et inversement en fonction des situations et dans un contexte global?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 17-08-2004 à 14:33:15    

Masklinn a écrit :

la personne a posé sa question et a eu une/des réponses, qu'est ce qui empêche ensuite de débattre calmement de l'intérêt du portage C/C++ -> langages haut niveau et inversement en fonction des situations et dans un contexte global?


 
Ben bien sur que c'est possible de débattre calmement.
A propos de ce que j'ai écrit au dessus, j'avais oublié de citer. Je répondais à Burgergold, quand il disait :

jvois pas trop pk tu migrerais une application java en c++ si c'est celle-ci fonctionne
 
attendez d'avoir un réel besoin de revoir l'application de A à Z pour les fonctionnalités, et là vous en profiterai pour passer au C++ si c'est tjrs ce que vous souhaitez


Message édité par El_gringo le 17-08-2004 à 14:33:47
Reply

Marsh Posté le 17-08-2004 à 14:34:17    

Masklinn a écrit :

Il suffit d'avoir besoin de publier l'application sur des serveurs (ou d'avoir besoin d'augmenter les perfs/l'efficacité), les logiciels qui prennent 15-20Mo de RAM par instance alors qu'en C++ ils en prennent 2, quand il faut faire tourner 50 ou 60 instances par serveur le choix est vite fait [:itm]

en meme temps, faire tourner 50 instances du meme soft, faudrait ptet penser à fouetter le mec qui a architecturé le bordel [:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 17-08-2004 à 14:50:56    

the real moins moins a écrit :

en meme temps, faire tourner 50 instances du meme soft, faudrait ptet penser à fouetter le mec qui a architecturé le bordel [:itm]


mmm non
 
c'est un moniteur de ressource individuel qui sert à surveiller la place libre dans les répertoires personnels des utilisateurs relativement à un quota fixé (ce sont les utilisateurs qui doivent pouvoir voir leurs ressources hein, pas l'admin)
 
tu voudrais faire tourner ca comment avec un seul logiciel pour que chaque utilisateur voit la place sur SON disque toi?


Message édité par masklinn le 17-08-2004 à 14:51:40

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 21-08-2004 à 02:38:07    

hegros a écrit :

Il existe deja JIT ( just in time )  
la première fois qu'une instruction est exécutée, elle est compilée de sa forme Java en une forme que l'ordinateur peut comprendre nativement puis chaque fois que cette instruction est de nouveau rencontrée , elle est native et donc plus rapide. La performance est ainsi accrue de 10 à 20 fois


c'est déjà vieux les JIT. Ca fait longtemps que le Java n'est plus bêtement interprété.
Avec les JVM actuels, c'est beaucoup plus évolué, il ne compile en langage machine que les parties qui en valent la peine. Avec un énorme avantage par rapport à un compilo C++: il compile lors de l'exécution et connait donc les conditions réelles de fonctionnement (taille des structures de données...) et peut donc optimiser en conséquence (feedback-driven optimisation, loop unrolling et tous ces brols...).*
Il y a certaines applis qui sont plus rapides en Java qu'en C++, une fois que la JVM a eu le temps d'optimiser le code.
 
Par contre, les interfaces graphiques, ça restera toujours plus lent qu'en natif, ça on sait rien y faire...  [:proy]  
 
* dans certains cas, on peut gagner beaucoup. J'ai au moins un exemple, où en passant d'un simple JIT (jre 1.2 de Sun) à la Hotspot (jre 1.4), je diminuais le temps de calcul de 50 à 10 secondes de calculs... :)
Mais bon, j'ai un autre exemple où ça changait rien :D


Message édité par deltaden le 21-08-2004 à 02:39:15
Reply

Marsh Posté le 21-08-2004 à 02:54:04    

deltaden a écrit :

c'est déjà vieux les JIT. Ca fait longtemps que le Java n'est plus bêtement interprété.
Avec les JVM actuels, c'est beaucoup plus évolué, il ne compile en langage machine que les parties qui en valent la peine. Avec un énorme avantage par rapport à un compilo C++: il compile lors de l'exécution et connait donc les conditions réelles de fonctionnement (taille des structures de données...) et peut donc optimiser en conséquence (feedback-driven optimisation, loop unrolling et tous ces brols...).*
Il y a certaines applis qui sont plus rapides en Java qu'en C++, une fois que la JVM a eu le temps d'optimiser le code.
 
Par contre, les interfaces graphiques, ça restera toujours plus lent qu'en natif, ça on sait rien y faire...  [:proy]  
 
* dans certains cas, on peut gagner beaucoup. J'ai au moins un exemple, où en passant d'un simple JIT (jre 1.2 de Sun) à la Hotspot (jre 1.4), je diminuais le temps de calcul de 50 à 10 secondes de calculs... :)
Mais bon, j'ai un autre exemple où ça changait rien :D


 
tout a fait (en fait j'en sais rien), mais si tu prends le compilo C++ Intel par exemple, tu peux faire le code machine est amélioré est fonction des retours du profiler.
 
donc avec un bon compilo C++, en termes de performances, tu as au strict minimum les mêmes performances que du Java, et l'analyse+optimisation est faite en offline, pas sur la machine cliente....

Reply

Marsh Posté le 21-08-2004 à 03:38:18    

bjone a écrit :

tout a fait (en fait j'en sais rien), mais si tu prends le compilo C++ Intel par exemple, tu peux faire le code machine est amélioré est fonction des retours du profiler.
 
donc avec un bon compilo C++, en termes de performances, tu as au strict minimum les mêmes performances que du Java, et l'analyse+optimisation est faite en offline, pas sur la machine cliente....


oui, mais le compilo de la JVM, il améliore aussi en fonction des retours du profiler. Et si l'environnement d'exécution change, il peut le recompiler autrement.
 
Dans le futur, on pourrait même imaginer qu'il y ait des flags de compilation en fonction de la machine. C'est directement optimisé pour le CPU.
 
Evidement, ça prend du temps de calcul sur la machine cliente, c'est un désaventage.  
Mais Microsoft a l'air de s'orienter par là aussi avec son .NET  
Qui sait, Tout les programmes tournenront peut-être comme cela dans le futur ;)

Reply

Marsh Posté le 23-08-2004 à 17:00:35    

Citation :

taille des structures de données


sizeof ?
Sous .Net, une des principales cause de gain entre un code JITé et un code compilé natif, c'est l'inlining possible au runtime ce qui le rend bien meilleur. Mais malgré ça ça reste plus lent, même si l'écart est de plus en plus faible.
http://www.vertigosoftware.com/Quake2FAQ.htm

Citation :

How is the performance of the managed version?
Initially, the managed version was faster than the native version when the default processor optimization setting /G5 (Pentium) was used. Changing the optimization setting to /G7 (Pentium 4 and Above) created a native version that runs around 15% faster then the managed version.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed