Ich studiere Programmiersprachentheorie und ich kann nicht einen festen Grund herausfinden, warum faule Sprachen keine Mutation haben. Wer kennt den Grund?Warum unterstützen nicht faule Sprachen Mutation?
Antwort
Faulheit bedeutet, dass eine Funktion nicht tatsächlich ausgewertet wird, bis (oder sofern) ihr Rückgabewert verwendet wird. Dies bedeutet, dass Funktionsaufrufe nicht unbedingt in der Reihenfolge ausgewertet werden, in der sie im Code erscheinen. Es bedeutet auch, dass es keine void-Funktionen geben kann, da sie niemals ausgewertet würden (da es nicht möglich ist, einen Rückgabewert zu verwenden, der nicht existiert).
Jedoch für Funktionen, die Nebenwirkungen (wie Mutation, aber auch nur auf dem Bildschirm) ausführen, ist es wichtig, in welcher Reihenfolge sie ausgeführt werden. Es kommt noch mehr darauf an, dass sie überhaupt ausgeführt werden. Dies bedeutet, dass faule Sprachen eine Möglichkeit benötigen, um Nebenwirkungen in speziellen Typen zu emulieren, die sicherstellen, dass sie in der richtigen Reihenfolge ausgeführt und ausgeführt werden.
Da völlig nebenwirkungsfreie Programme nutzlos sind (Sie müssen in der Lage sein, auf dem Bildschirm überhaupt zu drucken), unterstützen faule Sprachen tatsächlich Nebenwirkungen. Sie kapseln sie einfach mit den IO-Monaden oder Eindeutigkeitstypen ein. Als ein Beispiel hat haskell veränderbare Arrays, aber sie können nur innerhalb der IO-Monade verwendet werden.
Um es anders auszudrücken: Es ist nicht so faul Sprachen * kann * keine Mutation haben, es ist, dass Sie nicht wollen * * es. –
danke für die Antwort – forellana
Während interaktive Programme Nebenwirkungen erfordern, können nicht-interaktive Programme nützlich sein, auch wenn sie völlig nebenwirkungsfrei sind. Sie können nur ein Ergebnis an den Aufrufer zurückgeben. –
Mutation bedeutet, dass Sie sich zu keinem Zeitpunkt des Programmstatus sicher sein können und sich über mögliche Nebenwirkungen Gedanken machen müssen. Ich habe darüber nachgedacht und kann mir keinen Weg vorstellen, eine völlig faule Sprache zu haben, die Mutation unterstützt. (Ich bin kein Computerwissenschaftler obwohl.)
danke für die Antwort – forellana
klar, ich bin nicht ein englischer Muttersprachler, danke für die Korrekturen – forellana