Diskussion:Programmfehler/Archiv/2005

message: Ich stimme nicht ganz damit ueberein, Laufzeitfehler und semantische Fehler gleichzusetzen. Unentdeckte semantische Fehler koennen zwar Laufzeitfehler hervorrrufen, aber sind nicht Fehler, die erst zur Programmlaufzeit als Fehler zum Vorschein treten. Zum Beispiel, in einer Programmiersprache mit einem strikten Typensystem sind Typfehler semantische Fehler, die ohne jegliche Programmausfuehrung schon als Fehler analytisch entdeckt werden koennen. Laufzeitfehler sind meinem Verstaendnis nach Fehler, die der semantischen Definition einer Programmiersprache zuwider laufen (z.B. den Typregeln), jedoch zur Laufzeit ein ungewuenschtes Ereignis oder Ergebnis produzieren. Ein klassischer Vertreter eines Laufzeitfehlers ist z.B. eine versuchte Division durch null in einem Ausdruck a/b wobei a und b numerische Variablen sind. Semantisch ist dieser Ausdruck korrekt, sofern a und b als numerische Typen auf denen eine Division erlaubt ist definiert sind. Nicht jeder Laufzeitfehler ist damit ein semantischer Fehler, zumindest wenn es um die Semantik der Programmiersprache geht. Mir faellt jetzt auch kein besserer Begriff ein, Fehler zu benennen, die durch einen unachtsamen Programmierer hervorgerufen werden (beispielsweise durch eine ungepruefte Division durch null). Vorschlaege meinerseits waeren "logischer Fehler" oder "systematischer Fehler", jedenfalls nicht semantischer Fehler. --82.41.49.115 01:47, 24. Jan. 2005 (nachträglich signiert von Bodo Thiesen)
: Ein Laufzeitfehler ist ein Fehler, der zur Laufzeit auftritt (gegenüber einem Fehler, der zum Zeitpunkt des Compilierens oder Linkens auftritt). Dabei ist es unerheblich, ob dieser Fehler durch das Fehlen einer Fehlerbehandlung (na, konnte die Datei geöffnet werden?), einen Tippfehler im Programm (a/b statt a&b) oder durch andere Dinge auftritt. Relevant ist einzig, daß das Programm nicht das tut, was es tun sollte. Ein semantischer Fehler ist ein nicht formaler Fehler, also auch ein Fehler, der sich durch erzwungene Typen-Checks nicht feststellen lässt. In C kann ich z.B. einen beliebigen Wert des Typs unsigned long in eine Variable des Typs unsigned char schreiben, und habe dabei 100% definiertes Verhalten. Wenn dabei wichtige Informationen verloren gehen, ist das ein semantischer Fehler. In C kann mir da aber die Technik (also der Compiler) nicht helfen, denn ich darf das machen, und in den meisten Fällen, in denen man das macht, will man das auch. Ada (kenne ich selbst nicht) soll wohl typensicherer sein, dort soll man auch Wertebereiche noch stärker eingrenzen können (z.B. diese Variable darf nur die Werte von 10 bis 50 haben, aber nicht die 23 und auch nicht die 42). Dort sind dann natürlich viel weitreichendere Prüfungen (formal) möglich, was aber eine Zuweisung des Wertes 42 zu dieser Variable zu einem formalen und damit nicht mehr semantischen Fehler macht. Dadurch wird er dann auch automatisch feststellbar. Ada schützt mich aber nicht davor, dort den Wert 15 rein zu schreiben, wenn ich doch eigentlich den Wert 25 reinschreiben wollte - das wiederum ist und bleibt ein semantischer Fehler. (Eine folgende Multiplikation mit 3 würde aber spätestens die Laufzeitumgebung erkennen, bei guten Compilern vielleicht schon dieser.) --Bodo Thiesen 04:37, 11. Mär. 2008 (CET)
thread_title:  Laufzeitfehler vs semantische Fehler