Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/01/2009, à 02:47

binoua

python vs Java

Bonjour,

On dit souvent que python est un tres bon langage DE SCRIPT.
Genre python ne sert a rien d'autre que parser des fichiers. On lui reproche souvent d'être particulièrement lent.

J'ai voulu faire un petit test de base sur la lecture/écriture de fichier. Les codes qui suivents servent à copier le contenu d'un fichier dans un autre fichier. J'ai effectué les tests sur un fichier de 100Mo et le résultat est sans équivoque : Java gagne haut la main.

J'ai essayé de coder les deux programmes de manière équivalente.
Votre avis. Ces codes sont-ils bien equivalents ? Java est-il vraiment meilleur sur ce genre de tache ? Meilleur dans l'ensemble ?

Code Java :

import java.io.*;

class Copie {
        public static void main(String[] args){
                int tailleBlocs = Integer.parseInt(args[0]);
                
                try {
                        FileInputStream inStream   = new FileInputStream("toto.txt");
                        FileOutputStream outStream = new FileOutputStream("titi.txt");
                        
                        byte[] buf = new byte[tailleBlocs];
                        
                        int c;
                        while ((c = inStream.read(buf)) != -1){
                                outStream.write(buf);
                        }
                        
                        
                        
                        inStream.close();
                        outStream.close();
                }
                catch (Exception e) {}
        }
}

Et en python :

#!/usr/local/bin/python3.0

from sys import argv


tailleBlocs   = int(argv[1])


inStream  = open("toto.txt","r")
outStream = open("titi.txt","w") 

buf = inStream.read(tailleBlocs)
while (buf != "") :
        outStream.write(buf)
        buf = inStream.read(tailleBlocs)

inStream.close()
outStream.close()

Hors ligne

#2 Le 17/01/2009, à 04:16

Respawner

Re : python vs Java

En Java t'as maintenant un super moyen pour faire une copie de fichier ;-)

	public static void copyFile(File source, File destination) throws IOException {
		FileChannel in  = null;
		FileChannel out = null;

		in  = new FileInputStream(source).getChannel();
		out = new FileOutputStream(destination).getChannel();

		// Copy the source to the destination
		in.transferTo(0, in.size(), out);

		// Close input / output
		in.close();
		out.close();
	}

J'ai pas fait de test mais je code un petit outil en ce moment (certains connaissent peut-être), pour découper un fichier de 190 Mio environ en plusieurs je met environ 10 secondes (avec gestion d'une GUI, progress bar et tout).

Dernière modification par Respawner (Le 17/01/2009, à 04:17)

Hors ligne

#3 Le 17/01/2009, à 10:01

aleph2

Re : python vs Java

> binoua

> On dit souvent que python est un tres bon langage...

Python *est* un très bon langage.

> ... DE SCRIPT

L'interpréteur Python ne se nourrit *que* de scripts.

> Genre python ne sert a rien d'autre que parser des fichiers

Non. Ex. http://spinecho.ze.cx/ et bien d'autres.

> On lui reproche souvent d'être particulièrement lent.

Particulièrement ? Non.
Plus lent que du C, évidemment que oui.
Est-ce que cette relative lenteur justifie-t-elle une non utilisation de Python ? Réponse plus complexe.

> J'ai voulu faire un petit test de base sur la lecture/écriture de fichier. Les ...

C'est ici que le choses commencent à devenir un peu plus délicates. Je vois que tu débutes avec Python 3 (ce qui est une bonne chose). Si tu avais effectué le même test en comparant Python 2.* et Python 3.0, tu aurais vu que Python 2 est plus rapide. Un facteur 10 ne m'aurait pas étonné.  Tout ceci a été et *est* testé, analysé. voir http://mail.python.org/mailman/listinfo/python-dev .

Ce qu'il faut savoir. Dans Python 3, tout la partie "IO" a été réorganisée. Probablement, le plus gros changement entre Python 2 et 3. Elle est en Python fonctionnelle et restera dans son fonctionnement ce qu'elle est. Dans Python 3.0, tout ceci est écrit en Python et sera / *est* actuellement réécrit en C. (normallement prévu pour Python 3.1).

> Python vs Java

Je ne me prononce pas. Par contre, entre Python 2 et 3, l'indentation est et reste de *quatre espaces*.

---

Python 3 est et a été mis en place, il est fonctionnel et restera ce qu'il est. Comme il est écrit sur tous les bons forums et les mailings-lists des développeurs (Python core et autre libs), il reste encore beaucoup de place pour l'optimisation.

#4 Le 17/01/2009, à 10:57

manatlan

Re : python vs Java

python language de scripting ... non
il y  plein de programmes avec des GUI/IHM, à commencer par bittorrent (le client officiel de jadis, deluge, ...), gajim, jbrout ;-), chandler ...(pas mal d'outils dans l'ubuntu aussi)
matte aussi les jeux réalisés en python, que ce soit avec pygame, pyglet ou pyopengl ... on est très très lon du parsage de fichiers ;-) ...

et puis, en python tu peux faire du java .. l'inverse n'existe pas ;-)
si tu prends Jython, tu pourras générer des class/jar que tu pourra ensuite réutiliser dans tes progs java ;-) (idem en .net/mono avec ironpython)


"Oui, oui."
                -- Shakespeare (Richard III, Acte I, Scène IV)

Hors ligne

#5 Le 17/01/2009, à 11:58

binoua

Re : python vs Java

Respawner
J'ai testé ton code et sur ma machine sur un fichier de 100 Mo je n'ai pas vu de difference est terme de temps d'execution avec mon code.

Aleph2
Je ne suis pas d'avis qu'il faut réduire Python à un simple langage de script. C'est juste que dans ma formation les informaticiens répète ca sans arret du coup j'ai l'impression que c'est l'avis de la majorité de la population. Bien que moi aussi j'ai fait des choses tres differentes en Python et que j'utilise de très bon programmes codés en Python  (je pense notamment à Pymol, logiciel de visualisation de molécules en 3D).

J'ai fait le test avec le même code mais en utilisant Python 2.5. Tu avais vu juste.
Avec Python 3.0 il fallait compter 40 secondes contre 2 secondes seulement avec 2.5. Effectivement il y a de la place pour l'optimisation !

Bilan pour ce genre de chose Python 2.5 est equivalent à Java en terme de temps d'exécution.
En temps de développement Python est largement meilleur.

-----------------
Sinon j'apprends qqc. Apparemment tu dis qu'en Python le standard est une indentation de 4 espaces ?

Hors ligne

#6 Le 17/01/2009, à 12:21

Jean-Julien

Re : python vs Java

J'ai travaillé longtemps sur une programme personnel de protection d'archives.
Passé à Linux, j'ai réécris le programme pour qu'il tourne sur ce système.
---
J'ai d'abord utilisé le Python.
Puis je me suis renseigné pour résoudre certains problèmes techniques et l'ai réécrit en C.
---

Verdict :
----------

Dans mon cas le le C est 56 fois plus rapide que le Python.

!!! ET POURTANT !!! ---> L'usage a voulu que ça soit la version en Python qui reste opérationnelle et soit totalement finalisée.

Motifs :

- Clarté du code.
- Portabilité.
- Maintenance (En moyenne une modification tous les 2 ans...)
- Transparence (Le "client" sait ce qu'il a en mains, il peut lire le code et agir directement dessus).

- Et, je l'espère, pérénnité. Mon envie étant d'avoir à m'occuper d'un langage, sans devoir me plier et me mettre à jour à chaque modification ou évolution d'une machine.

Le destin a voulu que mon programme soit adapté au langage machine (la première version était en assembleur sur Amiga 500..., avec Devpac2). Il manipule les octets au niveau de la mémoire et fait vraiment tout ce qu'il peut pour mettre de bâtons dans le roues de Python.
Mais c'est un cas isolé.

Dès qu'il faut manipuler des données à un plus haut niveau (ce qui est quasi toujours le cas, Python est une merveille).

Persnnellement, je ne suis pas programmeur. Je suis électricien.
Besoin d'une application ? -> Python et peu de temps après, ça tourne.
C'EST EFFICACE !!!

Et si le chronomètre penche parfois en faveur des "concurrents", ce sont des cas extrêmes.
Le chronomètre penche le plus souvent du côté de Python en ce qui concerne le temps de développement et de mise au point.

Moi, j'aime bien le Python. Pas par subjectivité, mais de plus en plus, au jour-le-jour, à force d'en apprendre et de l'utiliser 'dans la vraie vie".

-JJC-

Dernière modification par Jean-Julien (Le 17/01/2009, à 12:23)

Hors ligne

#7 Le 17/01/2009, à 14:31

binoua

Re : python vs Java

Peut-on poser la question philosophique suivante : les informaticiens se sentent-ils mal lorsqu'un langage est accessible au plus grand nombre ?

Sans vouloir être méchant évidemment. Je me demande simplement pourquoi les informaticiens avec une formation d'informaticien ont une telle aversion pour Python

Hors ligne

#8 Le 17/01/2009, à 14:49

TatrefThekiller

Re : python vs Java

Je pense pas que faire des programmes équivalents soit une bonne idée. Si tu veux comparer les 2 langages, il faut trouver la meilleure méthode pour copier un fichier dans chaque langage : il existe sûrement un truc du genre :

File.copy("fichier1", "fichier2");

Une fois que le code est fixé, tu peux jouer sur les 15.000 options de la JVM (voir changer de JVM...). Et c'est pareil avec python et les modules comme psyco.
Bref, c'est pas facile à mon avis de faire un comparatif objectif.

Hors ligne

#9 Le 17/01/2009, à 15:09

geenux

Re : python vs Java

Python plus lent que java ? Sans doute, mais j'ai envie de dire et alors ? Surtout que si on regarde d'autres facteurs, du genre consommation de ram (python gagne haut la main, pas d'énorme machine virtuelle à charger).
Personnellement je développe en c++, plus par (je fais partie d'un projet en c++), et j'apprécie ce langage pour le contrôle sur ce qu'on fait (pointeurs ...) qui sont automatiques en python. Maintenant, si j'ai un petit programme rapide à faire en plus, je le fais généralement en python.

Hors ligne

#10 Le 17/01/2009, à 15:12

Angelius

Re : python vs Java

Pour ma part, mettre en opposition ruby et python est plus pertinent mais je pense que java, c et python sont suffisement différent pour avoir leur propre domaine d'application.


Un moteur de recherche qui respecte votre vie privée ?--> Ixquick
Une messagerie instantanée libre et décentralisée ?--> Jabber
Ecouter et télécharger de la musique libre ?--> Jamendo

Hors ligne

#11 Le 17/01/2009, à 15:14

binoua

Re : python vs Java

Disons que je pars du postulat que si je fais exactement les memes operations dans chaque langage j'aurais un element de comparaison sur la vitesse pure.

Je veux dire que si la methode la plus optimisee dont tu parles lit et ecrit par bloc de 100 bytes en Java on ne peut pas comparer si la methode equivalente en Python le fait par bloc de 1000 bytes.

Hors ligne

#12 Le 17/01/2009, à 15:17

binoua

Re : python vs Java

Pour ma part, mettre en opposition ruby et python est plus pertinent mais je pense que java, c et python sont suffisement différent pour avoir leur propre domaine d'application.

Justement je pense qu'un bon langage est aussi un langage polyvalent.

Hors ligne

#13 Le 17/01/2009, à 16:02

human enemy

Re : python vs Java

binoua a écrit :

Sans vouloir être méchant évidemment. Je me demande simplement pourquoi les informaticiens avec une formation d'informaticien ont une telle aversion pour Python

Je pense que c'est de moins en moins vrai et qu'un nombre croissant d'informaticiens professionnels codent en Python.

Juste 2 exemples : Fluendo développe Elisa en Python et regarde en quoi est codé une bonne partie des applis de  Canonical.

Fais d'autres recherches sur le net et tu seras étonné à coup sûr de la quantité de projets codés en Python.

Pour moi il y a clairement une tendance forte depuis qqes années. Maintenant, certains diront que ce n'est pas une tendance mais une "mode" et que les "modes" sont faites pour être démodées.

L'argument numéro 1 de Python sur lequel il est sans équivalent (à ce jour) c'est la "Productivité".

EDIT: typos

Dernière modification par human enemy (Le 17/01/2009, à 16:03)


<linux user>463160</linux user>
str = g_strdup_printf ("ubuntu user : %d",20328);

Hors ligne

#14 Le 17/01/2009, à 16:09

human enemy

Re : python vs Java

Personnellement, si je devais ...

... faire une bibliothèque elle serait en C ou en C++
... faire une Application [1] elle serait en Python

[1] Oui je veux bien dire une "Application" pas un script de 100 lignes


<linux user>463160</linux user>
str = g_strdup_printf ("ubuntu user : %d",20328);

Hors ligne

#15 Le 17/01/2009, à 16:19

binoua

Re : python vs Java

Je suis d'accord que la productivité c'est important mais si je devais citer un contre exemple ce serait Windows : on veut faire un programme rapidement et finalement on fait n'importe quoi.

Dernière modification par binoua (Le 17/01/2009, à 16:20)

Hors ligne

#16 Le 19/01/2009, à 10:25

jofab

Re : python vs Java

binoua a écrit :

Peut-on poser la question philosophique suivante : les informaticiens se sentent-ils mal lorsqu'un langage est accessible au plus grand nombre ?

Sans vouloir être méchant évidemment. Je me demande simplement pourquoi les informaticiens avec une formation d'informaticien ont une telle aversion pour Python

Bonjour, ma reponse n'engage que moi et pas les autres informaticiens... Je n'ai meme pas remarque plus que ca que les informaticiens n'aiment pas python.

J'ai pas travaille longtemps avec python et je n'ai pas trop envie de pousser plus loin. Pourquoi ? la reponse est assez simple : Avec python on code vite, c'est vrai. Le code est plus concis qu'en C c'est vrai aussi. Il y a plein de choses bonnes mais pour moi ca reste un script (attention, pour moi, un script ne se restreint pas à parser des fichiers). Tres evolué, certe, mais ca ne doit pas etre utilise pour des trops gros codes à moins d'etre tres complet dans la doc technique sinon le code est difficile à maintenir, surtout pour qqn qui ne l'a pas ecrit. Pourquoi suis-je aussi tranché : On s'est rendu compte que ce qui est important pour comprendre un programme c'est prioritairement les données (ce qui est central en objet) et en python, on ne connait pas, à la lecture du code, le type des données... Une partie de l'information importante n'est pas visible au 1er coup d'oeil. Donc si on a une fonction que l'on veut utiliser : soit la doc est bien faite, soit il faut lire le code de la fonction pour savoir comment l'utiliser...

A comparer python et Java : J'ai travaille presque 1 an en Suisse ou j'ai du remprendre une appli java. 1/3 de javadoc etait en anglais 1/3 en allemand, et 1/3 pas commenté. Ce qui revient pour moi à dire que seulement 1/3 etait commenté big_smile. Je n'ai eu aucun probleme pour m'immerger dans le code meme dans les parties non documentées.
Par la suite, j'ai travaille 1 an sur une appli Python (moyennement documentée, on va dire entre 1/3 et 1/2) et meme à la fin de l'année c'etait toujours une grande souffrance. Chaque fois que je devais reutiliser une fonction, bien c'etait impossible de savoir facilement ce qu'il fallait vraiment passer en param, idem pour corriger les fonctions. Sans la doc, j'etais oblige de regarder le code de la fonction... J'ai souvent etait tenter de re-coder certain morceau plutot que de passer du temps à repasser toutes les fonctions (ce qui allait en general bcp plus vite hmm).

C'est mon experience, peut etre que j'ai pas poussé assez, peut etre que les gars qui ont code l'appli java codaient mieux que ceux qui ont coder l'appli python (mais dans l'ensemble je ne crois pas). Je crois vraiment que c'est vraiment du à la structure de Python qui malgre tout ses avantages l'handicap sévèrement. Parfois, certaines contraintes fortes s'avèrent etre des avantages comme par exemple le fait, en java, de mettre une classe dans un fichier qui porte son nom. En python ca m'est arrivé de tourner un moment avant de localiser le code que je cherchais. En Java jamais. (Ca ne veux pas dire que Java est la solution, j'aime bien Java mais il y a des trucs assez redhibitoire comme l'absence de types non signés...)

Ma conclusion : Python est bien mais c'est comme tout, il faut savoir l'utiliser au bon moment. En tout cas je ne coderai pas une appli totalement en python. Je pense que c'est bien pour realiser certains tests rapides (en recherche par exemple) et relativement court car on va vite à developper, ou des morceaux de prog. tres specifique.

Donc pour repondre à ta question : j'ai eu du mal à identifier chez moi ce qui ne me plaisait pas en python. Je pense avoir trouve (mais il y a peut etre d'autres choses). En tout cas, ca ne me gene pas si c'est accessible à un grand nombre... J'espere que ca repond un peu à ta question. J'espere aussi n'avoir froissé personne et si qqn à d'autres elements ou n'est pas d'accord, ca m'interesse d'avoir leur avis...

Cordialement,
ps : il y a un autre truc (bcp moins grave), c'est que les threads de python ne sont pas preemptifs et ca c'est aussi un peu frustrant:))

Hors ligne

#17 Le 06/10/2010, à 20:41

LAS

Re : python vs Java

22 mois apres cette discussion soit lancee, pouvez vous relancer le debat sur ces deux languages ? y -t- il des evolutions des deux cotes ?
En tant que developpeur PHP, j'aimerais bien me lancer dans le developpement d'application bureau et mobiles, je veux coder des apps pour android, sauf que c'est possible qu'en JAVA, en meme temps PYTHON parait plus simple a apprendre.
Continuez le debat SVP smile


First they ignore you, then they laught at you, then they fight you, then you win.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ubuntu 15.10 | Laptop Asus X550L

Hors ligne

#18 Le 06/10/2010, à 22:15

Jules Petibidon

Re : python vs Java

Python n'est pas plus facile à apprendre que Java.
Ou plutôt Java n'est pas plus difficile à apprendre que Python.
Et aucun de ces langages n'est plus compliqué que PHP (j'irais même jusqu'à dire que c'est très proche, au contraire de C ou C++ ou d'autres concepts plutôt compliqués interviennent), si tu te démerdes à peu près avec la programmation orientée objet (surtout pour Java).
Et si tu ne maitrises pas la POO, Java peut être un très bon moyen de t'y former. Ce qui te servira également en PHP (une fois qu'on a tâté de la POO, on trouve la programmation procédurale beaucoup plus complexe)
Après, si tu as dans l'idée de créer une interface graphique, sache que c'est juste très chiant, quelque soit le langage.

Hors ligne

#19 Le 07/10/2010, à 13:53

jofab

Re : python vs Java

ps : Il faudrait dire aussi que pour comparer la vitesse d'execution, il faudrait utiliser autre chose que des appels systemes... smile

Hors ligne

#20 Le 07/10/2010, à 14:24

LAS

Re : python vs Java

Sur cette page j'ai trouve une comparaison entre python java et C++, c intéressant.


First they ignore you, then they laught at you, then they fight you, then you win.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ubuntu 15.10 | Laptop Asus X550L

Hors ligne

#21 Le 07/10/2010, à 17:06

bipede

Re : python vs Java

Jules Petibidon a écrit :

Après, si tu as dans l'idée de créer une interface graphique, sache que c'est juste très chiant, quelque soit le langage.

En python j'utilise wxPython pour créer mes interfaces graphiques, et je trouve au contraire que c'est on ne peut plus simple et rapide... Je n'utilise même pas de RAD, rien qu'un éditeur de texte évolué (geany).

Si tu veux avoir une idée des interfaces qu'on peut réaliser tu n'as qu'à cliquer dans ma signature...


Desktop: MSI - Intel® Core™ i5-3330 CPU @ 3.00GHz × 4 - RAM 8 go- Kubuntu 21.04 - Système sur SSD 64 Go - /home sur HDD 500 Go.
Laptop: DELL Inspiron-15 3567 - Intel® Core™ i5-7200 CPU @ 2.50GHz × 4 - RAM 8 go - HDD 1 To - Ubuntu 20.10 avec /home séparé.

Mon site: Les contributions du bipède

Hors ligne

#22 Le 08/08/2011, à 14:59

nane007

Re : python vs Java

jofab a écrit :

ps : Il faudrait dire aussi que pour comparer la vitesse d'execution, il faudrait utiliser autre chose que des appels systemes... smile

Comme quoi par exemple ?

Hors ligne

#23 Le 20/12/2017, à 14:42

bemous

Re : python vs Java

Bonjour à tous,
qu'en est-il de ce sujet en décembre 2017? Où en est on avec la comparaison de ces deux langages?


Utlrabook Acer Aspire S7, Core I5, 4go Ram , Os Ubuntu 15.10 x64
-----------------
HP Pavilion dm4-2180us, OS: Ubuntu 14.04 64 bits + Win8 Pro 64 bits,
Core I5-2430M CPU @ 2.40Ghz x 4, Intel SandyBrige Mobile Graphics, 6 Go RAM

Hors ligne