Socket-Buffer C vs C++
-
Nur Müslifresser benutzen Exceptions.
-
überlauf schrieb:
Nur Müslifresser benutzen Exceptions.
Entweder ca. 50% des Codes für Fehlerhochreichungen und passende close-Aufrufe selber coden ODER Exceptions benutzen. Mag jeder machen, wie er will. Exceptions sind zur Zeit auf PCs ein wenig schneller und brauchen nicht spürbar mehr RAM. Ist vollkommen egal, wenn ich mal anschaue, welchen schlechten Fremdcode ich auf dem Rechner habe und benutze, wo unpassende Algos verwendet werden.
-
@tntnet: Ausreden fuer Nachlaessigkeit. Wenn ich ein Messer benutze, muss mit angemessener Umsicht arbeiten, da es ihm egal ist, was es schneidet. Der Hauptgrund RAII zu nutzen ist Bequemlichkeit. Und ich mach es mir gern bequem.
Aber ich muss euch wohl nicht sagen, was hier falsch gelaufen ist.
Das haengt ganz davon ab, was
socket.read
unddoSomething
machen. Den 4 Zeilen kann ich keinen Fehler entnehmen, zeig ihn mir.
-
Ein wichtiger Grund für mich RAII für jegliche Art Cleanup zu benutzen ist, dass ich gar keinen try-Block haben will. Keinen try-Block zu haben ist nämlich sehr praktisch, z.B. wenn man Tests laufen lässt.
Dann sieht der Debugger ne unhandled Exception und hält das Programm für mich an.
Mit nemtry{}catch(...){ ... ; throw; }
steht man dann bloss dummerweise an der falschen Stelle.Wobei der wichtigste Grund natürlich ist: ich mag Code der leicht zu schreiben und leicht zu lesen ist. RAII hilft dabei enorm.
-
knivil schrieb:
@tntnet: Ausreden fuer Nachlaessigkeit. Wenn ich ein Messer benutze, muss mit angemessener Umsicht arbeiten, da es ihm egal ist, was es schneidet. Der Hauptgrund RAII zu nutzen ist Bequemlichkeit. Und ich mach es mir gern bequem.
Aber ich muss euch wohl nicht sagen, was hier falsch gelaufen ist.
Das haengt ganz davon ab, was
socket.read
unddoSomething
machen. Den 4 Zeilen kann ich keinen Fehler entnehmen, zeig ihn mir.Nachlässigkeit und Bequemlichkeit sind doch im Prinzip nur andere Worte für Effizienz. Also ich meine die Effizienz des Entwicklers. Je weniger ich mich um Aufräumarbeiten kümmern muss, desto mehr nützlichen Code kann ich pro Zeiteinheit produzieren.
socket.read
unddoSomething
sind einfach Beispiele. Wenn ich RAII verwende, dann ist mir das egal, ob sie Exceptions werfen oder nicht.hustbaer schrieb:
Ein wichtiger Grund für mich RAII für jegliche Art Cleanup zu benutzen ist, dass ich gar keinen try-Block haben will. Keinen try-Block zu haben ist nämlich sehr praktisch, z.B. wenn man Tests laufen lässt.
Dann sieht der Debugger ne unhandled Exception und hält das Programm für mich an.
Mit nemtry{}catch(...){ ... ; throw; }
steht man dann bloss dummerweise an der falschen Stelle.Wobei der wichtigste Grund natürlich ist: ich mag Code der leicht zu schreiben und leicht zu lesen ist. RAII hilft dabei enorm.
Und so nebenbei leidet die Lesbarkeit des Codes, was die Fehlerwahrscheinlichkeit erhöht, da ich den Code nicht mehr so leicht überblicken kann.
-
Was soll das hier überhaupt, niemand hat jemals etwas gegen RAII gesagt... wer hat die besseren Argumente für RAII?
-
cooky451 schrieb:
Was soll das hier überhaupt, niemand hat jemals etwas gegen RAII gesagt...
Wenn du willst:
volkard schrieb:
überlauf schrieb:
Nur Müslifresser benutzen Exceptions.
Entweder ca. 50% des Codes für Fehlerhochreichungen und passende close-Aufrufe selber coden ODER Exceptions benutzen. Mag jeder machen, wie er will. Exceptions sind zur Zeit auf PCs ein wenig schneller und brauchen nicht spürbar mehr RAM.
Kommt drauf an...
Wenn Exceptions wirklich einen Ausnahmefall darstellen, wo das Programm nicht sinnvoll weiterarbeiten kann dann sind exit oder Exceptions beide Recht.
Wenn es ein unerwarteter Fehler ist, bei dem das Programm aber trotzdem sinnvoll reagieren muss, ja, dann sind Exceptions vielleicht angemessen. Ist mir aber noch nicht oft vorgekommen. ("Write programs that do one thing and do it well." Für megamonolitische Monsterprogramme stimmt das natürlich nicht)Bei Netzwerk-Zeug kann es sehr gut passieren, dass der Datenstrom korrupt ist oder sonstwas nicht mit dem Paket stimmt. 60% gut, 40% schlecht. Dann brauchen Exceptions viel mehr Zeit und viel mehr RAM.
-
tntnet schrieb:
hustbaer schrieb:
Ein wichtiger Grund für mich RAII für jegliche Art Cleanup zu benutzen ist, dass ich gar keinen try-Block haben will. Keinen try-Block zu haben ist nämlich sehr praktisch, z.B. wenn man Tests laufen lässt.
Dann sieht der Debugger ne unhandled Exception und hält das Programm für mich an.
Mit nemtry{}catch(...){ ... ; throw; }
steht man dann bloss dummerweise an der falschen Stelle.Wobei der wichtigste Grund natürlich ist: ich mag Code der leicht zu schreiben und leicht zu lesen ist. RAII hilft dabei enorm.
Und so nebenbei leidet die Lesbarkeit des Codes, was die Fehlerwahrscheinlichkeit erhöht, da ich den Code nicht mehr so leicht überblicken kann.
Durch RAII leidet die Lesbarkeit? Kann ich jetzt nicht nachvollziehen...
-
hustbaer schrieb:
tntnet schrieb:
hustbaer schrieb:
Ein wichtiger Grund für mich RAII für jegliche Art Cleanup zu benutzen ist, dass ich gar keinen try-Block haben will. Keinen try-Block zu haben ist nämlich sehr praktisch, z.B. wenn man Tests laufen lässt.
Dann sieht der Debugger ne unhandled Exception und hält das Programm für mich an.
Mit nemtry{}catch(...){ ... ; throw; }
steht man dann bloss dummerweise an der falschen Stelle.Wobei der wichtigste Grund natürlich ist: ich mag Code der leicht zu schreiben und leicht zu lesen ist. RAII hilft dabei enorm.
Und so nebenbei leidet die Lesbarkeit des Codes, was die Fehlerwahrscheinlichkeit erhöht, da ich den Code nicht mehr so leicht überblicken kann.
Durch RAII leidet die Lesbarkeit? Kann ich jetzt nicht nachvollziehen...
Ich auch nicht
. Ich meinte, beim Verzicht auf RAII leidet die Lesbarkeit. Entschuldigt meine unpräzise Ausdrucksweise.
-
Ach so.
Das hatte ich ja schon geschrieben.
Von daher dachte ich du wirst was anderes meinen...
-
Ich meine, Vergessen von new/delete ist kein Grund fuer RAII. Sollte Vergesslichkeit/Nachlaessigkeit ein Problem sein, dann ist RAII nicht die Loesung (voellig unabhaengig von Exceptions).