Diskussion zum Thema GOTO in der Shoutbox - Zusammenfassung
Vorwort :
In der Shoutbox laufen häufiger Diskussionen, die interessante Einblicke in programmiertechnische Hintergründe und Standpunkte liefern. Leider verschwinden diese Beiträge recht schnell im Archiv, und geraten dann in Vergessenheit (finde ich persönlich sehr schade).
Zudem ist die Shoutbox nur registrierten Mitgliedern zugängig, da sie auch persönliche, spaßige oder völlig themenfremde Beiträge enthalten kann.
(Info für Gäste : Die Shoutbox ist eine Art forumsinterner Kurznachrichtendienst)
Ich hoffe, ich setze mich mit dieser Zusammenfassung nicht der allgemeinen Steinigung aus .
Ich habe sehr darauf geachtet, dass keine Formulierungen vorkommen, die ich nicht auch schon in 'normalen' Forenbeiträgen gelesen hätte .
Gruß Musashi
Beiträge vom 30.01.2018 bis zum 31.01.2018 (21:08)
- die Reihenfolge ist chronologisch, beginnend mit dem ältesten Beitrag
- gravierende Tippfehler habe ich weitgehend beseitigt
- etwaige Bezüge zu Firmen etc. wurden mit [xxx] unkenntlich gemacht
Ausgangspunkt war die Frage, warum 'script breaking changes' gemacht werden :
Verfasser : AspirinJunkie
In der Regel wenn eine Entwicklung über die Zeit in eine Sackgasse gerät und nur durch einen Cut wieder ins Lot gebracht werden kann. Alternativ um die Benutzer zu erziehen , z.B. der Wegfall von goto würde mir da einfallen (obwohl ich persönlich diesem selbst nicht sehr negativ gegenüber stehe).
Verfasser : Peter S. Taler
AspirinJunkie, das ist wohl das beste Beispiel für Bevormundung. GOTO gibt Spagehtti Code, GOTO ist uncool, GOTO geht gar nicht - stundenlang könnte ich so weitermachen. Was folgt, der User wird erzogen ! GOTO wird ausgemistet. Gut der User läßt sich nicht erziehen - nun springt er halt zu Funktionen. Was ist aus der Sicht der GOTO "Hasser" daran besser ? Nichts?
Im Zweifel springe ich auch mal zu einer Funktion - finde ich manchmal sinnvoller als IF THEN ELSE noch tiefer zu verschachteln.
Verfasser : alpines
Das Problem bei GOTO ist, dass Scopes inkonsistent werden. Handles können dabei vergessen werden zu schließen und das kann schnell in einer StackOverflow-Exception enden.
Verfasser : autoiter
Zitat von Peter S. Taler :
"GOTO wird ausgemistet. Gut der User läßt sich nicht erziehen - nun springt er halt zu Funktionen. Was ist aus der Sicht der GOTO "Hasser" daran besser ? Nichts ?"
GoTo und Aufruf von anderen Funktionen ist etwas völlig anderes.
PS: Ich fand die GoTo Funktion auch nicht so schlecht. Aber wer vermisst sie schon wirklich ?
Verfasser : chesstiger
goto ist wirklich praktisch. In C z.B. benutze ich es gern. Wenn man es verantwortungsvoll nutzt, kann man so gut leserlichen und effizienten Code schreiben. Schwierig wird es nur, wenn man versucht, zwischen verschiedenen Kontexten hin und her zu springen. Da muss man schon GENAU wissen, was man tut, sonst zerschießt man sich einfach den Stack.
Verfasser : Andy
Abschließend zum Thema GOTO: Jeder Compiler erzeugt Maschinencode (genau wie ein Assembler) und in eben diesem Maschinencode wimmelt es nur so von GOTO´s. Weil es außer CALL keine anderen Sprünge gibt.
Jetzt stellt sich die Frage an die "GOTO MUSS WEG"-Fraktion, wieso das GOTO durch irgendwelche anderen Konstrukte ersetzt werden MUSS, wenn der Prozessor letztendlich doch massenweise GOTO´s verarbeitet?! Seit 30 Jahren warte ich da auf eine Antwort, aber da kommt nix....wieso auch, man müsste ja zugeben, dass der Weg von (ach so unleserlichem) Binärcode über (oh weh was ein unleserlicher) Assemblercode zu den (NATÜRLICH) wesentlich besser lesbaren "Hochsprachen" (außer Basic, das nutzen nur Noobs, das hat nämlich ein GOTO), über dummschwätzende sog. "Programmierer" geht, die mit ihrem eigenen (Spaghetti-Hochsprachen-) Code nicht mehr klarkommen!
O-Ton einer gesamten [xxx]-Abteilung auf meine Nachfrage wieso hunderte Zeilen Quellcode neu geschrieben werden anstatt den bestehenden (C-)Code zu debuggen:
"Neu schreiben geht wesentlich schneller, wir blicken in dem ursprünglichen Code selbst nicht mehr durch !"
Das war Mitte der Achtziger, und heute ist das meist nicht viel besser.....ein HOCH auf die "Hochsprachen".
EDIT :
in der O-Ton-Zeile zu [xxx], das waren natürlich hunderttausende Zeilen Code...aber die Jungs damals haben auch noch Prämien für Kommentarzeilen im Code bekommen
Verfasser : AspirinJunkie
Ich bin zwar kein Gegner von Goto, aber der Zusammenhang mit dem Assembler-Kompilat hinkt ein wenig. Dass der Code intern wieder in Goto-Konstrukte übersetzt wird widerspricht den Argumenten gegen Goto nicht. Die Probleme von Goto treten im Kompilat nicht mehr auf, da die Konstrukte der Ausgangssprache, welche im Maschinencode per Goto übersetzt werden, gar nicht die problematischen Konstrukte erzeugen können wie sie stattdessen mit Goto möglich wären.
Mit einer While-Schleife z.B. kann man halt nicht einfach mal so in den fremden Scope einer Funktion springen wie es mit Goto machbar wäre. Dennoch wird diese Schleife im Kompilat per Goto umgesetzt.
In Assembler kann man auch mit Goto viel Mist anstellen. Der Verzicht auf Goto in Hochsprachen soll hingegen dazu führen, dass der daraus erzeugte Maschinencode von derart fragwürdigen Sprunganwendungen frei bleibt.
Es gibt auch einige Regeln die, wenn sie konsequent eingehalten werden, die Problematik von Goto deutlich minimieren. Z.B. nur Vorwärtssprünge, nur innerhalb des selben Scopes etc. Jetzt wäre es jedoch am User diese einzuhalten. Daher kann ich schon verstehen, dass bei Sprachen die sich an Einsteiger- und Gelegenheitsprogrammierer richten auf Goto (und damit auch dessen Vorteile) zu Gunsten der Vermeidung dieser Fälle verzichtet wird.
Also ich kann daher damit leben, dass die AutoIt-Entwickler Goto aus AutoIt entfernt haben.
Bei sowas wie C würde ich es nicht verstehen. Daher habe ich auch wenig Verständnis für das Fehlen von Goto in Java.
Verfasser : chesstiger
Das könnte man ja vorschreiben. Wenn man Goto implementiert, kann man ja Regeln festlegen.