Weitverbreitete Programmiermythen...
Geizhals » Forum » Programmierung » Weitverbreitete Programmiermythen... (43 Beiträge, 735 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
Weitverbreitete Programmiermythen...
28.03.2006, 14:59:44
Hi !

Weil ich in einem anderen Thread drüber gestoßen bin - machen wir doch den allgemeinen... Ich beginne mal - plus der Erläuterung, warum's Mythen, net Fakten sind

Mythos: In Java/C# gibt's keine Pointer.
Dadurch wird eine beliebte Fehlerquelle vom Programmierer genommen - und Programme tendenziell schneller und sauberer fertig.

Nun ja... Leider falsch.
In Java und C# wurden Pointer mal umbenammst - in Referenzen...
Und nachdem man - sobald man Cachen will - sinnvollerweise auf weak references ausweicht, sieht's ja so aus:
1.) weak references mit null initialisieren
2.) vor jedem Zugriff checken, ob die Referenz net durch den GC null wurde
3.) notfalls Objekt instanzieren
.... Sieht verdächtig ähnlich nach umständlicher Pointerbehandlung aus ;-)


Mythos: Goto considered harmful.
Goto's sind ein Hinweis auf schlecht strukturierte Programme und sind zu vermeiden

Fakt ist vielmehr, daß Goto's (beziehungsweise deren Erweiterungen longjmp und setjmp wertvolle Tools sind - auf die man nicht verzichten sollte.

Angenommen, du bewegst dich tief unten in Subroutinen - besonders aktuell bei Rekursivem Code.
Natürlich kann man alles mit 150tausend Klammern lösen und jedes mal den Stackframe beim Return wiederherstellen lassen und sich nach oben durchhangeln... Stattdessen kann man eben das System mit einem einzigen longjmp entlasten. Sinnvoll eingesetzte Goto's sind wertvoll...





Antworten PM Übersicht Chronologisch
 
Melden nicht möglich
..
Re(2): Weitverbreitete Programmiermythen...
28.03.2006, 15:31:52
Hmmm... Dachte ich mir doch gleich, daß setjmp/longjmp net gerne geschluckt wird ;-)

Ich glaube aber, daß wir uns da alle in was verrannt haben.
Ich vermute mal, daß viele von uns (zumindest aber ich)
- mit Basic/Asse/sonstigem Spaghetti-Code begonnen
- die Programme zwar funktionierten, wir die aber nie wieder angreifen wollten
- Erweiterungen ziemlich unmöglilch bis absurd wurden
- Prozedurale Sprachen uns ein anderes Herangehen an Probs ermöglichten
- und wir alle brav aus aller Fachliteratur lernten, daß goto's crappy sind.

Ich dachte bis vor wenigen Jahren genauso... Bis ich mir "Advanced Programming in the Unix Environment" vom Stevens reingezogen habe - und wie alle seiner Bücher betrachte ich auch das als eine Bibel... Siehe da, er brach eine Lanze für setjmp/longjmp - und er hat bei genauerer Betrachtung absolut Recht.

Also ich persönlich habe mich des öfteren bei Standard-Anfängerspielen gefragt (zB einem Othello-Spiel nach min/max-Algo), wieso andere Programme massiv flotter waren... Nun ist's mir klar ;-)

jmp's werden sehr selten verwendet - eben [auch] weil wir es uns alle so einlernten. Bei einem Code-Review meiner Sourcen nach Lesen des Buches fand ich vieles, was sich einfacher, sinnvoller und Ressourcenschonender via setjmp/longjmp lösen ließ... und wirklich spürbar performanter, nicht nur meßbar.

EDIT:
Das "Einfacher" streich ich mal... Zumindest Lesbarer ist [für mich] "sauberer" prozeduraler Code... Kann aber auch schlichte Gewöhnungssache sein.

28.03.2006, 15:40 Uhr - Editiert von gepeinigter_aon_neukunde, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
.
Re: Weitverbreitete Programmiermythen...
29.03.2006, 01:41:34
Fakt ist vielmehr, daß Goto's (beziehungsweise deren Erweiterungen longjmp und
setjmp wertvolle Tools sind - auf die man nicht verzichten sollte.

Angenommen, du bewegst dich tief unten in Subroutinen - besonders aktuell bei
Rekursivem Code.
Natürlich kann man alles mit 150tausend Klammern lösen und jedes mal den
Stackframe beim Return wiederherstellen lassen und sich nach oben
durchhangeln... Stattdessen kann man eben das System mit einem einzigen
longjmp entlasten. Sinnvoll eingesetzte Goto's sind wertvoll...


Das ist - mit einem Wort - Unsinn.

a) nachlesen, was TRO ist und wann ein Compiler das machen kann

b) nachlesen, wie unsauber longjmp() normalerweise implementiert ist und wo es überall Probleme bereiten kann ... In modernen Sprachen gibt es nicht ohne Grund try/catch usw.

Ein goto ist höchstens dann "wertvoll", wenn Code dadurch einfacher wird, das ist aber sehr selten der Fall (meistens ist es nur Denkfaulheit, die dazu führt).


mjy@geizhals.at
Warum sollten wir es Unternehmen mit Eigeninteresse erlauben, das Gleichgewicht der freiheitlichen Grundrechte aus dem Lot zu bringen und dabei die Rede- und Ausdrucksfreiheit, die freien Märkte, den wissenschaftlichen Fortschritt, die Verbraucherrechte, die Gesellschaftsstabilität und das Ende des materiellen und informationstechnischen Mangels aufs Spiel setzen? Weil jemand ein Lied klauen könnte? Das erscheint mir doch als ziemlich fadenscheinige Ausrede.
-- John Gilmore
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung