Diskussion:Undefiniertes Verhalten
Undefiniert vs. unspezifiziert
BearbeitenDieser Artikel sieht im Einleitungssatz Undefiniertes Verhalten beschreibt ... Code, dessen Verhalten nicht spezifiziert ist ... die beiden Attribute als gleichbedeutend an. Die englische Wikipedia leitet den Artikel ueber undefined behavior dagegen mit dem Hinweis ein, dieses sei nicht zu verwechseln mit unspezifiziertem Verhalten (unspecified behavior): Undefiniertes Verhalten sei dagegen nur ein Verhalten, fuer das spezifiziert ist, das es unvorhersehbar sei.
Beide Artikel geben fuer diese widerspruechlichen Kernaussagen jedoch keine Quellen an, so dass ich nicht sicher weiss, wer hier irrt, aber es liegt nahe, dass der Irrtum auf der deutschen Seite liegt. -- Juergen 217.61.203.35 08:45, 5. Aug. 2020 (CEST)
- Ja, du hast recht. C und C++ kennen
- undefined behavior
- unspecified behavior
- implementation-defined behavior
- welche völlig unterschiedliche Auswirkungen auf das Programm haben. Da muss der Artikel präziser werden, wenn er das durcheinander wirft. --RokerHRO (Diskussion) 23:28, 8. Aug. 2020 (CEST)
Nachtrag: Okay, hab den Artikel mir durchgelesen. Mein Fazit: Wegschmeißen und neuschreiben. :-/
Bevor ich damit anfange, würde ich aber gerne wissen, ob es so etwas wie "Undefiniertes Verhalten" nur bei C und C++ gibt, oder auch bei anderen Programmiersprachen. Und dann, je nach dem, den Artikel entweder auf C und C++ eingrenzen oder generischer fassen und den C/C++-Teil in einem eigenen Abschnitt behandeln. Wer weiß da mehr bezügl. anderer Programmiersprachen? --RokerHRO (Diskussion) 23:33, 8. Aug. 2020 (CEST)
- Soweit ich mich erinnere, gibt es ähnliche Angaben für CPUs (für Assembler-Programmierung), z.B. für Opcodes, die offiziell "nicht vergeben" sind. Z.B. gibt es CPUs, in denen eine Funktionalität (erstmals) implementiert wurde, diese aber entweder fehlerhaft oder nur unter bestimmten Randbedingungen korrekt arbeitet. Der Hersteller probiert's mit dieser CPU-Generation erst mal selbst aus, erst in der Nachfolgegeneration wird die Funktionalität dann offiziell freigegeben, meist überarbeitet und fehlerbereinigt.
- Bzgl. Programmiersprachen gibt's natürlich ähnliches, dass ein (neues) Feature noch als "experimental" oder "unstable" gilt.
- Ansonsten versuchen wohl die meisten Sprachen, zumindest "undefined" und "unspecified" auszuschließen.
- Bei (altem) Fortran gibt's noch sehr hardwarenahes Verhalten. Z.B. wird nicht überprüft, ob bei einem Unterprogrammaufruf die mitgegebenen Parameter auf die Typen passen, die das Unterprogramm erwartet. Z.B. kann man eine Prozedur, die deklariert ist für Parameter (INT32, REAL64, INT32) auch aufrufen mit (INT32, INT32, INT16, INT16, INT32). Der Compiler übersetzt es, das Programm stürzt halt ab - oder auch nicht.
- --arilou (Diskussion) 09:52, 27. Okt. 2020 (CET)
Spezialität von C und C++
BearbeitenDieser Artikel beschreibt eine Spezialität, die in C und dem davon abgeleiteten C++ vorkommt. Andere Programmiersprachen wie z.B. Fortran haben da andere Konzepte. Daher wäre es vermutlich am besten, den relevanten Inhalt dieser Seite auf die Seiten C und C++ zu verschieben und unter "Undefiniertes Verhalten" eine Begriffsklärung mit den Verweisen auf die entsprechenden Abschnitte in C und C++ abzulegen. Trex4321 (Diskussion) 19:55, 25. Aug. 2021 (CEST)
- Dagegen, denn zum einen sind die Artikel über C und C++ schon arg lang, und zum anderen müsste man die Informationen aus diesem Artikel dann in beiden Programmiersprachartikeln doppeln.
- Besser wäre ein Artikel "Undefiniertes Verhalten (C/C++)" oder so, sofern es eben noch andere Programmiersprachen gibt, die das Konzept des "Undefinierten Verhaltens" kennen. Bisher habe ich diesen Begriff aber nur im C- und C++-Umfeld gehört. --RokerHRO (Diskussion) 21:29, 1. Sep. 2021 (CEST)