Frage

Wikipedia-Artikel über Effect System ist derzeit nur eine kurze Stummel, und ich habe für eine Weile fragen, was ist ein Effekt-System.

  • Gibt es Sprachen, die eine Wirkung System zusätzlich zu einem Typ-System?
  • Was wäre eine mögliche (hypothetische) Notation in einer Mainstream Sprache, dass Sie vertraut sind, mit Blick wie mit Effekten?
War es hilfreich?

Lösung

Ein „Typ und Effekt-System“ beschreiben nicht nur die Arten von Werten in einem Programm, aber die Änderungen in diesen Werten. "Typestate" Kontrolle ist eine verwandte Idee.

Ein Beispiel könnte eine Art System, das Dateispuren behandelt: Statt eine Funktion close mit Rückgabetyp void zu haben, würde das Typsystem notieren Sie den Wirkung von close als die Datei Ressource-any Entsorgung versuchen, zu lesen oder in die Datei zu schreiben, nachdem close Aufruf wäre eine Art Fehler wird.

Ich bin mir nicht bewusst jegliche Art und Wirkung System in einem Mainstream-Programmiersprache erscheinen. Sie wurden verwendet, um statische Analysen zu definieren (zum Beispiel, ist es ganz natürlich, eine Analyse für die ordnungsgemäße Ver- / Entriegeln in Bezug auf die Wirkungen zu definieren). Als solche sind Effektsysteme in der Regel eher als konkrete Syntax Inferenz Schemata definiert. Sie könnten eine Syntax suchen so etwas wie vorstellen

File open(String name) [+File]; // open creates a new file handle
void close(File f)     [-f]   ; // close destroys f 

Wenn Sie mehr erfahren möchten, können die folgenden Papiere interessant sein (fair Warnung: die Papiere recht theoretisch sind).

Andere Tipps

(Dies ist keine verbindliche Antwort,. Nur versucht, mein Gedächtnis zu schleppen)

In einem gewissen Sinn Sie jederzeit einen ‚Zustand Monade‘ Code in einer Sprache, die Sie verwenden, die Art System als potentielle Wirkung System. So „Staat“ oder „IO“ in Haskell erfaßt diese Vorstellung (IO fängt eine ganze Menge anderer Effekte als auch). Ich erinnere mich vage, die Papiere lesen über die verschiedenen Sprachen, die erweiterte Typsysteme einschließlich solcher Dinge wie „abhängige Typen“ verwenden feinere Steuerung der Effekte zu steuern, so dass beispielsweise die Art / Wirkungs-Systeminformationen erfassen könnte, über die Speicherplätze in einem modifizierten würde Datentyp angegeben. Dies ist nützlich, da es Möglichkeiten bietet zwei Funktionen zu machen, die sich gegenseitig ausschließende Bits Zustand ändern werden dürfen „pendeln“ (Monaden der Regel nicht pendeln, und verschiedene Monaden komponieren nicht immer gut miteinander, was oft macht es schwer zu tippen (sprich: zuweisen einer statischen Typ) ‚angemessen‘ Programme) ...

Eine Analogie zu a sehr Hand-wellige Ebene ist, wie Java Ausnahmen geprüft. Sie äußern zusätzliche Informationen in der Art System über bestimmte Effekte (Sie können zum Zwecke der Analogie als ‚Wirkung‘ einer Ausnahme denken), aber diese ‚Wirkungen‘ der Regel alle über das Programm auslaufen und komponieren nicht gut in Praxis (Sie mit einer Million am Ende ‚wirft‘ Klauseln oder auch Rückgriff auf vielen unkontrollierten Laufzeitausnahmetypen).

Ich denke, eine Menge Forschung in diesem Bereich getan, sowohl für die Forschung-y und Mainstream-y Sprachen, als die Fähigkeit, Funktionen mit Wirkung Informationen zu annotieren kann den Compiler der Fähigkeit entsperren, kann eine Reihe von Optimierungen zu tun auswirken Parallelität und kann große Dinge tun für verschiedene Programmanalysen und Werkzeuge. Ich persönlich nicht haben große Hoffnungen für sie jederzeit schnell, aber, wie ich glaube, viele intelligente Menschen für eine lange Zeit gearbeitet haben auf sie und es gibt immer noch sehr wenig für sie zu zeigen.

Sie können einen Blick auf http://www.haskell.org/haskellwiki/DDC

Es ist eine Version von Haskell Wirkung System zu implementieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top