[Dune] Range Checking
Oliver Sander
sander at mi.fu-berlin.de
Fri Aug 26 12:26:09 CEST 2005
Hallo!
> Dem stimme ich zu, bei assertions geht es aber auch halbwegs, wenn ein
> Kommentar dabei steht (oder sie offensichtlich ist, wie z.B. "assert(i
> < max)")
Ja, aber es ist genau dieses 'halbwegs', was mich stört. Denn wir
müssen damit rechnen, daß Leute DUNE verwenden, die keine erfahrenen
Programmierer sind [ich schreibe dies aus gegebenem Anlaß!].
Wenn möglich sollten wir _deutliche_ Fehlermeldungen generieren,
die es unnötig machen, im Code nachzuschauen, was jetzt eigentlich
genau passiert ist.
>
>> Als weitere, nicht so wichtige
>> Gründe fallen mir noch ein, daß man Exceptions abfangen kann,
>> falls man das tatsächlich mal will.
>
> Das würde mich überzeugen, wenn jemand einen Algorithmus hat, der auf
> Indexfehler hin geeignet reagiert. Nur eine Fehlermeldung auszugeben
> kann im Prinzip auch die Assertion.
>
Mir ist auch keine Anwendung dafür eingefallen ;-). Aber nur weil
_mir_ dazu nichts einfällt heißt das ja noch nicht, daß es nicht
vielleicht doch jemand anderes gebrauchen kann.
> Alternativ könnte man natürlich versuchen, einen Trick wie bei den
> debugstreams zu verwenden, d.h. ein Objekt, dessen Aktion man global
> verschwinden lassen kann, zu konstruieren. Das fände ich gar nicht
> schlecht, weil mit Seiteneffekten nicht reinfallen kann.
Ja, auch das könnte man versuchen. Aber mir erscheint es etwas
übertrieben kompliziert.
>
>> Außerdem habe ich den
>> Eindruck, daß gdb besser mit Exceptions als mit Asserts
>> umgehen kann.
>
> Das kommt ganz darauf an... je nach Compiler/gdb-Version funktioniert
> "catch throw" oder auch nicht; bei Assertions kann man den
> entstehenden core (meiner Erfahrung nach) zwar auch nicht immer zum
> post-mortem Debugging verwenden, wenn man das Programm aber gleich im
> gdb laufen lässt findet man (nach einigen "up" natürlich) immer die
> Problemstelle. Das ist bei Exceptions etwas kitzliger.
>
Hmm, also ich hatte umgekehrt eher mit asserts Probleme, aber das
ist wohl wirklich bei jeder Version von gdb anders.
Ich finde, es gibt nichts, was wirklich gegen DUNE_THROW und #ifdef
spricht. Es ist einfach, es bietet alle Features die man haben will
und es verschwindet komplett, wenn man schnellen Code braucht.
Viele Grüße,
Oliver
More information about the Dune
mailing list