|
Ruby-Styler
Anmeldungsdatum: Juni 22, 2012
Beiträge: 25
|

23. Juni 2012 19:46
Hallo, Ich habe schon mit vielen Techniken Webseiten erstellt (PHP, Python(Django), Ruby(RoR)) und wollte jetzt mal eine richtige Programmiersprache lernen,
ich finde Java erfühlt mir da alles was ich mir so Wünsche. Was mich aber gerade verwundert ist das Dynamische Webseiten die zb. mit JSP erstellt werden, erst zur Laufzeit in Bytecode übersetzt werden, und der muss ja auch noch interpretiert werden,
warum arbeitet der Servlet nicht direkt mit Bytecode, das ist doch Javas stärke im vergleich zu Interpreter Sprachen? Gibt es in der Java-Welt, keine Technik, die mit Bytecode dynamische Webseiten erstellt, und so wirklich nennenswerte Vorteile in der Geschwindigkeit zu einer Interpreter Sprache wie PHP, Ruby oder Python hat?
|
|
rklm
Moderator & Supporter
Anmeldungsdatum: Okt. 16, 2011
Beiträge: 2054
|

23. Juni 2012 19:57
Hallo und herzlich willkommen hier im Forum! Ruby-Styler schrieb: Ich habe schon mit vielen Techniken Webseiten erstellt (PHP, Python(Django), Ruby(RoR)) und wollte jetzt mal eine richtige Programmiersprache lernen,
ich finde Java erfühlt mir da alles was ich mir so Wünsche.
Das ist keine schlechte Wahl! Es wird sicherlich jede Menge Leute geben, die das anzweifeln oder die bessere Sprache X präsentieren, aber es gibt sehr viel Software, die mit Java - insbesondere serverseitig - erstellt und erfolgreich betrieben wird.
Was mich aber gerade verwundert ist das Dynamische Webseiten die zb. mit JSP erstellt werden, erst zur Laufzeit in Bytecode übersetzt werden, und der muss ja auch noch interpretiert werden,
warum arbeitet der Servlet nicht direkt mit Bytecode, das ist doch Javas stärke im vergleich zu Interpreter Sprachen?
Das stimmt aus mehreren Gründen nicht. Es gibt JSP-Container, die vorkompilierte JSP's verarbeiten können. Selbst, wenn eine JSP zur Laufzeit übersetzt wird (wie das Tomcat standardmäßig macht), passiert das nur beim ersten Zugriff (und, je nach Konfiguration, auch bei Änderungen der Quelle - nützlich während der Entwicklung). Bytecode wird zwar auch interpretiert, aber häufig benutzter Code wird optimiert und auch in nativen Maschinencode übersetzt (Stichwort: JIT)
Übrigens: soweit ich informiert bin ist die aktuelle Webtechnologie in der Java-Welt JSF.
Gibt es in der Java-Welt, keine Technik, die mit Bytecode dynamische Webseiten erstellt, und so wirklich nennenswerte Vorteile in der Geschwindigkeit zu einer Interpreter Sprache wie PHP, Ruby oder Python hat?
Die Geschwindigkeit einer Anwendung ergibt sich aus einer ganzen Reihe von Einflüssen. Es kann tatsächlich sein, dass Du den Unterschied zwischen Java und einer der anderen genannten Sprachen bei einer bestimmten Anwendung gar nicht wahrnimmst. Da gibt es nämlich IO zum Client Effizienz der Programmierung gewählte Sprache und Framework IO zur lokalen Disk des Servers IO zur Datenbank Effizienz der Datenbank für den Anwendungsfall DB-Schema und Indizierung etc.
Ciao robert
|
|
snafu1
Anmeldungsdatum: Sept. 5, 2007
Beiträge: 1841
Wohnort: Gelsenkirchen
|

23. Juni 2012 21:55
rklm schrieb: Es wird sicherlich jede Menge Leute geben, die das anzweifeln oder die bessere Sprache X präsentieren, aber es gibt sehr viel Software, die mit Java - insbesondere serverseitig - erstellt und erfolgreich betrieben wird.
Jepp. Für mich ist und bleibt Java eine Sprache, die zwar sehr gut in Unternehmen eingesetzt werden kann, aber für den Privatgebrauch würde ich eher zu Python greifen. Für kleine Projekte ist mir Java ganz einfach zu umständlich. Aber ja, offtopic. Sorry. ^^
|
|
Lysander
Anmeldungsdatum: Juli 30, 2008
Beiträge: 2297
Wohnort: Clausthal
|

24. Juni 2012 06:18
Ruby-Styler schrieb: Ich habe schon mit vielen Techniken Webseiten erstellt (PHP, Python(Django), Ruby(RoR)) und wollte jetzt mal eine richtige Programmiersprache lernen,
Auch wenn es Offtopic ist: Ich empfinde das irgend wie als diskriminierend den anderen Sprachen gegenüber... selbst PHP ist eine richtige Programmiersprache (wenn auch keine "elegante" und "gut" ), da Turing vollständig Java ist definitiv auch eine Programmiersprache, aber ich denke "richtig" ist in diesem Kontext keine geeignete qualifizierende Aussage  rklm hat JSF ja schon erwähnt; das ist der Ansatz, den ich unter Java wählen würde.
|
|
Ruby-Styler
(Themenstarter)
Anmeldungsdatum: Juni 22, 2012
Beiträge: 25
|

24. Juni 2012 14:58
Bitte habt Rücksicht, dass ich mich nicht sehr professional ausdrücken kann!
Würde Python mit Bytecode arbeiten, und hätte auch ein Browser Plugin, würde ich bestimmt kein Java lernen. Wenn ich eine neue Programmiersprache erfinden würde, würde ich das Sprachkonzept von Python übernehmen, ich habe noch keine Sprache gesehen, die so genial durchdacht ist. Mit richtig meinte ich eine höhere Programmiersprache und keine Script Sprache, ich weiß, dass ich mit Python viel schneller als mit Java entwickeln kann,
aber um den nutzen, geht es gar nicht, ich möchte nur die Konzepte kennenlernen,
ich kann mit nicht vorstellen, dass ich kleinere Projekte später mit JSP oder JSF erstelle, wenn ich Django oder RoR nutzen könnte. Ich möchte auch Spiele entwickeln, Ziel ist es Java so gut zu verstehen, dass ich dann mit der http://jmonkeyengine.com/ schon 3D Spiele entwickeln kann,
dafür lerne ich auch fleißig Blender (früher Cinema 4D), um meine Spiele später gut aussehen zu lassen,
dass schöne an Java was viele verfluchen, sind die Applets, die ich persönlich interessanter als Flash in Verbindung mit Actionscript finde. Ich selber glaube, das Java mich weiter bringt, ich habe bisslang nur die Konzepte von Scriptsprachen gesehen,
ich denke, wenn ich das Gegenstück kennenlerne, wird mich das in meiner Denkweise und Herangehensweise weiter bringen. 
|
|
rklm
Moderator & Supporter
Anmeldungsdatum: Okt. 16, 2011
Beiträge: 2054
|

24. Juni 2012 15:08
Ruby-Styler schrieb: Wenn ich eine neue Programmiersprache erfinden würde, würde ich das Sprachkonzept von Python übernehmen, ich habe noch keine Sprache gesehen, die so genial durchdacht ist.
Ha, dann kennst Du Ruby nicht!
Ich selber glaube, das Java mich weiter bringt, ich habe bisslang nur die Konzepte von Scriptsprachen gesehen,
ich denke, wenn ich das Gegenstück kennenlerne, wird mich das in meiner Denkweise und Herangehensweise weiter bringen.
Auf jeden Fall! Verschiedene Konzepte zu kennen ist auf jeden Fall hilfreich und erweitert Deinen Horizont. Wie gesagt, lass Dich nicht beirren. Bis dann robert
|
|
Lysander
Anmeldungsdatum: Juli 30, 2008
Beiträge: 2297
Wohnort: Clausthal
|

24. Juni 2012 17:08
Ruby-Styler schrieb: Bitte habt Rücksicht, dass ich mich nicht sehr professional ausdrücken kann!
Kein Problem, aber...
Würde Python mit Bytecode arbeiten, und hätte auch ein Browser Plugin, würde ich bestimmt kein Java lernen.
Python arbeitet auf Bytecode! Insofern unterscheidet es sich nicht von Javas JVM.
Wenn ich eine neue Programmiersprache erfinden würde, würde ich das Sprachkonzept von Python übernehmen, ich habe noch keine Sprache gesehen, die so genial durchdacht ist.
Wozu dann eine neue Sprache? (Und was wäre der Unterschied zu Python?)
Mit richtig meinte ich eine höhere Programmiersprache und keine Script Sprache, ...
Wie ich oben schon darlegte trifft dieses Kriterium ja nicht auf Python zu, des Weiteren ist das eine ziemlich künstliche Unterscheidung. Python ist sogar eine "höhere" Sprache als Java, da es wesentlich ausdrucksstärker ist.
aber um den nutzen, geht es gar nicht, ich möchte nur die Konzepte kennenlernen,
Das ist natürlich nie verkehrt
Ich selber glaube, das Java mich weiter bringt, ich habe bisslang nur die Konzepte von Scriptsprachen gesehen,
Auch wenn Du (bisher) da noch Bildungslücken hast, versuche Dich mal eher in Richtung Paradigmen schlau zu machen! Dieses "Scriptsprachen"-Dingens sagt eigentlich nichts aus - würdest Du C als Scriptsprache sehen, weil es auf LLVM kompilierbar ist?  Paradigmen sind die eigentlichen Unterscheidungsmerkmale von Sprachen. Python ist z.B. stark typisiert, genau wie Java. Java ist jedoch statisch typisiert und nicht wie Python dynamisch. C hingegen ist statisch aber schwach typisiert... da gibt es noch viele weitere, wie natürlich objektorientiert, prozedural vs. funktional vs. logisch, imperativ vs. deklarativ, aspektorientiert uvm. Du kannst Dich da als Startlektüre mal bei wikipedia schlau machen; wenn Du Interesse an verschiedenen Konzepten hast, dann ist das vielleicht sogar sinnvoller, als direkt mit Java anzufangen. Evtl. findet Du dann andere Konzepte interessant. Ich will Dir aber Java nicht madig machen; vor allem, weil Du nach Java dynamische Typisierung und nicht Klassen zentrierte OOP lieben wirst Zudem kann man auf der JVM auch andere interessante Sprachen nutzen, wie etwa Clojure als Lisp-"Derivat". Kleiner Ratschlag noch: Imho ist Java ohne IDE nicht zu stemmen - auch wenn Anfänger da oftmals Probleme mit der Einarbeitung haben. Schau Dir mal IntelliJ an - diese fühlt sich tatsächlich handlicher als Eclipse an, auch wenn Eclipse natürlich eine sehr gute IDE ist. Allerdings kann es sein, dass es bei der Freeware Version Einschränkungen gibt, speziell in Sachen Web... Tu Dir Java jedenfalls nicht lange ohne IDE an, glaub mir, solch eine "Discipline and Bondage" Sprache ist ohne ätzend zu handlen  Edit: Hier findest Du einen kleinen Screencast bezüglich der Nutzung von IntelliJ. Zugegeben wird man als Java-Noob nur die Hälfte kapieren, aber es zeigt schön die Möglichkeiten auf, die eine IDE dank der statischen Typisierung einem ermöglicht.
|
|
Kinch
Anmeldungsdatum: Okt. 6, 2007
Beiträge: 1263
|

24. Juni 2012 17:20
Ruby-Styler Würde Python mit Bytecode arbeiten,
Cpython nutzt Bytecode. cython kompiliert nach c. jython nutzt die JVM. Pypy benutzt nen JIT-Compiler. cl-python nutzt eine Common-Lisp-Umgebung. Man muss zwischen Sprache und ihrer Implementierung unterscheiden. (An Python ist tatsächlich schade, dass die Referenz-Implementierung so bescheiden (langsam und nicht thread-safe) ist)
|
|
Lysander
Anmeldungsdatum: Juli 30, 2008
Beiträge: 2297
Wohnort: Clausthal
|

24. Juni 2012 18:48
Kinch schrieb: cython kompiliert nach c.
| with Pedant_Modus.start():
print "Cython ist aber kein Python - umgekehrt wird ein Schuh draus ;-)"
|
|
|
Ruby-Styler
(Themenstarter)
Anmeldungsdatum: Juni 22, 2012
Beiträge: 25
|

25. Juni 2012 01:10
Nachfolgend eine Erklärung von einen Anfänger nicht vergessen, darum Fehlen Fachbeschreibungen: Mit Eclipse und den PyDev Plugin habe ich schon meine Python Programme geschrieben, das wäre also für Java genau passende,
wenn wir schon gerade beim Thema sind, schreibe ich Java Programme mit dem OpenJDK oder nutze ich dafür das Oracle JDK? Und zu Python und den Bytecode,
ich habe das so gelernt das erst zur Laufzeit der Interpreter den Python Code in ein Bytecode kompiliert, und dann diesen Bytecode einliest und ausführt,
habe nie verstanden wie das dann trotzdem schneller ist als den Code direkt zu interpretieren, ruby 1.9 macht das ja jetzt genau so und scheint 4-10 Mal so schnell zu sein. Java geht da einen anderen Weg der Code wird direkt kopiliert und brauch dann zur Laufzeit nur noch den Bytecode einlesen,
der ja schon die ganze Arbeit ausmacht, sprich die Objekte in Prozeduren umwandeln alle Sachen, die importiert werden, an Ort und Stelle zu legen,
halt alles was Python erst noch zur Laufzeit machen muss, und dann noch den Bytecode auszuführen. Darum ist Java auch viel schneller als Python. Das habe ich so im Kopf lasse mich gerne eines besseren beleren.
|
|
diesch
Supporter
Anmeldungsdatum: Feb. 18, 2009
Beiträge: 4143
Wohnort: Freiburg
|

25. Juni 2012 01:57
Ruby-Styler schrieb: Und zu Python und den Bytecode,
ich habe das so gelernt das erst zur Laufzeit der Interpreter den Python Code in ein Bytecode kompiliert, und dann diesen Bytecode einliest und ausführt,
Das ist bei Perl so. Python (genauer: CPython) kompiliert erst nach Bytecode (.pyc-Dateien), der dann ausgeführt wird. Im Unterschied zu Java muss man bei Python den Bytecode-Compiler allerdings nicht selbst aufrufen, sondern Python macht das automatisch, falls die .pyc-Datei älter als der Quellcode oder nicht vorhanden ist.
|
|
rklm
Moderator & Supporter
Anmeldungsdatum: Okt. 16, 2011
Beiträge: 2054
|

25. Juni 2012 08:17
Moin! Ruby-Styler schrieb: Und zu Python und den Bytecode,
ich habe das so gelernt das erst zur Laufzeit der Interpreter den Python Code in ein Bytecode kompiliert, und dann diesen Bytecode einliest und ausführt,
habe nie verstanden wie das dann trotzdem schneller ist als den Code direkt zu interpretieren, ruby 1.9 macht das ja jetzt genau so und scheint 4-10 Mal so schnell zu sein.
Nein. Ruby 1.9 kompiliert immer erst beim Lesen. Und bei Python bringt es etwas, weil der Interpreter den Code nur kompiliert, wenn er neuer ist als das Compilat, wie diesch schon beschrieben hat.
Java geht da einen anderen Weg der Code wird direkt kopiliert und brauch dann zur Laufzeit nur noch den Bytecode einlesen,
der ja schon die ganze Arbeit ausmacht, sprich die Objekte in Prozeduren umwandeln alle Sachen, die importiert werden, an Ort und Stelle zu legen,
halt alles was Python erst noch zur Laufzeit machen muss, und dann noch den Bytecode auszuführen.
Decompilier mal eine Java-Klasse mit javap -private -s -verbose. Du wirst sehen, dass z.B. die Auflösung von Referenzen zu anderen Klassen / Interfaces erst zur Laufzeit passiert Objekte werden übrigens nicht in Prozeduren umgewandelt - sie bleiben Objekte.
Darum ist Java auch viel schneller als Python.
Ob es viel schneller ist, ist noch die Frage - überhaupt ist nicht klar, ob Java generell immer schneller ist als Python. Wenn es Unterschiede gibt, hat das eher mit anderen Dingen zu tun: statisch typisiert, damit mehr Raum für Optimierungen HotSpot-VM just in time compiler, der Maschinencode erzeugt vermutlich auch ein ausgefeilterer Garbage Collector
Ciao robert
|
|
snafu1
Anmeldungsdatum: Sept. 5, 2007
Beiträge: 1841
Wohnort: Gelsenkirchen
|

25. Juni 2012 09:43
Mit PyPy werden auch Python-Skripte schnell. Bei dynamischen Webseiten ist der Unterschied zu CPython vermutlich nicht so riesig. Die Stärken von PyPy zeigen sich eher bei komplexen Berechnungen und/oder vielen Schleifendurchläufen in einem Programm. Ich vermute aber, dass auch Java nicht so wahnsinnig viel schneller bei WebApps und so'n Kram sein wird als Python. Diese Entscheidung basiert ja häufig auf einer reinen "Ich habe mal gehört, dass..."-Vermutung. Wo eher Unterschiede sein werden, ist bei der Verarbeitung der Requests. Das geschieht aber auch bei Python eher in C-Backends, weil Python in diesem Bereich schnell in die Knie gehen würde. Also rein von der Performance-Seite her betrachtet würde mir das jetzt nicht ausreichen, um Java grundsätzlich zum Erstellen von dynamischen Webseiten vorzuziehen. Sofern es aber um's Lernen an einem Projekt geht oder wenn Eigenschaften bzw Bibliotheken von Java für dessen Verwendung sprechen - der OP sagte ja in einem späteren Beitrag was von Spieleprogrammierung und Applets -, dann ist das natürlich was anderes. So gäbe es für die Programmierung von Spielen zwar zum Beispiel PyGame, aber die Einbindung des Spiels in einen Browser ist damit meines Wissens nicht möglich. Vielleicht könnte man das irgendwie mit Jython hinkriegen, aber das wäre mir dann letztlich auch zu kompliziert. In dem Fall ist Java IMHO schon nicht verkehrt.
|
|
Lysander
Anmeldungsdatum: Juli 30, 2008
Beiträge: 2297
Wohnort: Clausthal
|

25. Juni 2012 10:50
Ruby-Styler schrieb: Darum ist Java auch viel schneller als Python.
Wie schon andere (eher implizit) schrieben, ist es schwierig die Schnelligkeit einer Sprache auf Sprachebene zu beurteilen, sondern meist geht es bei solchen Aussagen doch um die jeweiligen (Referenz-)Implementierungen! Generell ist das Objektsystem von Python wesentlich komplexer als das von Java, dazu kommt noch die dynamische Typisierung. Das sind wohl grundsätzliche Konzepte, die das Schreiben einer schnellen Laufzeitumgebung schwieriger machen - PyPy zeigt ja aber, dass man gegenüber der Referenzimplementierung CPython dennoch einiges an Tempo herausholen kann. Da es also im Python-Umfeld mehrere Interpreter-Implementierungen gibt, muss man auch da aufpassen, von welcher man redet. Die Referenzimplementierun (CPython) gilt aber in der Tat als eher langsam. Übrigens galt Java lange Jahre auch als besonders langsam und in der Tat hat es durch stete Weiterentwicklung der JVM, insbesondere durch JIT-Techniken, viel an Geschwindigkeit gewonnen. Im übrigens sind solche Aussagen ja auch nur im konkreten Vergleich sinnvoll. Fürs Numbercrunching wird idR. eben auch kein Python genommen, sondern diese kritischen Dinge werden dann in C geschrieben und eingebunden. Man kann wohl schon generell sagen, dass stärker abstrahierende Sprachen schwerer in effizienten Code umzusetzen sind; nicht umsonst ist Assembler unschlagbar und Dinge wie C oder Fortran ziemlich fix. Nur kann man solche Sprachen nicht mit der Ausdrucksstärke von Python, Ruby oder Scala gleichsetzen  Geschwindigkeit ist sicherlich bei einigen Anwendungsbereichen ein wichtiges Thema; die Lösung ist jedoch nicht immer die Wahl einer anderen Sprache, sondern kann auch ein Upgrade von Hardware sein o.ä. Denn merke: Entwicklungszeit und damit Kosten spielen in der Softwareentwicklung oftmals eine gewichtigere Rolle, als der Kauf eines neuen Rechners  Wenn Du den Unterschied bezüglich Script- vs kompilierte Sprachen aufrecht erhalten willst, dann würde ich eher von "interpretierten Sprachen" sprechen; Bei einigen BASIC-Dialekten werden wohl heutzutage tatsächlich bei jedem Durchlauf die Quellcodes geparst und ausgewertet, ohne Byte-Code zu erzeugen. Selbiges gilt wohl auch für die Bash und Konsorten? Aber selbst dabei stellt sich die Frage: Ist das in irgend einer Form wichtig? Ich schrieb Dir ja in meinem längeren Beitrag, dass es eigentliche die Paradigmen sind, die verschiedenen Sprachen interessant machen, zumindest, wenn man neue Konzepte lernen will! Edit: Wenn Du mal mehr über Einschränkungen bezüglich der Geschwindigkeit von Python wissen willst, lies Dir mal diesen Thread durch. Da werden viele interessante Aspekte angesprochen 
|
|
Kinch
Anmeldungsdatum: Okt. 6, 2007
Beiträge: 1263
|

25. Juni 2012 18:06
Also Cpython finde ich, wie schon angemerkt, auch keine gute Implementierung von Python. Es ist imho deutlich Ressourcen-hungriger als nötig. Davon ab: Ich habe auch schon C++ zu Python portiert und die Python Version läuft deutlich schneller. Das ist natürlich keine Magie, sondern es musste nur eine einzige Funktion optimiert werden. Ich halte das immer noch für den besten Ansatz: Code schreiben in der Sprache die man mag und kann, schauen wie es läuft, Bottlenecks finden und in C oder Fortran auslagern. Bei Cpython ist der einzig echte Show-Stopper, dass es nicht Thread-Safe ist. Aber nun gut: auch das kann man in C auslagern. Habe übrigens auch schon Java Programme gesehen, die bei gleicher Implementierung schneller liefen als kompilierter C Code (JIT sei Dank). Dabei bin ich auch noch in der Zeit groß geworden, wo es hieß, dass Java niiiieeeemals annährend schnell genug wäre, für ernsthafte Entwicklung.
|