Seite 1 von 1

Ist Python schneller als Java ?

Verfasst: Mittwoch 26. Juli 2006, 21:47
von Solid Snake
Hi
Ich würde mal gerne wissen, ob Python schneller ist als Java.
Und wo wir schon dabei sind: Kann man mit Python auch Hardwarenah programmieren, was mit Java garnicht möglich ist ?


Ich stelle diese frage, weil ich mich zwischen den beiden Sprachen entscheiden muss.. (also bitte ernst nehmen^^)




MfG
Solid Snake ;)

Re: Ist Python schneller als Java ?

Verfasst: Mittwoch 26. Juli 2006, 22:07
von DatenMetzgerX
Solid Snake hat geschrieben:Kann man mit Python auch Hardwarenah programmieren, was mit Java garnicht möglich ist ?
Hardware nah. Naja, du kannst mit C++ nachhelfen und das nicht Hardwarenahe in python schreiben ;)

Aber für Hardware nah würde ich dir allg. C++ empfehlen weil das einiges schneller ist als Python

Verfasst: Mittwoch 26. Juli 2006, 22:22
von BlackJack
C++ ist nicht schneller als Python. Umgekehrt auch nicht. Gleiches gilt für Java. Das sind Sprachen. Eine Sprache kann nicht schnell oder langsam sein. Konkrete Implementierungen können das. Da kommt es dann aber auch wieder auf das zu lösende Problem und den verwendeten Algorithmus an welche die Nase vorn hat.

Und auch nicht zu unterschätzen ist die Zeit die man benötigt um eine effiziente oder auch nur funktionierende Lösung umzusetzen. Python-Implementierungen mögen zwar langsamer sein als Assembler-Code der das gleiche Problem löst, aber ich würde lieber Python schreiben und lesen als Assembler.

Letztendlich gibt es nur die Frage "ist es schnell genug". Und da hat Python den Vorteil (IMHO) das man sehr schnell lesbare Prototypen schreiben kann und einfach messen kann ob's reicht. Und wenn nicht, dann lassen sich die kritischen Teile, und nur die, in Pyrex oder C umschreiben und es passt wieder.

Verfasst: Mittwoch 26. Juli 2006, 22:57
von Solid Snake
Erstmal Danke für eure Antworten^^

Mit der Schnelligkeit meinte ich eigentlich die Ausführungszeit..
Wenn man z.B. ein Java Applikation öffnet, dauert es lang, bis alles fertig geladen wird und wenn man Java Spiele spielt, kann es meistens sehr stark ruckeln..

Und da ich noch nie ein reines Python Spiel gespielt habe, kann ich nicht wissen, ob die Python Spiele auch so ruckeln wie die Java Spiele und ob die Applikationen
auch sehr lange brauchen, bis die ganzen Menüs und Buttons fertig gelanden werden.


Als ich gerade ein bischen am googlen war, habe ich folgendes gefunden:
http://ambient.2y.net/leif/projects/python-vs-java/
(ein Benchmark test zwischen Java und Python)


Aber ich gebe BlackJack recht. Es kommt eigentlich nicht auf die Sprache an, sondern auf den Programmierer und seine Techniken.
Wenn man alles sehr optimiert, kann es auch fast so schnell werden wie die kompilierte Sprachen..
Aber ich frag mich, ob das auch bei den Grafik Demos so ist, weil die Grafiken nicht optimiert werden können, wenn sie schon
mit 16Bit Farbe angezeigt werden (256 Farben würden ecklig aussehen...)
und trotzdem arg ruckeln.. (die Applikationen haben ja nur Buttons und Co. und die können schneller geladen werden als diverse Grafiken).



@DatenMetzgerX:
Hardware nah :P (sorry, dass ich es vorhin zusammen geschrieben habe^^" solche Fehler passieren mir ab und zu mal..).
Ich hatte eigentlich vor, kleine Tools zu programmieren, mitdem ich dann auf meine Systemdaten zugreifen kann, damit ich Infos bekommen
oder mein CD-Rom Laufwerk steuern kann.
Für solche sachen, würde ich auf C++ verzichten, weil es sehr lange dauern würde, bis ich's fertig hab... deswegen habe ich nach
Programmiersprachen gesucht, mitdem ich meine Sachen schnell programmieren kann, ohne Probleme mit dem Syntax zu haben.. und da
hab ich dann auf Ruby und Python gestossen, aber am Ende habe ich mich doch noch für Python entschieden.
C++ war für mich ein Alptraum und gleichzeitig eine Zeitverschwendung, als ich mich damit intensiv beschäftigte (früher mal)...




MfG
Solid Snake

Verfasst: Donnerstag 27. Juli 2006, 00:23
von Python 47
Das hier ist vielleicht auch noch interresant für dich

:arrow: [wiki]Python#WelcheVorUndNachteileHatPython[/wiki]

Verfasst: Donnerstag 27. Juli 2006, 07:47
von mawe
Hi!

Auch wenn viele nichts von Benchmarks halten, schau vielleicht mal hier vorbei: http://shootout.alioth.debian.org/

Gruß, mawe

Verfasst: Donnerstag 27. Juli 2006, 08:46
von BlackJack
Solid Snake hat geschrieben:Und da ich noch nie ein reines Python Spiel gespielt habe, kann ich nicht wissen, ob die Python Spiele auch so ruckeln wie die Java Spiele und ob die Applikationen
auch sehr lange brauchen, bis die ganzen Menüs und Buttons fertig gelanden werden.
Ein "reines" Python Spiel wirst Du wohl nicht finden. Wenn Du ein Spiel in Python schreiben möchtest, dann wird das wahrscheinlich auf pygame und damit auf der SDL Bibliothek (2D) oder auf eine der Python OpenGL Engines (2D/3D) zurückgreifen. Also in beiden Fällen steckt hinter den grafiklastigen Teilen C oder C++ und Hardware.

Wie schnell eine GUI "da" ist, hängt vom verwendeten GUI Toolkit ab. Aber die gängigen Tkinter, PyGTK und wxPython sind eigentlich recht flott. Die verhalten sich zu Python ja auch eher wie das SWT zu Java.

Verfasst: Donnerstag 27. Juli 2006, 19:43
von birkenfeld
Solid Snake hat geschrieben: Hardware nah :P (sorry, dass ich es vorhin zusammen geschrieben habe^^" solche Fehler passieren mir ab und zu mal..).
Ich hatte eigentlich vor, kleine Tools zu programmieren, mitdem ich dann auf meine Systemdaten zugreifen kann, damit ich Infos bekommen
oder mein CD-Rom Laufwerk steuern kann.
Ich würde sagen, das Adjektiv "hardwarenah" schreibt man so.
Was tu allerdings tun willst, ist eher Zugriff auf das Betriebssystem, denn normalerweise weiß dieses am besten, wie man dein CD-Laufwerk steuert. Wenn du unter Windows programmierst, dann musst du eben mit dem Windows API arbeiten (da gibts Python-Packages für).

Verfasst: Donnerstag 27. Juli 2006, 22:32
von Leonidas
Solid Snake hat geschrieben:Und da ich noch nie ein reines Python Spiel gespielt habe, kann ich nicht wissen, ob die Python Spiele auch so ruckeln wie die Java Spiele und ob die Applikationen
auch sehr lange brauchen, bis die ganzen Menüs und Buttons fertig gelanden werden.
Für ein in Python+Pygame (SDL) geschriebenes Spiel kannst du dir mal Solarwolf angucken.

Ich nutze als Jabber-Client das in Python geschriebene Gajim und es funktioniert wunderbar schnell auf meinem schon etwas älterem Computer.

Verfasst: Freitag 28. Juli 2006, 00:13
von Solid Snake
hm.. was denn nun O_o Hardwarenah oder Hardware nah ? >,<
Ich hab bis jetzt eigentlich immer Hardwarenah geschrieben :roll:

Naja, inzwischen hab ich mal Java getestet und ich muss sagen:
Es ist nicht so mein Geschmack.. obwohl ich es eigentlich nicht schlecht finde.

Und was die Schnelligkeit angeht: das hängt ganz allein vom Programmierer ab, weil ich ein paar fertiggestellte Projekte gesehen habe, wo
die Programme unterschiedlich schnell liefen.

Es gab ein Programm, das fast genauso schnell war, wie ein C++ Applikation.
Das heißt also, dass die Schnelligkeit keine Rolle spielt, soweit man in der lage ist, seine Programme zu optimieren, so dass sie schneller laufen.



@Leonidas:
Das Spiel hab ich schonmal gespielt und was die Ladezeiten angeht, find ich's recht schnell und man merkt garkein Unterschied zwischen ein Python und ein C++ Game^^ Als ob das Spiel in C++ programmiert wurde^^



Ok, leute^^ Ich sag mal so: Java und Python sind ungleich schnell :P
Es hängt ganz allein vom Programmierer ab^^ Da helfen keine Benchmarks, weil ich programme gesehen habe, die mit C++ programmiert wurden und trotzdem sehr langsam waren (siehe Entwicklungsumgebungen (Visual Studio 2005 z.B.).


Damit ist dieses Thema beendet, würd ich mal sagen^^
Vielen Dank für eure Hilfe ;)




MfG
Solid Snake

Verfasst: Freitag 28. Juli 2006, 21:48
von Joghurt
Solid Snake hat geschrieben:hm.. was denn nun O_o Hardwarenah oder Hardware nah ? >,<
Hardwarenah.
Im Zweifelsfall immer zusammenschreiben...
Und was die Schnelligkeit angeht: das hängt ganz allein vom Programmierer ab, weil ich ein paar fertiggestellte Projekte gesehen habe, wo
die Programme unterschiedlich schnell liefen.
Im Shootout werden im Allgemeinen immer die besten Implementierungen miteinander verglichen. Und Python hängt da im Moment noch arg hinter Java hinterher. Allerdings muss man auch bedenken, dass es um Java einen Hype gab und gibt, und deshalb viel Entwicklungsarbeit in JIT etc. gesteckt wurde. Das alles steckt bei Python noch in den Kinderschuhen. Das Erklärte Ziel von PyPy ist ja, IIRC, Pythonprogramme so schnell wie C-Programme zu machen. Bis dahin ist es aber noch ein langer Weg.

Was man aber nicht vergessen darf: heutzutage ist Programmiererzeit teuerer als Rechenzeit. Und mit Python ist man sehr produktiv; mehr als mit Java. Und erst recht als mit C++ oder C.

Verfasst: Montag 31. Juli 2006, 00:41
von Mad-Marty
Java ist mit ziemlicher sicherheit schneller wenn es um mathematik geht durch statische typen. Lässt sich in python mit Psyco bzw noch besser mit Pyrex was machen.

Spielt aber bei 3D spielen wiederrum nicht so die grosse rolle, > 80 % der rechenzeit sind in totoptimierten Bibliotheken und kernelteilen.

Im normalfall hält das Aufwand/Nutzen verhältnis zu Python.
Glaube kaum das du vorhast eine UT2007 alternative zu proggen ...

DirectPython für DirectX, und für opengl gibts mehrere wrapper.

Fertige engines finde ich nicht so toll, da man bei den direkten schnittstellen erstmal mehr lernt am anfang.

Verfasst: Montag 31. Juli 2006, 06:52
von BlackJack
Mad-Marty hat geschrieben:Java ist mit ziemlicher sicherheit schneller wenn es um mathematik geht durch statische typen. Lässt sich in python mit Psyco bzw noch besser mit Pyrex was machen.
Kommt drauf an was "Mathematik" ist. Wenn's mit vielen Zahlen und (mehrdimesionalen) Arrays zu tun hat, dann würde ich numpy/numarray benutzen. Das ist von der Handhabung sicher schöner als entsprechende Java-Bibliotheken, wegen Operatorüberladung und Slice-Syntax.

Verfasst: Montag 31. Juli 2006, 08:27
von CM
Java ist mit ziemlicher sicherheit schneller wenn es um mathematik geht durch statische typen.
Da möchte ich mich unbedingt BlackJack anschließen: numpy (der Nachfolger von numarray und Numeric) ist auch für mich einfach "schöner" (selbe Argumente wie BlackJack). Aber auch die Performance ist verdammt gut. Und da wo sie nicht gut ist (es gibt regelmäßige Benchmarks), reicht eine kurze Bemerkung auf der Mailingliste und man versucht das Problem zu lösen. Aber hier geht es natürlich um Libraries, die in C geschrieben sind ...
Also was statische Typisierung angeht: Inzwischen sind reine Pythonimplementierungen gar nicht so langsam (kann gerne mal jemand einen Benchmark machen, ich selber habe erst einmal keine Zeit, aber darauf wette ich), so daß dieses Argument zwar theoretisch richtig ist, aber praktisch zweifele ich es an ...

Gruß,
Christian

Verfasst: Montag 31. Juli 2006, 10:14
von birkenfeld
Und dann gibt es ja auch noch PyPy und den extcompiler (google!).