rapidité java / c++ /c

rapidité java / c++ /c - Java - Programmation

Marsh Posté le 09-02-2008 à 17:47:39    

bonjour,  
 
En ayant en tête que le java était relativement lent par rapport à d'autres languages de programation, je me suis mis en tete de débuter un projet de language qui puisse marcher sur plusieurs platforms et qui puisse être plus rapide que j'ai mis sur source forge, cependant j'ai entendu parler des améliorations du java, et que certaines fonctions n'étaient pas émulés mais compilée puis executées.j'ai fait un mini benckmark et ça a l'air de tourner rapidement.Cependant j'ai toujours espoir de faire un projet interressant car je suis sûr que certaines astuces utilisées dans mon projet permettent d'etre tres rapide, je pense.
 
voila je voulais savoir dans quel domaine de programation java était rapide ou lent, par rapport à une référence que serait le C ou le C++:
dans les boucles, les tableux( je sais que chaque fois que java accede à un tableau il doit verifier qu'il est bien dans les bornes) etc...
 

Reply

Marsh Posté le 09-02-2008 à 17:47:39   

Reply

Marsh Posté le 09-02-2008 à 18:04:42    

idée louable, mais faut tout de suite arrêter de déconner.


Message édité par matrixise le 09-02-2008 à 18:05:03
Reply

Marsh Posté le 09-02-2008 à 18:23:50    

je te rassure je ne veux pas tous reprogrammer,ça parait assez impossible, mais deja j'ai pas mal avancer et j'ai deja programmer à moitié le programme qui fait machine virtuel, deja si j'arrive à terminer ça et a interresser des gens la dessus je serais trés content... à condition que ça ait un réel interet, et c'est justement ce que je cherche à savoir??


Message édité par nicobzz le 09-02-2008 à 18:24:40
Reply

Marsh Posté le 09-02-2008 à 18:43:43    

question à deux francs, t'es-tu déjà amusé à faire un optimiseur de code ?  je suis désolé, mais ce que tu fais une véritable perte de temps, sauf pour un apprentissage. quel paradigme vas-tu utiliser ? y a des tonnes de questions, et tu viens en disant "tiens, vé créer un nouveau langage multiplateforme", je te signale que tous les langages sont multiplateformes sauf exceptions de certains qui sont propres à certaines plateformes propriétaires.

Reply

Marsh Posté le 09-02-2008 à 18:50:31    

il ne s'agit pas d'un optimiseur de code, mais il s'agit que java utilise pour éviter que le programme qui tourne dans la machine virtuelle accède à des données qu'il n'a pas droits certaines astuces , et que dans mon projet ça utilise d'autres astuces qui serait peut etre moins contraigantes.

Reply

Marsh Posté le 09-02-2008 à 19:04:02    

url ?

Reply

Marsh Posté le 09-02-2008 à 19:06:14    

vraiment, mais vraiment rien compris, en français et avec des détails, cela donne quoi ?
 

Reply

Marsh Posté le 09-02-2008 à 19:42:38    

http://sourceforge.net/projects/mp-project/
j'ai peut etre pas mis assez de doc pour que les gens comprennent bien le principe
, j'essaye d'expliquer à matrixise, en fait en java depuis récement les programmes sont compilés pour etre executés en language machine (au moins une partie des programmes) cependant si cela était aussi simple que ça les programmes java pourrait acceder aux donnée de la machine virtuel ou à des instructions que l'utilisateur ne veut pas que le programe java accède et pour cela la machine virutelle java utilisent des instructions pour verifier à chaque fois que le programe accede une donnée que c'est bien au bon endroit, tandis que moi j'utilise des fonctionnalité des processeur.
en gros c'est ça, mais y'a beaucoup plus de détail en vrai
 
car ça utilise le mmaping aussi, les segments du processeur etc...


Message édité par nicobzz le 09-02-2008 à 19:48:31
Reply

Marsh Posté le 09-02-2008 à 19:47:19    

pas de site web, pas de source.
a quoi sert de donner l'url si il y a rien au bout ?

Reply

Marsh Posté le 09-02-2008 à 19:50:25    

si y'a quelque chose, mais j'ai oublié de preciser que ce que j'avais fait ct juste sous linux, mais y'a bien un fichier à télécharger avec le code source dedans

Reply

Marsh Posté le 09-02-2008 à 19:50:25   

Reply

Marsh Posté le 09-02-2008 à 20:53:19    

et peux-tu être plus précis concernant l'architecture de ton langage, sa grammaire, le paradigme employé, les différences entre ton implémentation, et l'implémentation de plusieurs ingénieurs qui ne font que cela ?
 
Je ne veux pas parraître emmerdeur, mais quand on dit "je réinvente la roue", faudrait avoir des arguments en béton et expliquer synthétiquement la différence entre ton implémentation et une autre.
 
Je veux du concret et non de l'abstract
 

Reply

Marsh Posté le 09-02-2008 à 21:02:02    

en fait c'est vrai que j'ai été assez impreci, c'est pas vraiment le language qui est important ici mais la machine virtuelle, en fait le language c'est un language intermédiare language machine mais évidement, le but n'est pas de programmer en language intermédiare, ça serait pas vraiment un progret, mais par contre on pourrait compiler du C++ dans ce language intermédiaire pour le laisser tourner dans la machine virtuelle, avantage de la machine virtuelle: les meme que java c'est à dire éviter d'avoir à recompiler le programme pour différent os, et permettre que ça soit sécurisé c'est à dire que ça n'accede qu'a ce qu'on veut, pour la rapidité si ça arrive à etre plus rapide que java j'ai expliqué pourquoi ci dessus et si c'est réélement plus rapide, c'est l'interet de ce projet.

Message cité 1 fois
Message édité par nicobzz le 09-02-2008 à 21:03:23
Reply

Marsh Posté le 09-02-2008 à 21:07:30    

j'attend un Proof-of-concept.
en attendant : http://forum-images.hardware.fr/themes_static/images/silk/flagn1.gif

Reply

Marsh Posté le 09-02-2008 à 21:22:37    

Pourrais-tu s'il te plait mettre du commentaire dans ton code source, expliquer ce que fait chaque unité, afin que cela soit compréhensible.
 
et comme KangOl, j'attends aussi un Proof Of Concept

Reply

Marsh Posté le 09-02-2008 à 22:08:14    

ouai je sais faudrait que je le commente plus mais j'ai pas trop le temps, en tout cas j'ai pas eu ma réponse à ma question sur la différence de performance entre le java et le C++ ou le C...

Reply

Marsh Posté le 09-02-2008 à 22:38:57    

Demande à Joel F et BifaceMcLeOD... Ils sont en train de troller dessus :P

Reply

Marsh Posté le 09-02-2008 à 22:39:32    

nicobzz a écrit :

en fait c'est vrai que j'ai été assez impreci, c'est pas vraiment le language qui est important ici mais la machine virtuelle, en fait le language c'est un language intermédiare language machine mais évidement, le but n'est pas de programmer en language intermédiare, ça serait pas vraiment un progret, mais par contre on pourrait compiler du C++ dans ce language intermédiaire pour le laisser tourner dans la machine virtuelle, avantage de la machine virtuelle: les meme que java c'est à dire éviter d'avoir à recompiler le programme pour différent os, et permettre que ça soit sécurisé c'est à dire que ça n'accede qu'a ce qu'on veut, pour la rapidité si ça arrive à etre plus rapide que java j'ai expliqué pourquoi ci dessus et si c'est réllement plus rapide, c'est l'interet de ce projet.


 
"machine virtuelle" : une sorte d'environnement d'exécution ? parce qu'en interprété ou en bytecode tu risques pas de battre Java. Les environnements d'exécution par séquestration ça existe sous Linux.
 
"on pourrait compiler du C++ dans ce language intermédiaire" : en gros une espèce de pré-parser (par exemple pro*C) qui intègre des librairies multiplateformes ?
 
"rapidité si ça arrive à etre plus rapide que java j'ai expliqué pourquoi ci dessus et si c'est réellement plus rapide, c'est l'interet de ce projet" : C++ est assurément meilleur que Java en performance pure, mais Java intègre des notions de programmation moderne et plein d'autres trucs (outils, framework, etc.) qui accélèrent grandement les temps de développements. En gros, Java et C++ ça ne se compare pas. Personnellement à moins que ça ne vaille le coup, j'évite de programmer en C/C++ même pour optimiser les perfs.
Parfois, un programme développé en Java peut-être plus rapide que son homologue C++ pour un même temps de développement, tout simplement parce que pour faire l'équivalent de ce qui a été optimisé dans Java, tu ne l'as pas en optimisé dans les librairies standard C++ : tu perds en temps de développement pour atteindre un résultat au moins équivalent.


Message édité par czh le 09-02-2008 à 22:53:55
Reply

Marsh Posté le 09-02-2008 à 22:53:31    

Je trolle pas, j'ai donné qqs arguments :o

 

Sinon czh, toi la tu trolles. LE C++ a bien évolué depuis :o Y a qu'a regarder du coté de boost, du TR01 et du standard 0x


Message édité par Joel F le 09-02-2008 à 22:55:07
Reply

Marsh Posté le 09-02-2008 à 23:07:53    

Tu peux détailler au lieu de troller avec des noms sans explications ?
 
edit : parce que ce que tu cites n'est pas incompatibles avec mes dires.


Message édité par czh le 09-02-2008 à 23:10:30
Reply

Marsh Posté le 10-02-2008 à 08:00:09    

Désolé, j'ai encore poster sans café dans le sang [:dawa]
 
je veut dire quand tu dis que (je cite) "Java intègre des notions de programmation moderne et plein d'autres trucs (outils, framework, etc.) qui accélèrent grandement les temps de développements." c'ets un peu fort comme du roquefort :/ C++ et autant objet que Java  que je sache [:pingouino] et à part les mécanismes d'introspection - qui je dois l'avouer sont alléchant pour certains types de problèmes - j'aimerais bien savoir ce que tu reproches à C++ sur ce point.
 
Niveau perf, je dis rien. Java et C++ sont deux outils avec deux cibles différentes et des historiques de choix techno différents, donc comme tu le dis, incomparable.

Reply

Marsh Posté le 10-02-2008 à 09:44:52    

nicobzz, te rends-tu compte que si on compare les performances de langages sur machine virtuelle, la machine virtuelle de Sun est l'une des machines virtuelles les plus performantes qui existent actuellement ? Que Sun y a inclus le résultat de plus de dix ans de développement et d'optimisation par quelques-uns des meilleurs spécialistes mondiaux en la matière ? Et tu espères réellement pouvoir faire mieux ? Sincèrement, permets-nous de douter que tu puisses faire mieux sans perdre en généralité, et certainement pas avec "quelques astuces" simples.
 
As-tu lu la spec de la JVM ? Voire le code source, qui est je le rappelle libre ?


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 10-02-2008 à 13:17:28    

Joel F a écrit :

j'aimerais bien savoir ce que tu reproches à C++ sur ce point.


 
Je reproche surtout à  C++ d'être trop archaïque, enfin je n'aime pas Java non plus à cause de sa ressemblance avec C++ (et d'autres trucs aussi), mais Java est tout de même moins archaïque.
 
Je rectifierais par "Java intègre des notions de programmation moderne et plein d'autres trucs (outils, framework, etc.) qui accélèrent grandement les temps de développements pour certains types d'applications." => bref ça se compare pas.


Message édité par czh le 10-02-2008 à 13:21:19
Reply

Marsh Posté le 11-02-2008 à 20:39:30    

merci pour vos réponses à tous,
pour répondre à czh, oui c'est un environnement d'execution et ce n'est pas interprété et ce n'est ni en bytecode.
je répond en particulier à el muchacho , en fait je sais bien que le java est super optimisé par pas mal de personne depuis pas mal de temps, mais en fait l'idée est de faire quelque chose de différent qui passe outre certaines contraintes et qui permettrait peut etre d'etre un peu plus rapide, cependant je n'ai pas la preuve de ce que j'avance et justement je cherche à savoir si le java pour des programes simple arrive à etre executé quasi aussi rapidement que du C++(meme si j'ai lu des docs ou le java allait dans certains cas plus vite que le C++), car je ne pense pas qu'on puisse faire beaucoup mieux que du C++( si le code à la base est bien optimisé), et car théoriquement dans mon projet (qui est je l'avoue assez compliqué) le language exécuté serait pas loin aussi rapide que du C++ , enfin je veux dire par la que tous serait compilé et on pourrait utilisé du mmaping et ça serait sécurisé,y'aurait juste des instructions pour sécuriser sur le retour de fonction (qui ferait perdre un tout petit peu de temps)
 
voila, peut etre avez vous un peu mieux compris l'idée,
je vais faire des mini benchmark entre du java et du C pour voir un peu la différence d'exécution,
encore merci


Message édité par nicobzz le 11-02-2008 à 20:40:42
Reply

Marsh Posté le 12-02-2008 à 12:29:30    

c'est vraiment du temps perdu, de plus tu me sembles parler sans connaître. Tu dis avoir des astuces, mais c'est vrai que personne n'y a pensé.  
 
Je n'ai qu'un conseil, arrête et concentre toi sur un projet qui sera vraiment productif.
 
Enfin bref, perd ton temps.
 
Ce n'est pas le langage qui fait que l'un est plus rapide que l'autre, c'est le compilateur et l'algorithmie.

Reply

Marsh Posté le 12-02-2008 à 20:01:12    

matrixise a écrit :

c'est vraiment du temps perdu, de plus tu me sembles parler sans connaître. Tu dis avoir des astuces, mais c'est vrai que personne n'y a pensé.  
 
Je n'ai qu'un conseil, arrête et concentre toi sur un projet qui sera vraiment productif.
 
Enfin bref, perd ton temps.
 
Ce n'est pas le langage qui fait que l'un est plus rapide que l'autre, c'est le compilateur et l'algorithmie.


Bon, deja on dit "algorithmique"  :o  
Ensuite, je vois vraiment au nom de quel droit tu dis a nicobzz quoi faire de son temps. Il a une idee de projet, il est venu pour recueillir des avis sur le plan technique, et pas pour qu'on lui casse son projet.  
Se lancer dans un tel projet, meme si ca se solde par un echec, va lui apprendre plein de trucs, je vois pas non plus comment tu peux te permettre de juger si c'est productif ou non :heink:  
 

matrixise a écrit :

tu me sembles parler sans connaître


Je vois pas ce que ca peut nous foutre que t'aies cette impression la.
 
Ensuite, concernant la rapidite d'execution, ce que tu dis est tout simplement faux. Un compilateur ne peut pas tout deviner. Et lorsqu'on cherche a repousser les limites d'une machine donnee, ca n'est pas Java qu'on utilise.

Reply

Marsh Posté le 12-02-2008 à 20:49:57    

merci pour ton soutient Ace 17, c'est vrai que c'est assez desagreable de se faire faire la moral sur le fait que je dois arreter alors meme que je suis venu pour avoir un avis sur ce point.
 
Sur ce j'ai fait des mini benchmark:
 
public class benchmark_pers {
 
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int i;
  int c;
  char[] a= new char[5];
  System.out.print("étape 1\n" );
  for (i=0;i<1000000000;i++){
   c = i%5;
   a[c]=(char) i;
  }
   
  System.out.print("étape 2\n" );
 }
   
}
 
et aussi en c++ et c'est impressionant à quel point java est rapide, voir meme presque plus rapide,(donc continuer de programmer en java) donc sur mon projet on ne peut donc pas gagner beaucoup en performance par rapport au java, par contre le java est toujours long à se lancer ce qui ne serait pas le cas dans mon projet si il était terminé, je laisserais donc mon projet sur le site de source forge voir si des personnes s'y interressent, et puis comme j'ai pas vraiment le temps en ce moment je vais pas trop m'y mettre.
 
Merci

Reply

Marsh Posté le 12-02-2008 à 21:01:10    

Hum, t'appelles ça un benchmark ? C'est a peu près aussi naif et inutile que d'utiliser glxgear pour tester les capacités d'une carte graphique dernière génération...

Reply

Marsh Posté le 13-02-2008 à 21:51:27    

c'est magnifique!
et dieux créa l'homme ... ou l'homme créa dieux ... je ne sais plus
 
;)
 
non sérieusement nicobzz, si je comprends pas trop mal tu veux juste faire un bench et non une machine virtuel ? is it?
mais si tu comptes essayé de testé des perfs avec ce genre de code cela ne va pas être crédible ;)
 
post un peu plus svp histoire de se faire une idée

Reply

Marsh Posté le 13-02-2008 à 22:04:05    

Bonjour,
 
java est peut-etre marginalement plus lent que le C ou le C++, mais ce n'est a mon avis pas si important car, a quelques applications pres, (jeux videos, algorithmie de programmes de recherche), le code n'est pas le facteur limitant pour les performances. La vitesse du disque dur, de la base de donnees, ou meme d'internet / du reseau ralentiront beaucoup plus ton programme. Par contre, la consommation memoire de java peut-etre un probleme dans certains cas.  
 
De plus, le C ansi est parfaitement multi-plate-formes. Il est simplement difficile a utiliser par des "debutants" (les joies des salades de pointeurs), et c'est sans doute pour cela que le language est de plus en plus delaisse.
 
Enfin, pour terminer, meme si tu inventes un nouveau concept genial pour un language facile a utiliser et rapide, l'effort principal sera de developper des APIs qui rendent ton language utilisable. Et la, tu en as pour quelques centaines d'annees. Personne n'utilisera ton language s'il n'offre pas des APIs graphiques, de reseau, d'acces aux bases de donnees, de multi-thread....  
 

nicobzz a écrit :

bonjour,  
 
En ayant en tête que le java était relativement lent par rapport à d'autres languages de programation, je me suis mis en tete de débuter un projet de language qui puisse marcher sur plusieurs platforms et qui puisse être plus rapide que j'ai mis sur source forge, cependant j'ai entendu parler des améliorations du java, et que certaines fonctions n'étaient pas émulés mais compilée puis executées.j'ai fait un mini benckmark et ça a l'air de tourner rapidement.Cependant j'ai toujours espoir de faire un projet interressant car je suis sûr que certaines astuces utilisées dans mon projet permettent d'etre tres rapide, je pense.
 
voila je voulais savoir dans quel domaine de programation java était rapide ou lent, par rapport à une référence que serait le C ou le C++:
dans les boucles, les tableux( je sais que chaque fois que java accede à un tableau il doit verifier qu'il est bien dans les bornes) etc...
 



---------------
Un blog sur le Japon: http://uchimizu.blogspot.com/
Reply

Marsh Posté le 13-02-2008 à 23:05:03    

uchimizu a écrit :

De plus, le C ansi est parfaitement multi-plate-formes.

Ca c'est en theorie. En pratique, si tu fais pas gaffe, t'as vite fait d'ecrire du code C qui ne resiste pas a un changement d'architecture (endianness, alignements memoire) ou de compilateur (ordre d'evaluation) ...  
 

Citation :

Enfin, pour terminer, meme si tu inventes un nouveau concept genial pour un language facile a utiliser et rapide, l'effort principal sera de developper des APIs qui rendent ton language utilisable. Et la, tu en as pour quelques centaines d'annees. Personne n'utilisera ton language s'il n'offre pas des APIs graphiques, de reseau, d'acces aux bases de donnees, de multi-thread....  

C'est quoi le rapport avec la discussion? Bon, j'ai pas d'actions chez nicobzz ... mais meme s'il est manifeste qu'il y a un certain manque de recul de sa part, ca me saoule de voir des gens dont les arguments n'ont pas d'autre fonction que de decourager les autres ...

Reply

Marsh Posté le 14-02-2008 à 14:14:52    

oui je sais bien qu'il faut programmer des APIs qui rendent utilisable les programmes qu'on fait dessus, mais ça j'imaginais pas le programer seul bien sur, mais de toute facon l'interet que j'avais dans mon projet c'était qu'il puisse etre plus rapide que java car dans le passé java était lent, cependant je me suis rendu compte que java était deja tres rapide et qu'on pouvait surment pas faire mieu, donc il garde pas beaucoup d'interet à part le fait de démarrer plus rapidement, c'est pour ça que je laisse le code source à disposition si un jour des personnes s'y interressent


Message édité par nicobzz le 14-02-2008 à 14:19:16
Reply

Marsh Posté le 14-02-2008 à 18:42:12    

uchimizu a écrit :


La vitesse du disque dur, de la base de donnees, ou meme d'internet / du reseau ralentiront beaucoup plus ton programme.


Pas besoin d'aller jusque là : la vitesse du cache et de la RAM ca suffit. Vous sortez d'où franchement [:pingouino]

Reply

Marsh Posté le 23-02-2008 à 19:01:32    

Joel F a écrit :


c'ets un peu fort comme du roquefort :/ C++ et autant objet que Java  que je sache [:pingouino] et à part les mécanismes d'introspection - qui je dois l'avouer sont alléchant pour certains types de problèmes - j'aimerais bien savoir ce que tu reproches à C++ sur ce point.
...


 
Je me permet de répondre.
Je crois que tu n'as pas du tout compris la phrase de czh "Java intègre des notions de programmation moderne et plein d'autres trucs (outils, framework, etc.)".
 
Ce qu'il a voulu dire, c'est qu'avec tous les outils, librairie, frameworks, développé pour java, tu n'as pas besoin de ré-inventer la roue carrée à chaque projet.
Je serais tenter de comparer stdlib.h à J2EE, mais ca serait méchant.

Reply

Marsh Posté le 23-02-2008 à 20:27:12    

Ace17 a écrit :


Bon, deja on dit "algorithmique"  :o  
Ensuite, je vois vraiment au nom de quel droit tu dis a nicobzz quoi faire de son temps. Il a une idee de projet, il est venu pour recueillir des avis sur le plan technique, et pas pour qu'on lui casse son projet.  
Se lancer dans un tel projet, meme si ca se solde par un echec, va lui apprendre plein de trucs, je vois pas non plus comment tu peux te permettre de juger si c'est productif ou non :heink:  
 


Et moi je dis ceci : http://fr.wikipedia.org/wiki/Algorithmie
 

Ace17 a écrit :


Je vois pas ce que ca peut nous foutre que t'aies cette impression la.


Simplement parce que son projet bien que louable possède un code aussi bien écrit que si on le faisait écrire par un débutant.
 

Ace17 a écrit :


Ensuite, concernant la rapidite d'execution, ce que tu dis est tout simplement faux. Un compilateur ne peut pas tout deviner. Et lorsqu'on cherche a repousser les limites d'une machine donnee, ca n'est pas Java qu'on utilise.


Et je réponds aussi http://fr.wikipedia.org/wiki/Algorithmie Il suffit de relire ce que j'ai écrit dans le thread.
 
PS : As-tu été voir le code du projet ? OUI ou NON ? moi OUI.
 
Regarde et dis moi si c'est compréhensible.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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