Exit in Funktion

Für Fragen von Einsteigern und Programmieranfängern...
Benutzeravatar
Winni
Beiträge: 1091
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.0.12, fpc 3.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Exit in Funktion

Beitrag von Winni »

Hi!

@six1:

Ich schwör Dir : Jedes Element der Sprache Pascal ist sehr wohl überlegt - da ist nix zwischen Frühstück und Mittag entschieden worden. Und da sind auch erbitterte Debatten geführt worden. Jedenfalls seinerzeit bei UCSD-Pascal und Ken Bowles und seinen Leuten.

Und wenn Compiler-Bauer beschlossen haben ein Element in die Sprache einzubauen, so ist es für die Benutzung da. Die einzige Ausnahme mache ich da bei Label/Goto: Das ist wohl eher als Zugeständnis an die 60er Jahre und deren Programm-Strukturen zu werten .

Und die Debatten gehen ja weiter. Eher zur Belustigung empfehle ich die Debatte, die einmal im Jahr im internationalen Forum auftaucht: Warum ist das nicht möglich:

Code: Alles auswählen

var i,k,l : Integer = 42;

Programmiersprachen sind dem Wandel unterworfen. Wenn sie schon im ursprünglichen Design gut sind, muss nicht allzuviel geändert werden - wie Pascal.

Bei C musste dann in der 80ern erstmal alles Möglich rangeschnitzt werden, was bei Pascal schon immer Standard war - Range checking zum Beispiel. .

Winni

Benutzeravatar
six1
Beiträge: 558
Registriert: Do 1. Jul 2010, 19:01

Re: Exit in Funktion

Beitrag von six1 »

.ja, ich verfolge manchmal im englischen Teil die Diskussionen um neue Bestandteile der Sprache Pascal; manchmal sehr heftige Standpunkte 8)
Gruß, Michael

Warf
Beiträge: 1598
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Exit in Funktion

Beitrag von Warf »

Winni hat geschrieben:
Di 21. Dez 2021, 18:54
Und wenn Compiler-Bauer beschlossen haben ein Element in die Sprache einzubauen, so ist es für die Benutzung da. Die einzige Ausnahme mache ich da bei Label/Goto: Das ist wohl eher als Zugeständnis an die 60er Jahre und deren Programm-Strukturen zu werten .

...

Programmiersprachen sind dem Wandel unterworfen. Wenn sie schon im ursprünglichen Design gut sind, muss nicht allzuviel geändert werden - wie Pascal.
Naja, nicht jede Idee die in Pascal eingebaut wurde war eine gute Idee, auch wenn sie vielleicht gut überlegt wurden. Und das sich nicht so viel an Pascal ändert ist nicht unbedingt ein Zeichen das Pascal schon von anfang an sehr gut Designed war, vielleicht heißt es einfach nur das die Sprache sehr schwer zu entwickeln ist (z.b. wegen Rückwertskompatibilität). So ist C dessen letzte version 2018 raus kam immernoch im Kern extrem ähnlich zu dem C vor 50 Jahren.

Wenn man von vorne Anfangen würde und eine Pascallische Sprache von 0 aufbauen würde, dann würde man definitiv nicht nochmal bei Pascal ankommen. Tatsächlich hat Wirth das ja auch 2 mal gemacht, seine Letzte Sprache Oberon 07 ist so zu sagen das ergebnis von Jahrzehntelanger erfahrung mit Pascal und Modula, und es macht einige Sachen fundamental anders. Zum beispiel nutzt Oberon Garbage Collection statt manueller Speicherverwaltung wie wir sie in Pascal haben. Natürlich aus heutiger sicht relativ offensichtlich und niemand würde heutzutage mehr eine Sprache mit manueller Speicherverwaltung bauen (auch wenn sich die Leute die Köpfe einschlagen ob Garbage Collection oder Reference Counting besser ist), aber eine solch tiefgreifende Änderung kann man in Pascal nicht einfach umsetzen.

Vor allem würde ich Einschätzungen und Entscheidungen was Programmiersprachenfeatures in der Vergangenheit angeht generell eher kritisch sehen, vor allem aus den 70ern und 80ern da damals einfach das Feedback der Entwickler ein ganz anderes war. Die Gremien waren Professoren die ihre 100 Studenten oder so hatten, die sie persönlich in den Sprachen unterrichtet haben, von denen sie Feedback bekommen haben. Programmiert wurde hauptsächlich an Universitäten und Großen Unternehmen, heute kann Jeder mit einem PC und Freizeit programmieren und über das Internet seine Erfahrungen und seinen Code teilen. Sachen die heute Offensichtlich erscheinen konnte man damals einfach nicht wissen, z.B. in den 60ern hat C.A.R. Hoare in Algol W die Null Pointer eingeführt, etwas das er 2009 als seinen "billion dollar mistake" bezeichnete:
I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn't resist the temptation to put in a null reference, simply because it was so easy to implement. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years.
Rückblickend sind null pointer keine gute Idee, dennoch waren sie damals sehr beliebt und haben es in so ziemlich jede Sprache (inklusive Pascal) geschafft.
Das war halt einfach eine Idee die auf Papier gut klang und von so ziemlich jedem Programmiersprachen Komitee als gut emfpunden wurde, aber rückblickend sich als enormen Fehler rausgestellt hat, und moderne Programmiersprachen wie Rust (2011) Typescript (2012) oder Swift (2014) haben einfach keine null pointer mehr um diese Problematik zu umgehen.
Allerdings, genauso wie mit der Garbage collection sind null pointer so fundamental in Pascal verankert, das man das einfach nicht mehr nachträglich ändern kann.

Jede Sprache wird zwangsläufig gute und schlechte Konzepte mit sich bringen und es braucht Zeit und Erfahrung um zu ermitteln welche gut und welche Schlecht sind. Sprachen die schon lange existieren wie Pascal sind natürlich nicht so anpassungsfähig und damit sitzt man nunmal auf schlechten konzepten (ie z.B. Null Pontern) rum, dafür haben sie sich allerdings schon über die Zeit bewährt. Neue Sprachen haben die Freiheit neue Konzepte auszuprobieren die man in alte Sprachen niemals so umsetzen könnte, aber müssen sich natürlich erst bewähren und können mit solchen experimenten natürlich auch ganz schön ins Klo greifen.
Deshalb finde ich es immer äußerst interessant neue Programmiersprachen oder neue Versionen bereits existierender Programmiersprachen zu betrachten. Diese haben die Möglichkeit einmal auf die gesammte Historie an Programmiersprachen zu schauen und sich zu nehmen was sich bewährt hat und wegzuschmeißen was sich als Fehler rausgestellt hat, sowie selbst neue Konzepte auf dieser Basis aufzubauen. Und viele Konzepte davon schaffen es ja auch in die alten Sprachen wie Pascal, z.B. anonyme funktionen / lambdas gibt es schon länger in Delphi und sind seit mehreren Jahren auch auf der ToDo liste der FPC Entwickler.
Das interresante ist das oftmals diese Konzepte nicht mal neu sind, sondern die Integration mit anderen Sprachen das innovative ist. Z.B. sind viele der neuen features heutzutage (z.b. lambdas) aus der Funktionalen und Logischen Programmierung, ein paradigma das auch schon existiert seit dem es Computer gibt.


Um wieder die Brücke zurück zu schlagen, ein Exit wie das C return statement ist vielleicht nicht Teil der originalen Vision von Pascal gewesen aber rückblickend hat es sich sehr bewährt in den anderen Sprachen, sowie seit dem es in Pascal verfügbar ist auch in Pascal. Damit kann mir herzlichst egal sein ob es der Ursprünglichen Pascal Vision entspricht oder nicht, es ist ein gutes Feature und hat sich als solches bewährt, und das ist alles was Zählt.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1013
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Exit in Funktion

Beitrag von fliegermichl »

Warf hat geschrieben:
Di 21. Dez 2021, 02:26
fliegermichl hat geschrieben:
Mo 20. Dez 2021, 20:27
So richtig sauberer Stil ist das mit exit aber nicht (Mit oder ohne Rückgabe)
Das ist so wie mit Label und goto, die man zwar verwenden kann aber nicht sollte.
Da muss icj ganz klar widersprechen.
Ich hab grad in einem meiner größeren Projekte "Suche in Dateien des Projektes" nach exit suchen lassen. 1854 Treffer.
Also ich benutze es auch sehr oft.
Bei neueren Sachen versuche ich es zu dennoch zu vermeiden.

Benutzeravatar
kupferstecher
Beiträge: 348
Registriert: Do 17. Nov 2016, 11:52

Re: Exit in Funktion

Beitrag von kupferstecher »

theo hat geschrieben:
Di 21. Dez 2021, 17:57
Wenn man in "begin...end"-Blöcken denkt, kann ein verstecktes "exit" schon ein wenig kryptisch sein, bzw. man kann es in der Analyse des Programmflusses übersehen.
Deshalb schreib ich EXIT, BREAK und CONTINUE immer in kompletter Großschreibung. Das sticht dann ins Auge.

Antworten