Eine vereinfachte Antwort lautet: Wenn Sie einen Namen in einer rein funktionalen Sprache sehen, wissen Sie, was der zugehörige Wert ist, indem Sie seine Definition einfach nachschlagen. Wenn Sie veränderbare Variablen haben, können Sie nur anhand der zuletzt ausgeführten Zuweisungen feststellen, welche der verschiedenen Zuweisungen zuletzt ausgeführt wurden. Daher müssen Sie auch den Kontrollfluss analysieren, der wiederum von bestimmten Bedingungen abhängig sein kann, sodass Sie mehrere Möglichkeiten haben. Um eine exponentielle Explosion zu erhalten, müssen Sie lediglich berücksichtigen, dass die RHS der Zuweisungen selbst von Variablen abhängig sind, und sie müssen daher auch rekursiv analysiert werden.
Das Fazit der obigen Analyse ist, dass es unhaltbar ist, wenn keine Kommentare zu Absicht, Invarianten und Semantik abgegeben werden: Diese können schwer zu interpretieren sein und es kann schwierig sein zu überprüfen, ob die Semantik im tatsächlichen Code eingehalten wird.
Diese Antwort ist im Grunde eine Erweiterung von @ Javiers Punkt 1.
Ich denke, es ist auch eine Erklärung für die Popularität des betrügerischen OO-Regimes: Bei OO ist der veränderbare Zustand eingekapselt, was die Analyse erheblich erleichtert, indem die Mutationen zu einem gewissen Grad lokalisiert werden und eine wesentlich robustere Darstellung und Verifizierung der Semantik ermöglicht wird.
In Anbetracht dessen ist funktionale Programmierung nicht die Antwort. Die richtige Antwort ist ein System, das sowohl induktive (funktionale) als auch koinduktive (prozedurale) Programmierung unterstützt, sodass die richtigen Tools sowohl für die zustandslose als auch für die zustandsbehaftete Programmierung geeignet sind. Es ist nur so, dass die konstruktive (funktionale) Theorie gut etabliert ist, während die Theorie des Staatsmanagements noch in den Kinderschuhen steckt.