Seite 1 von 2

With-Statement

Verfasst: Samstag 26. April 2008, 11:51
von gerold
Edit (Leonidas): Diskussion von "Wann ist es Threadsafe" abgetrennt.

Hallo!

Ich empfehle *with* erst dann, wenn ich es nicht mehr mit
``from __future__ import with_statement`` importieren muss.

lg
Gerold
:-)

Verfasst: Samstag 26. April 2008, 11:56
von EyDu
Dann solltest du dir vielleicht 2.5 installieren ;-)

Verfasst: Samstag 26. April 2008, 12:17
von gerold
EyDu hat geschrieben:Dann solltest du dir vielleicht 2.5 installieren ;-)
Hallo EyDu!

Neue Server statte ich mit Ubuntu aus sobald die ersten Updates für "Ubuntu 8.04" verfügbar sind. Bis dahin bleibe ich noch bei Debian und bei Python 2.4.4.

Die meisten Kunden habe ich schon auf Python 2.5. Es fehlen nur mehr wenige. Es wird!

lg
Gerold
:-)

Verfasst: Samstag 26. April 2008, 12:42
von Leonidas
gerold hat geschrieben:Ich empfehle *with* erst dann, wenn ich es nicht mehr mit
``from __future__ import with_statement`` importieren muss.
Warum?

Verfasst: Samstag 26. April 2008, 12:53
von gerold
Leonidas hat geschrieben:
gerold hat geschrieben:Ich empfehle *with* erst dann, wenn ich es nicht mehr mit
``from __future__ import with_statement`` importieren muss.
Warum?
Hallo Leonidas!

Da ich es selber noch nicht verwende, fühlt es sich nicht gut an wenn ich es anderen empfehle. Das ist alles. :-)

lg
Gerold
:-)

Verfasst: Samstag 26. April 2008, 12:56
von Leonidas
gerold hat geschrieben:Da ich es selber noch nicht verwende, fühlt es sich nicht gut an wenn ich es anderen empfehle.
Ok, dann formuliere ich die Frage anders: warum nutzt du es nicht? Es ist in meinen Augen oft nützlich, im Locking-Beispiel sogar mehr noch als im Dateizugriff-Beispiel.

Verfasst: Samstag 26. April 2008, 13:21
von gerold
Leonidas hat geschrieben:Ok, dann formuliere ich die Frage anders: warum nutzt du es nicht? Es ist in meinen Augen oft nützlich, im Locking-Beispiel sogar mehr noch als im Dateizugriff-Beispiel.
Hallo Leonidas!

Schade, dass das hier so eine nichtssagende Stammtischdiskussion wird.

Ich verwende keine Future-Imports, da sich diese im Gebrauch für mich so anfühlen, als ob ich Beta-Tester wäre. Ich verwende neue Befehle normalerweise erst dann, wenn sie die ersten Kinderkrankheiten überstanden haben. Ein ``from __future__ import with_statement`` verwende ich also aus Prinzip nicht.

Ich werde das "with"-Statement schon noch kritisch unter die Lupe nehmen. Nur jetzt noch nicht.

lg
Gerold
:-)

Verfasst: Samstag 26. April 2008, 13:30
von Leonidas
gerold hat geschrieben:Schade, dass das hier so eine nichtssagende Stammtischdiskussion wird.
Thread getrennt, jetzt passts wieder. :)
gerold hat geschrieben:Ich verwende keine Future-Imports, da sich diese im Gebrauch für mich so anfühlen, als ob ich Beta-Tester wäre. Ich verwende neue Befehle normalerweise erst dann, wenn sie die ersten Kinderkrankheiten überstanden haben. Ein ``from __future__ import with_statement`` verwende ich also aus Prinzip nicht.
Future-Imports sind keine Beta-Features, sie sind einfach nur da um die Migration auf neuere Python-Version zu vereinfachen (siehe PEP 236 "Intent"). Es ist so weit ich weiß noch nie passiert dass das was per Future-Import eingeführt wurde, sich später ohne Feature-Import anders verhalten hat, als als es aus __future__ importiert wurde. In den nachfolgenden Python-Versionen ist der __future__-Import quasi implizit.

Verfasst: Samstag 26. April 2008, 14:32
von Y0Gi
EyDu hat geschrieben:Dann solltest du dir vielleicht 2.5 installieren ;-)
Du meinst 2.6. `with` ist erst ab 2.5 verfügbar und muss dort aus Kompatibilitätsgründen explizit importiert werden.

gerold: Wenn du deine Einstellung gegenüber `__future__` etwas zum Offeneren verschoben hast, wirst du vermutlich so wie ich empfinden, dass sich die zusätzliche Zeile lohnt, selbst wenn man `with` nur einmal im Code verwendet.

Und als Motivation: "Veränderung ist gut", "Wer nicht mit der Zeit geht, geht mit der Zeit", $random_spruch_aus_der_abteilung ;)

Verfasst: Samstag 26. April 2008, 17:25
von lunar
Y0Gi hat geschrieben:Und als Motivation: "Veränderung ist gut", "Wer nicht mit der Zeit geht, geht mit der Zeit", $random_spruch_aus_der_abteilung ;)
Naja, es schadet auch nicht, zumindest ein bisschen auf Rückwärtskompatibilität zu achten ;) Nicht alles, was alt ist, ist schlecht, immerhin verwende ich auch ``find``, ``grep`` und ``bash``, bei denen ein Großteil des Codes älter ist als ich selbst ;)

Verfasst: Samstag 26. April 2008, 18:31
von Leonidas
lunar hat geschrieben:Nicht alles, was alt ist, ist schlecht, immerhin verwende ich auch ``find``, ``grep`` und ``bash``,
Ja, aber wenn man die heute schreiben würde, würde da wohl brauchbareres rauskommen. find mit seiner seltsamen Syntax, grep mit seinen eher schwachen Regulären Ausdrücken (kein non-greedy, nicht mal in egrep?). Bash ist im Vergleich dazu moderner, aber auch da gibt es bessere Shells, etwa die Z-Shell (ich bin allerdings auch Bash-User, teilweise einfach aus Faulheit). Nicht alles etablierte muss auch stabiler sein.

Gerade das With-Statement ist fein, weil man da nicht vergisst, die Ressourcen freizugeben, wenn man sie nicht mehr braucht. Stell dir vor, hier gebe es jemanden der zu Python 2.2 kompatibel sein will, das wäre auch alles andere als Spaß.

Verfasst: Samstag 26. April 2008, 18:42
von lunar
Leonidas hat geschrieben:
lunar hat geschrieben:Nicht alles, was alt ist, ist schlecht, immerhin verwende ich auch ``find``, ``grep`` und ``bash``,
Ja, aber wenn man die heute schreiben würde, würde da wohl brauchbareres rauskommen. find mit seiner seltsamen Syntax, grep mit seinen eher schwachen Regulären Ausdrücken (kein non-greedy, nicht mal in egrep?).
Also mein grep versteht per ``--perl-regexp`` auch Perl-artige reguläre Ausdrücke und die sollten non-greedy Matching eigentlich können (behaupte ich einfach mal, ohne das probiert zu haben ;) ).

Verfasst: Samstag 26. April 2008, 18:52
von BlackJack
Dann ist das aber eine Vergleichbare Situation zum Thema. POSIX `grep` kennt diesen Schalter nicht, der ist also so ähnlich wie der `__future__`-Import.

Verfasst: Samstag 26. April 2008, 19:00
von gerold
Kommt euch diese Diskussion nicht auch ein wenig kindisch vor? 8)

Verfasst: Samstag 26. April 2008, 19:01
von lunar
BlackJack hat geschrieben:Dann ist das aber eine Vergleichbare Situation zum Thema. POSIX `grep` kennt diesen Schalter nicht, der ist also so ähnlich wie der `__future__`-Import.
GNU grep ist aber auch schon ein paar Jahrzehnte alt...

Verfasst: Samstag 26. April 2008, 19:14
von lunar
gerold hat geschrieben:Kommt euch diese Diskussion nicht auch ein wenig kindisch vor? 8)
Wir können dir ja nicht alle an Weisheit ebenbürtig sein, dann wärst du ja nix besonderes mehr ;)

Verfasst: Samstag 26. April 2008, 19:18
von Leonidas
lunar hat geschrieben:Also mein grep versteht per ``--perl-regexp`` auch Perl-artige reguläre Ausdrücke und die sollten non-greedy Matching eigentlich können (behaupte ich einfach mal, ohne das probiert zu haben ;) ).
Hmm, habe jetzt auch nachgeschaut, das kannte ich noch nicht (lt. man page "this feature is highly experimental" - wird vermutlich auch in BSD grep nnicht drin sein), ich finds gut :) Und ja, die Analogie zum With-Statement besteht, nur ist das with_statement nicht expreimentell und somit gibt es noch weniger Gründe das nicht zu nutzen.

Verfasst: Samstag 26. April 2008, 20:58
von BlackJack
@gerold: Nö kommt mir nicht kindisch vor. Wer's sagt ist's selber! Bäääh. Du bist doof, mit Dir spiel' ich nich' mehr. Das hast'e jetzt davon. =8o)

Verfasst: Samstag 26. April 2008, 22:00
von birkenfeld
gerold hat geschrieben:Kommt euch diese Diskussion nicht auch ein wenig kindisch vor? 8)
Wenn sie geholfen hat, deine falsche Auffassung von Future-Imports zu korrigieren, war sie doch zu etwas nütze, oder?

Verfasst: Samstag 26. April 2008, 23:06
von gerold
Hallo!

Es wird etwas vorgeschlagen und besprochen.

Dann wird es in die neue Python-Version einprogrammiert. Und damit es interessierte Leute in neuen Programmen verwenden können, ohne dass durch die Einführung des neuen Statements (z.B. "with") irgend ein altes Programm nicht mehr funktioniert, welches evt. "with" ganz anders verwendet, kann es nur über einen Future-Import aktiviert werden.

Da jetzt das neue Statement von vielen Leuten verwendet wird, ist vielleicht noch etwas aufgefallen was man besser machen könnte -- zumindest im Hintergrund. Das muss aber nicht sein.
Wie auch immer. In der nächsten Version ist der Future-Import nicht mehr nötig. Die Programmierer hatten genug Zeit, alte Programme zu bereinigen und zu testen. Dem Einsatz des neuen Statements steht nichts mehr im Wege.

Und während dieser Zeit hat man dann genug Zeit um Leute blöd anzumachen, wenn diese Leute Future-Imports aus Prinzip nicht verwenden, da sie sich nicht damit befassen möchten.

----

Hinter "with" steht ja nicht nur dieses eine Wort. Dahinter steht die jetzt neu in Python eingebaute Möglichkeit, eigene Objekte so zu erweitern, dass diese auch mit "with" verwendet werden können. Und diese neuen Möglichkeiten enden erfahrungsgemäß in komplizierterem Python-Code.
Python-Programme, die Dekoratoren definieren, sind ja auch komplizierter geworden. Nur fällt das denen, die so etwas fabrizieren, nicht mehr auf. Und so etwas gefällt nicht unbedingt jedem einfachen Praktiker oder Hobby-Programmierer. Erst recht nicht, wenn man das Gleiche erreicht, indem man ein wenig anders programmiert.

Man muss den Leuten Zeit lassen sich diese Neuerungen anzusehen, sich einzuarbeiten und herauszufinden ob diese Neuerungen verwendbar, gut oder totaler Schrott sind. Und bevor ich ein Fass für "with" aufmache, muss es sich bewähren und es muss ohne Future-Import verwendbar sein. Und wem das nicht passt, der soll sich selber ins Knie beißen.

mfg
Gerold
:-)