Georg Bauhaus
2013-05-24 09:24:08 UTC
Moin,
wenn ein Programmtext Anweisungen zum Überprüfen von Annahmen
enthält, bspw. assert() in C, DbC in Eiffel, gleichartige
Ergänzungen in Java usw, dann sind diese Überprüfungen
i.d.R. schaltbar. In C mit dem Präprozessor, in Eiffel
per Konfiguration usw. Sind sie "logischer" Bestandteil
des Programms?
Eine Interpretation der übersetzen Programme lautet,
dass zwei Programme mit je unterschiedlichem Verhalten
entstehen, wenn die Überprüfungen an- bzw. ausgeschaltet
sind. Eine andere Interpretation lautet, konzeptionell sind
die Überprüfungen vom "eigentlichen" Programm getrennt,
denn sie müssten nicht einmal vom selben Prozessor
durchgeführt werden, sondern könnten auf einer "monitoring
hardware" laufen, hätten also auf das "eigentliche"
Programm höchstens die eine Wirkung: es geregelt anzuhalten,
wenn eine Überprüfung fehl schlägt.(*)
Gibt es Gründe, die eine oder andere Interpretation
für richtig oder falsch zu erklären, insbesondere insofern
Überprüfungen die Entwicklung des Quelltextes durch Programmierer
betreffen, die ihre Annahmen so formal dokumentieren und weiteren
Überlegungen zugänglich machen?
__
(*)Die mir etwas schlicht, formal-mechanisch erscheinende
Einschätzung der übersetzten Programme nach ihrem
Verhalten in einer gegebenen Implementierung einmal
ausgenommen; sie würde eben davon ausgehen, dass eine
Überprüfung den Programmetext so ändert, wie jede andere
Änderung am "eigentlichen" Programm, also die Frage
in Frage stellen. Ebensowenig hilfreich -- mit Bezug auf
das Entscheidende, nämlich das Entwickler-Verhalten -- wäre
das triviale Ergebnis, dass die Wirkung des einen oder
anderen Programms etwa mit oder ohne assert() eine andere
ist, was nicht in Frage steht.
wenn ein Programmtext Anweisungen zum Überprüfen von Annahmen
enthält, bspw. assert() in C, DbC in Eiffel, gleichartige
Ergänzungen in Java usw, dann sind diese Überprüfungen
i.d.R. schaltbar. In C mit dem Präprozessor, in Eiffel
per Konfiguration usw. Sind sie "logischer" Bestandteil
des Programms?
Eine Interpretation der übersetzen Programme lautet,
dass zwei Programme mit je unterschiedlichem Verhalten
entstehen, wenn die Überprüfungen an- bzw. ausgeschaltet
sind. Eine andere Interpretation lautet, konzeptionell sind
die Überprüfungen vom "eigentlichen" Programm getrennt,
denn sie müssten nicht einmal vom selben Prozessor
durchgeführt werden, sondern könnten auf einer "monitoring
hardware" laufen, hätten also auf das "eigentliche"
Programm höchstens die eine Wirkung: es geregelt anzuhalten,
wenn eine Überprüfung fehl schlägt.(*)
Gibt es Gründe, die eine oder andere Interpretation
für richtig oder falsch zu erklären, insbesondere insofern
Überprüfungen die Entwicklung des Quelltextes durch Programmierer
betreffen, die ihre Annahmen so formal dokumentieren und weiteren
Überlegungen zugänglich machen?
__
(*)Die mir etwas schlicht, formal-mechanisch erscheinende
Einschätzung der übersetzten Programme nach ihrem
Verhalten in einer gegebenen Implementierung einmal
ausgenommen; sie würde eben davon ausgehen, dass eine
Überprüfung den Programmetext so ändert, wie jede andere
Änderung am "eigentlichen" Programm, also die Frage
in Frage stellen. Ebensowenig hilfreich -- mit Bezug auf
das Entscheidende, nämlich das Entwickler-Verhalten -- wäre
das triviale Ergebnis, dass die Wirkung des einen oder
anderen Programms etwa mit oder ohne assert() eine andere
ist, was nicht in Frage steht.