Faule Auswertung und statische Typisierung sind unabhängige Konzepte.
-
Untypisiert
- Lazy evaluation Der untypisierte Lambda-Kalkül mit normaler Ordnungsreduzierungsstrategie (oder call nach Bedarf ). Immer wird zuerst der äußerste linke Redex ausgewertet.
- Eager (strict) evaluation Der untype lambda-Kalkül mit Strategie zur Reduzierung der anwendbaren Reihenfolge . Lambda-Terme werden immer reduziert, bevor sie durch andere Terme ersetzt werden.
-
Getippt
- Faule Bewertung Haskell ist ein Beispiel.
- Eager Bewertung OCaml ist ein Beispiel.
Grob gesagt, Evaluation ist etwas, das passiert, wenn das Programm ausgeführt wird. Das Eingeben geschieht, wenn das Programm kompiliert wird.
Aber natürlich gibt es eine wichtige Entsprechung zwischen einem Typisierungssystem und einer Auswertungsstrategie:
Wenn sich ein Term M auf N und reduziert: M: σ ( M ist vom Typ ) σ ) dann N: σ .
Das bedeutet, wenn wir ein Programm ausführen, das einen Typ σ hat, dann den Wert wird den gleichen Typ haben. Ohne diese Eigenschaft ist ein Tippsystem wirklich nutzlos (zumindest für die Programmierung). Dies bedeutet auch, dass wir nach Eingabe von a Programm während der Kompilierung müssen wir uns nicht an die Tippinformationen erinnern wenn wir es auswerten, weil wir wissen, dass das Ergebnis den richtigen Typ haben wird.
Betreffend den Wikipedia-Artikel, den du zitierst. Es gibt zwei verschiedene Dinge:
-
Imperative Eigenschaften. Dies hängt nicht wirklich mit einem Typisierungssystem zusammen. Das Problem ist, dass, wenn bestimmte Ausdrücke in lazy Einstellungen Nebenwirkungen (wie I / O in den meisten Sprachen) haben, es sehr schwer ist vorherzusagen, wann (wenn überhaupt) ein Nebeneffekt auftritt. Deshalb ist es nach einer faulen Bewertung kaum möglich, eine unreine Sprache zu haben.
Eine Ausnahme ist die Sprache . Es verwendet ein spezielles Typsystem, um Nebenwirkungen in einer faulen Einstellung zu behandeln. Hier besteht also eine Verbindung zwischen der Evaluierungsstrategie und dem Typisierungssystem durch die Behandlung von Nebenwirkungen: Das Typsystem erlaubt es, Nebenwirkungen so zu behandeln, dass wir eine faule Auswertung behalten können.
- Platzlecks. Dies ist ein bekannter Nachteil der Lazy Evaluation. Siehe Nicht bewertete Ausdrücke erstellen oder Kap. 25 Profiling und Optimierung in Real World Haskell. Aber wieder hat das nichts mit Typsystemen zu tun - Sie würden das gleiche Verhalten in einer untypisierten Sprache bekommen.