Post by Stefan ReutherPost by Rainer Weikusat[...]
Post by Peter J. HolzerPost by Rainer WeikusatDie Volkswagen-AG hat fraglos die Berechtigung, ihren angestellten
vorzuschreiben, welche Programmiersprachen diese wie verwenden sollen.
Wenn ein externer Dienstleister für uns Code schreibt, haben wir
zweifellos genau die gleiche Berechtigung, ihm vorzuschreiben, welchen
formalen Kriterien dieser Code zu entsprechen hat.
Begrenzt. Eine Vorgabe "Rekursion darf nicht benutzt werden" kann man
zwar machen, aber es ist jedem freigestellt, dass als sachfremden Unfug[*] zu
anzusehen und solche Auftraege nicht anzunehmen[**].
[*] Der Gedanke, das Leute, denen man nicht die Fachkompetenz zutraut,
Rekursionen sinnvoll zu benutzen, Automobile-Steuersoftware
entwickeln, ist recht erschreckend [***].
Jemand, der annimmt, eine solche Regel stünde unverrückbar in MISRA, hat
das MISRA-Dokument offenbar nicht gelesen.
Ja, da gibt es eine Regel, die Rekursion untersagt. Das heißt noch lange
nicht, dass man keine machen darf. Sondern das heißt nur, dass man, wenn
man der Meinung ist, welche zu brauchen, sich ein paar gesonderte
Gedanken machen und zu Papier bringen muss.
Hmm ... naja ... der Nutzen von Rekursion in C ist hauptsaechlich, dass
man unter geeigneten Umstaenden und falls der Overhead keine Rolle
spielt, den Computer/ Compiler dazu kriegen kann, Speicher fuer eine
Menge von Zustandsinformation dynamischen Umfangs automatisch zu
verwalten. Dh es wird weniger und vor allem einfacherer Code benoetigt,
was Arbeitszeit spart und Fehlermoeglichkeiten reduziert.
Wenn man allerdings genoetigt ist, einen mehrseitigen Aufsatz "Warum ich
das so und nicht anders fuer richtig halte" zu verfassen, um sich fuer
die Verwendung zu rechtfertigen, anstatt etwas fuer produktiv gehaltenes
zu tun, zusaetzlich seinen Vorgesetzen damit auf die Nerven faellt,
"schon wieder" aus der Reihe zu tanzen, und man ausserdem fuer die
Mehrarbeit genausogut bezahlt wuerde, duerfte die Entscheidung "Soll ich
das wirklich benutzen?" im gewuenschten Sinne ausfallen, naemlich "Das
sei ferne!".
Post by Stefan ReutherDer handfeste Vorteil beim Verzicht auf Rekursion ist, dass man mit
relativ einfachen, robusten Tools Dinge wie den maximalen Stack-
verbrauch ermitteln kann.
Das scheint mir keinen Sinn zu ergeben: Der 'maximale Stackverbrauch'
haengt davon ab, wie ein Compiler jede einzelne Funktion uebersetzt, und
welches die Folge von Funktionsaufrufen ist, die den meisten
Stackspeicher belegen wird.
Hier scheinen mir noch ein paar mehr "robuste Einschraenkungen" noetig
wie zB "ausschliesslich globale Variablen benutzen" und "keinerlei
Unterroutinen benutzen" (erst recht keine, die andere aufrufen).
[...]
Post by Stefan ReutherMan kann natürlich auch die Finger in die Ohren stecken, "*lalala* die
sind ja alle doof *lalala*" rufen, und hoffen, dass im Hintergrund ein
Kernel nebst virtuellem Speicher läuft, der die notwendigen Bytes für
den Stack schon irgendwo herzaubert.
Oder man kann eine Programmiersprache, die Rekursion unterstuetzt, fuer
eine PDP-11 ohne virtuellen Speicher und mit sehr wenig Hauptspeicher
entwerfen. Zeitgleich hat sich wohl auch jemand die Finger in die Ohren
gesteckt und angefangen, "lalala die sind alle doof!" zu singen
(eventuell ca 10 Jahre frueher) und wenn er nicht gestoreben ist, tut er
das heute noch.