ubuntuusers.de

Webprogrammierung mit Python (oder Perl oder Ruby). Entscheidungshilfen.

Status: Gelöst | Ubuntu-Version: Xubuntu 9.04 (Jaunty Jackalope)
Antworten |

stfischr Team-Icon

Avatar von stfischr

Anmeldungsdatum:
1. März 2007

Beiträge: 19197

Grüße.

Ich habe lange Zeit mit PHP geproggt. Nun will ich mich weiterentwickeln und wahrscheinlich Python ausprobiern. Mein Ziel ist ungefähr sowas wie Ubuntuusers, nen Portal mit Forum, Wiki, ... bloß deutlich flexibler 😈 Ich hab gerne Projekte ohne viel Abhängigkeiten und würde mich deshalb schon vor dem Loslegen auf bestimmte Tools festlegen.

Da hätte ich direkt nen paar Fragen ans Webteam, falls es mit liest:

  • Welchen Webserver nutzt ihr Apache oder Lighttpd und warum (Performance)?

  • Was für ne Anbindung verwendet ihr CGI, FastCGI, SCGI oder WSGI hier währen nen paar Details interessant (mod_wsgi? Deamon oder embedded?)?

  • Ihr nehmt MySQL? Gibts da nicht performantere Lösungen? Warum SQLalchemy, wollt ihr die DB wechseln?

Falls es schon irgendwo beantwortet wurde bin ich natürlich auch mit Links zufrieden.

Kann jemand was über den Performanceunterschied WSGI FastCGI sagen?

Gibt es eine Möglichkeit Python schon vorher zu kompilieren (in Bytecode oder gar direkt in Maschinencode) um den Webserver zu entlasten? Bei PHP hat mich halt gestört, dass es wirklich grotten lahm ist, da hab ich teilweise tagelang rumoptimiert und am Ende 1 Sekunde rausgeholt. Laut einigen Benchmarks ist Python ja deutlich schneller als PHP (bei anderen ists wieder umgekehrt 🙄 ) aber da das meist Microbenchmarks sind haben die sowieso keine Aussagekraft.

Was gibt es für Technologien, um Python zu beschleunigen (speziell bei Webservern)?

So und nun die Flamewarfragen: Hat jemand Erfahrung in min 2 der folgenden Sprachen: PHP, Perl, Ruby, Python? Und dabei meine ich nicht "Ich arbeite mit X und hab auch schonmal was mit Y gemacht" ich such eher welche, die beide Sprachen aktiv nutzen. Könnt ihr was zur Performance sagen? Welche Sprache nutzt ihr lieber und warum?

Ich hab mich ja eigentlich schon auf Python eingeschossen (python3 by the way) aber wenn jetzt jemand sagt: Woah XY ist 1000x schneller und einfacher ...

Stimmt es, das man in Phyton (von den 4 erwähnten Sprachen) wirklich den konsistentesten/einfachsten Code schreibt? Was ich so gesehen habe sieht echt vielversprechend aus und meist ist Pythoncode deutlich kürzer.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4687

Wohnort: Berlin

@stfischr: Du bist IMHO ein bisschen zu geschwindigkeitsfixiert. Reicht es nicht grundsätzlich schon mal, dass es wahrscheinlich schneller als PHP werden wird? ☺

Von Python 3 würde ich noch Abstand nehmen. Es sind noch lange nicht alle Module/Pakete von Drittanbietern portiert, die vielleicht mal interessant werden könnten, und WSGI kann man damit wohl auch vergessen. Ausserdem ist die 3er wohl momentan immer noch langsamer als die 2er. Die Entwickler sind da nämlich nach dem, IMHO vernünftigen, Motto vorgegangen, dass die Änderungen erst einmal korrekt implementiert werden, und danach erst an der Performance geschraubt wird. Schnell aber falsch nützt ja niemandem. ☺

Nach Bytecode compiliert wird Python automatisch beim Laden von Modulen und wenn im Verzeichnis wo der Quelltext liegt auch Schreibrechte vorhanden sind, dann wird das Kompilat dort auch gespeichert um beim nächsten mal diesen Schritt zu sparen. Dann wird nur neu kompiliert, wenn die Quelltextdatei neuer ist, als die Bytecodedatei. Man kann das Kompilieren aber auch "manuell" anschmeissen, das ist üblicherweise Bestandteil von Installationsskripten.

Ob das wirklich einen grossen Vorteil bringt, hängt letztlich aber auch davon ab, wie die Webanwendung umgesetzt wird. Also ob da jedesmal der Interpreter angeworfen wird, oder ob es ein "Applikationsserver" ist, der die ganze Zeit über läuft. Letztere Möglichkeit ist bei PHP ja eher unüblich.

Technologien um Python zu beschleunigen, jetzt nicht speziell für Webserver: Module in C schreiben. Oder in Cython, was eine Untermenge von Python ist, mit statischer Typisierung, die nach C kompiliert wird. Und dann gibt's mit Psyco einen JIT-Compiler. Die Frage ist, ob das für Webanwendungen alles wirklich viel bringt, denn die sind ja meistens nicht durch die Laufgeschwindigkeit eingeschränkt, sondern durch die Netzanbindung.

schmidti411

Avatar von schmidti411

Anmeldungsdatum:
24. Oktober 2007

Beiträge: 152

Wohnort: Berlin

Wenn du mal ein Webframework in Python ausprobieren möchtest kann ich dir nur wärmstens Django empfehlen. Hiermit macht das entwickeln echt spass. Ich habe vorher viele Webportale in PHP programmiert und wurde bei einem neuen Projekt ins kalte Wasser gestossen, da die anderen Entwickler Django nutzen wollten. Ich habe das Buch kurz durchgearbeitet (http://djangobook.com/) und schnell gemerkt, dass dies deutlich einfacher und klarer strukturiert ist als die PHP Frameworks mit denen ich zuvor gearbeitet habe. Ich habe sehr schnell eine gute Lösung für den Kunden erarbeiten können: Vorteile:

Du kannst verschiedene Datenbanken nutzen (und auch später noch wechseln). PostgreSQL, MySQL, SQLite und Oracle sind integriert. Ich bin großer Fan von Postgres geworden... Aber das ist Geschmackssache. Als Server wird Apache mit mod_python unterstützt. Ansonsten aber auch FastCGI und HttpLite

http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index

Du erreichst mit Django eine gute Performance, wenn du die Datenbankabfragen minimal hälst. Also einfach beim Programmieren darauf achten, dass du die gleiche Abfrage nicht doppelt oder dreifach pro Request machst. Die Anzahl und Art der Abfragen lassen sich simple anzeigen. Zum Beschleunigen läßt sich memcache integireren. Damit erhält man bei zum größten Teil statischen Seiten eine super Performance.

Probier es einfach mal aus (gibt es auch als Ubuntu Paket)

http://www.djangoproject.com/

http://docs.djangoproject.com/en/dev/

http://djangobook.com/

http://www.djangosnippets.org/

Gruß,

Schmidti

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Wenn Du ernsthaft auf Performance wert legst, dann lass die Finger von Python, Perl und Ruby und nimm z. B. Scala oder C#, diese sind um viele Faktoren schneller. Allerdings stellt sich die Frage, ob der Performance-Bottleneck überhaupt in Deinem Code liegt oder z. B. in den Datenbank-Queries.

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

stfischr

So und nun die Flamewarfragen: Hat jemand Erfahrung in min 2 der folgenden Sprachen: PHP, Perl, Ruby, Python? Und dabei meine ich nicht "Ich arbeite mit X und hab auch schonmal was mit Y gemacht" ich such eher welche, die beide Sprachen aktiv nutzen.

Ich bin von Beruf Software Web-Entwickler mit Perl, reicht das?

Könnt ihr was zur Performance sagen? Welche Sprache nutzt ihr lieber und warum?

Die Performance unter Perl ist gut, ich setze allerdiengs vorraus das man eine Persistente Umgebung nutzt. Daher FastCGI oder auch mod_perl und nicht mehr CGI. Verglichen zu anderen Sprachen? Da ist ehrlich gesagt die wahl der Sprache eher nebensächlich, sondern es ist meist entscheidender wie der programmierer eine Aufgabe löst.

Stimmt es, das man in Phyton (von den 4 erwähnten Sprachen) wirklich den konsistentesten/einfachsten Code schreibt? Was ich so gesehen habe sieht echt vielversprechend aus und meist ist Pythoncode deutlich kürzer.

Nö. Konsistenz und einfachen Code ist eine eigenschaft die du als Programmierer erlernen musst und dir keine Sprache abnimmt. Die Sprache hindert dich nicht daran einen viel zu komplizierten Weg zu nehmen, und warnt dich auch nicht. Ebenfalls gibt es keine warnungen oder Fehler wenn du inkosistent bist. Sprich z.B. Variablen oder Klassen(methoden) schlecht bennenst etc.

Kann jemand was über den Performanceunterschied WSGI FastCGI sagen?

Wie "Marc" sagte achtest du meiner ansicht nach auch zu viel auf die Performance. Nicht das soetwas all zu schlecht ist (okay eigentlich ist es das), aber oft richtet man seine augen auf Details die komplett irrelevant sind. Ob nun WSGI oder FastCGI sollte bei einer Fertigen Applikation wohl gar keinen Unterschied machen. Wenn du eine Webseite lädst musst du daten aus Datenbanken lesen, aufbereiten, du wirst wohl etliche Module nutzen, das ganze an Templates übergeben dir dir z.B. HTML generieren etc. pp. Hier wird der Unterschied WSGI oder FastCGI wohl kein Unterschied mehr spielen. Ansonsten haben Frameworks dies ja meist eh abstrahiert, so das du einfach zwischen beiden hin und her schalten kannst. Du musst also nicht speziell gegen ein interface Programmieren. Und wenn das andere schneller ist, kannst du einfach wechseln.

Gibt es eine Möglichkeit Python schon vorher zu kompilieren (in Bytecode oder gar direkt in Maschinencode) um den Webserver zu entlasten?

Typischerweise wenn du z.B. FastCGI nutzt läuft deine Webapplikation als selbstständiges Programm auf dem Server. Python kompiliert vor dem Start sowieso zu Bytecode. Das heißt. Deine Applikation startet, kompiliert alles und bedient dann die Seitenaufrufe. Es muss nicht bei jedem aufruf neu kompiliert werden. Von daher ist diese Frage überflüssig.

Ihr nehmt MySQL? Gibts da nicht performantere Lösungen? Warum SQLalchemy, wollt ihr die DB wechseln?

Zuerstmal muss sich herausstellen ob MySQL überhaupt ein Performance Problem darstellt. Und ein ORM nimmt man nicht nur deswegen weil man die DB wechseln kann. Sondern der Umgang mit der Datenbank ist deutlich angenehmer.

Wenn Du ernsthaft auf Performance wert legst, dann lass die Finger von Python, Perl und Ruby und nimm z. B. Scala oder C#, diese sind um viele Faktoren schneller.

Hast du irgendeine Aussagekräftige Quelle die das belegt?

papasmoky

Avatar von papasmoky

Anmeldungsdatum:
31. März 2008

Beiträge: 64

Wohnort: Saarbrücken

Hi,

also arbeite fast ausschließlich mit Python. Die Sprache ist zwar nicht die schnellste ( im Vergleich mit Non-Scriptsprachen ), man kann sie jedoch schneller machen, indem man beispielsweise Psyco benutzt. Bei einem meiner Programme hat es die Geschwindigkeit um das 10-fache erhöht. Du kannst es dir mal anschauen. Ich bin mir sicher, dass es dir von nutzen sein wird.

Gruß papa

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Sid Burn schrieb:

Hast du irgendeine Aussagekräftige Quelle die das belegt?

Wenn Du die Frage schon so formulierst, wirst Du ohnehin jede denkbare Quelle als "nicht aussagekräftig" ablehnen. Oder Du weist auf den Fakt hin, dass eine Sprache an sich keine Geschwindigkeit hat usw. usf.. Warum sollte ich mich darauf einlassen? Ich denke, dass das hier schon oft genug durchiteriert wurde.

stfischr Team-Icon

(Themenstarter)
Avatar von stfischr

Anmeldungsdatum:
1. März 2007

Beiträge: 19197

Vielen Dank bis hierhin schonmal.

Marc 'BlackJack' Rintsch schrieb:

@stfischr: Du bist IMHO ein bisschen zu geschwindigkeitsfixiert. Reicht es nicht grundsätzlich schon mal, dass es wahrscheinlich schneller als PHP werden wird? ☺

Wahrscheinlich hast du recht. Und wie Hello World meinte liegts wohl auch hauptsächlich an den DB queries.

Von Python 3 würde ich noch Abstand nehmen. ...

Hrr kein WSGI mit Python3 und FastCGI? Das währe auf jeden Fall blöd. Ansonsten leg ich auch gerne mal selbst Hand an, wenn mit Features fehlen.

Nach Bytecode compiliert wird Python automatisch beim Laden von Modulen und wenn im Verzeichnis wo der Quelltext liegt auch Schreibrechte vorhanden sind, dann wird das Kompilat dort auch gespeichert...

Ah, das ist sehr gut.

Technologien um Python zu beschleunigen, jetzt nicht speziell für Webserver: Module in C schreiben. Oder in Cython, was eine Untermenge von Python ist, mit statischer Typisierung, die nach C kompiliert wird. Und dann gibt's mit Psyco einen JIT-Compiler. Die Frage ist, ob das für Webanwendungen alles wirklich viel bringt, denn die sind ja meistens nicht durch die Laufgeschwindigkeit eingeschränkt, sondern durch die Netzanbindung.

Die Möglichkeit mit C oder ähnlichem das Programm zu beschleunigen wollte ich vermeiden, da es mein Vorhaben "schöner/übersichtlicher Quelltext" brechen würde.

@schmidti411 Ja Django hab ich auch schon viel gelesen, wenn ich wohl auch ehr sowas wie Pylons bevorzugen würde. Ich werde mich auf jeden Fall noch genauer mit den Frameworks beschäftigen.

@Hello World C# kommt nicht in Frage (Vorurteile, Prinzipien, andere sinnlose Argumente) ☺ Aber Scala sieht wirklich sehr interessant aus, man kann es auf jedem Javaserver ohne Anpassungen ausführen? Ich hatte auch schon über Java nachgedacht, aber ich wollte ja was neues lernen.

Sid Burn schrieb:

stfischr

So und nun die Flamewarfragen: Hat jemand Erfahrung in min 2 der folgenden Sprachen: PHP, Perl, Ruby, Python? Und dabei meine ich nicht "Ich arbeite mit X und hab auch schonmal was mit Y gemacht" ich such eher welche, die beide Sprachen aktiv nutzen.

Ich bin von Beruf Software Web-Entwickler mit Perl, reicht das?

Ja nee, ich suche jemand der 2 Sprachen aktiv nutzt. Aber prinzipiell habe ich wohl der Geschwindigkeit zuviel beigemessen, die Frage hat sich für mich eigentlich erledigt. Perl, Python und Ruby scheinen sich von der Geschwindigkeit nicht viel zu nehmen, zumindest nicht in dem Bereich "10x schneller".

Die Performance unter Perl ist gut, ich setze allerdiengs vorraus das man eine Persistente Umgebung nutzt. Daher FastCGI oder auch mod_perl und nicht mehr CGI. Verglichen zu anderen Sprachen? Da ist ehrlich gesagt die wahl der Sprache eher nebensächlich, sondern es ist meist entscheidender wie der programmierer eine Aufgabe löst.

Juppp FastCGI oder mod_xyz ist klar.

Nö. Konsistenz und einfachen Code ist eine eigenschaft die du als Programmierer erlernen musst und dir keine Sprache abnimmt. Die Sprache hindert dich nicht daran einen viel zu komplizierten Weg zu nehmen, und warnt dich auch nicht. Ebenfalls gibt es keine warnungen oder Fehler wenn du inkosistent bist. Sprich z.B. Variablen oder Klassen(methoden) schlecht bennenst etc.

Hm, da hab ich mich blöd ausgedrückt. Ich habe viel gelesen, das Python so entworfen wurde, dass der Quellcode leicht verständlich ist, klar mit ein bisschen guten willen kann man jeden guten Ansatz untergraben, aber ich achte eigentlich auf übersichtlichen Code.

Hier wird der Unterschied WSGI oder FastCGI wohl kein Unterschied mehr spielen. Ansonsten haben Frameworks dies ja meist eh abstrahiert, so das du einfach zwischen beiden hin und her schalten kannst. Du musst also nicht speziell gegen ein interface Programmieren. Und wenn das andere schneller ist, kannst du einfach wechseln.

Ah ok.

Zuerstmal muss sich herausstellen ob MySQL überhaupt ein Performance Problem darstellt. Und ein ORM nimmt man nicht nur deswegen weil man die DB wechseln kann. Sondern der Umgang mit der Datenbank ist deutlich angenehmer.

Jo, ORM hab ich noch nicht so ganz kapiert, da werd ich mich dann genauer mit auseinandersetzen. Am besten ist halt, wenn mans selbst verwendet, dann versteht man auch was dahinter steckt.

Wenn Du ernsthaft auf Performance wert legst, dann lass die Finger von Python, Perl und Ruby und nimm z. B. Scala oder C#, diese sind um viele Faktoren schneller.

Hast du irgendeine Aussagekräftige Quelle die das belegt?

Was ich so flott durch gooeln gefunden habe sagt, dass Sala ungefähr so schnell wie Java ist, welches ja doch deutlich schneller als Scriptsprache XY ist.

Hält sich jemand von den Pythonproggern an die Codeconventions? Die sind ja mal absoluter Mist. 🙄 Dagegen konnte ich mich mit den Java-Codeconventions gleich anfreunden.

Edit:

papasmoky schrieb:

... Psyco ...

Jupp das ist mir jetzt auch schon öfter über den Weg gelaufen, falls ich Python nehme wird das auf jeden Fall ausprobiert.

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

Meinst du mit "Code-Conventions" PEP8? Ja, das wird eigentlich recht gut angenommen. Ich finde es (in den meisten Fällen) auch nicht schwachsinnig, sich daran zu halten.

stfischr Team-Icon

(Themenstarter)
Avatar von stfischr

Anmeldungsdatum:
1. März 2007

Beiträge: 19197

snafu1 schrieb:

Meinst du mit "Code-Conventions" PEP8? Ja, das wird eigentlich recht gut angenommen. Ich finde es (in den meisten Fällen) auch nicht schwachsinnig, sich daran zu halten.

Ja genau was mich da stört sind so Sachen wie:

  • Leerzeichen statt Tabs (gibts dafür nen rationales Argument)

  • 80 Teichen pro Zeile (gut das steht in allen Conventions)

  • def complex(real, imag=0.0): (wieso sollen hier keine Leerzeichen hin?)

Naja, aber egal, ich muss mich nur mal zusammenreißen. ☺

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

stfischr schrieb:

  • Leerzeichen statt Tabs (gibts dafür nen rationales Argument)

Ja. Leerzeichen sind immer gleich breit, bei Tabs hängt es von den Einstellungen des Editors ab. Außerdem haben Tabs den Nachteil, dass sie in eine Reihe von Leerzeichen umgewandelt werden, wenn man sie aus xterm kopiert. Wenn man also ein Codefragment in xterm kopiert und per Mittelklick wieder einfügt, sind aus den Tabs auf einmal Leerzeichen geworden.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4687

Wohnort: Berlin

@stfischr: Man kann auch in C schönen, übersichtlichen Quelltext schreiben. ☺ Wobei ich dazu neigen würde reine C-Bibliotheken zu schreiben und die über das ctypes-Modul von Python aus anzusprechen, statt Python-Module in C zu schreiben. Das geht nämlich mit Cython wesentlich schöner vom Quelltext her; und auch sicherer, weil einem der ganze "boilerplate code" abgenommen wird, den man sonst schreiben müsste.

Für Leerzeichen statt Tabs gibt's ein rationales Argument: Wenn es jeder macht wie er will, kann man keinen Quelltext austauschen oder von woanders kopieren, denn die Einrückung ist bei Python wichtig. Und Zeichen die man nicht sieht, wo im Editor die Einrückung sogar "richtig" aussieht, in Wirklichkeit aber "falsch" ist, führen zu Fehlern, nach denen man sich dumm und dusselig suchen kann.

Keine Leerzeichen bei Defaultwerten und Funktionsaufrufen mit Schlüsselwortargumenten ist etwas kompakter bei der Definition und beim Aufruf kann man es nicht mit einer Zuweisung im aktuellen Namensraum verwechseln.

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

Hello World schrieb:

Sid Burn schrieb:

Hast du irgendeine Aussagekräftige Quelle die das belegt?

Wenn Du die Frage schon so formulierst, wirst Du ohnehin jede denkbare Quelle als "nicht aussagekräftig" ablehnen. Oder Du weist auf den Fakt hin, dass eine Sprache an sich keine Geschwindigkeit hat usw. usf.. Warum sollte ich mich darauf einlassen? Ich denke, dass das hier schon oft genug durchiteriert wurde.

Nun, das mit der "Eine Sprache hat keine Geschwindigkeit" können wir ja mal beseite lassen. Aber kannst du überhaupt irgendeine Quelle nennen? Und klar über "Aussagekräftigt" kann man Streiten. Ist eine "Hello, World" Seite z.B. aussagekräftigt um darüber Performance schlüße zu ziehen? Und selbst wenn man Lösung X in Perl hat und Lösung Y in Scala, sagt es auch wenig aus, da bei allem immer die Fähigkeiten des Programmiers und die vorgehensweise entscheidet. Hinzu kommt noch das solche Mikro Benchmarks nichts über die Performance aussagt in einer komplexen Anwendung. Kurz gesagt halte ich das richtige Benchmarken für schwierig bis unmöglich, aber trotz alledem bist du ja der Überzeugung das Scala oder C# performanter wäre bei Webapplikationen, nun und mich würde halt Interessieren wie du auf diese Meinung kommst das du doch so eine klare aussage machen kannst.

Ja nee, ich suche jemand der 2 Sprachen aktiv nutzt.

Naja ich bezweifle das es jemanden gibt der sich vernünftig in zwei Sprachen auskennt und entsprechend gegenüberstellen kann.

Hm, da hab ich mich blöd ausgedrückt. Ich habe viel gelesen, das Python so entworfen wurde, dass der Quellcode leicht verständlich ist, klar mit ein bisschen guten willen kann man jeden guten Ansatz untergraben, aber ich achte eigentlich auf übersichtlichen Code.

Das wird wohl jedem eingebläut. Letztendlich wird dein Programmcode, das Design deiner Klasse, konsistente Namensgebung aber nicht automatisch gut weil du Python nutzt.

Jo, ORM hab ich noch nicht so ganz kapiert, da werd ich mich dann genauer mit auseinandersetzen. Am besten ist halt, wenn mans selbst verwendet, dann versteht man auch was dahinter steckt.

Ein ORM hat die Aufgabe das du dich nicht mehr mit SQL herumschlagen musst, sondern das deine Datenbanktabellen Klassen sind, und einzelne Einträge aus der Datenbank Objekte. Sachen wie automatischer aufbau der JOINs oder das prefetchen etc. sollte eigentlich auch dabei sein. Du musst dann zum Updaten von werten kein SQL mehr wegschicken, sondern hast ein Objekt mit einem Attribut das du bearbeitest und das Updaten macht das ORM für dich etc. Ansonsten wird das SQL meist durch das ORM generiert, wodurch du meist einfach sehr flexible SQL Statements generieren kannst. Ohne das du dich damit herum schlagen musst.

Was ich so flott durch gooeln gefunden habe sagt, dass Sala ungefähr so schnell wie Java ist, welches ja doch deutlich schneller als Scriptsprache XY ist.

Nun das Wort "Skriptsprache" ist schon ein Wort das eigentlich (fast) verbant werden sollte. Ansonsten sieht das bei Webapplikationen und komplexen Anwendungen doch etwas anders aus.

80 Teichen pro Zeile (gut das steht in allen Conventions)

Besser wären sogar weniger. 76 zeichen, z.B. wenn man Code per Mail verschickt eingerückt mit ">" dann brechen die E-Mail Clients nicht um.

Wenn es jeder macht wie er will, kann man keinen Quelltext austauschen oder von woanders kopieren, denn die Einrückung ist bei Python wichtig. Und Zeichen die man nicht sieht, wo im Editor die Einrückung sogar "richtig" aussieht, in Wirklichkeit aber "falsch" ist, führen zu Fehlern, nach denen man sich dumm und dusselig suchen kann.

Der nächste Schritt in der Evolution wäre es Zeichen die man nicht sieht keine bedeutung zu schenken, damit man sich nicht dumm und duselig sucht. 😉

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4687

Wohnort: Berlin

@Sid Burn: Ich denke schon, dass man sich in mehr als einer Programmiersprache vernünftig auskennen kann.

Das bei Python die Einrückung die Absicht des Programmierers ausdrückt und so nicht so einfach Quelltexte entstehen können, wo die Einrückung etwas anderes aussagt, als der Quelltext tatsächlich tut, finde ich gut. Im letzten Jahr ist mir mindestens ein Stück Java-Quelltext untergekommen, was ich falsch interpretiert habe und zweimal hinschauen musste, weil es "falsch" eingerückt war. Das Problem bei Tabs ist nicht, dass sie "nicht sichtbar" und von Bedeutung sind, sondern das die Bedeutung eines Tabs nicht eindeutig festgelegt ist. Wenn ein Tab immer bis zur nächsten 8er-Grenze springen würde, gäb's auch keine Probleme damit.

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

@Sid Burn: Musst Du das mit der Geschwindigkeit unbedingt ausdiskutieren? Es ist doch eigentlich Allgemeinwissen, dass Perl, Ruby und Python langsamer sind als C# und Scala. Das ist auch nur teilweise auf die Implementierung zurückzuführen. Selbst IronPython oder JRuby werden nicht die Geschwindigkeit von C# bzw. Java erreichen, obwohl sie auf der gleichen Maschine ausgeführt werden.

Diese Sprachen haben einfach ein weitaus komplexeres Objektmodell als das einfache, statisch typisierte Modell hinter Java, Scala oder C#. Attributzugriffe beispielswiese kann man in letzter Konsequenz zu einfachen Speicherzugriffen kompilieren, da sich der "Ort" des Attributs zur Laufzeit nicht ändern kann.

Bei Python dagegen muss die Klassenhierarchie zur Laufzeit erstmal linearisiert werden. Dann werden der Namensraum des Exemplars sowie der Namensraum jeder Klasse der Vererbungshierarchie durchsucht, bis das Attribut gefunden wird. Jeder Zugriff auf einen Namensraum ist ein Zugriff in einem Wörterbuch. Noch komplizierter wird es dadurch, dass man den Attributzugriff mit speziellen Methoden auf verschiedene Weise überladen kann, und zwar wiederum auf jeder Ebene der Vererbungshierarchie. Letztlich sind so für einen einzigen Attributzugriff mitunter dutzende Dictionary-Zugriffe notwendig. Optimieren kann man das auch nicht so ohne weiteres, da Klassen ebenso wie Exemplare von Klassen zur Laufzeit nahezu beliebig verändert werden können.

Diese weitaus höhere Komplexität steckt nicht nur in Attributzugriffen, sondern auch in Methodenaufrufen, im Modulsystem, usw. Ruby und Perl werden wohl ähnliche Probleme haben, auch wenn Python wohl ein besonders komplexes Objektmodell hat. Python muss nahezu zwangsläufig wesentlich langsamer sein als Java, Scala, C# und dergleichen.

Antworten |