Was ist typestate?
Was bedeutet TypeState zu finden in Bezug auf design-Sprache? Ich sah es erwähnt in einigen Gesprächen bezüglich einer neuen Sprache, die von mozilla namens Rost.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was bedeutet TypeState zu finden in Bezug auf design-Sprache? Ich sah es erwähnt in einigen Gesprächen bezüglich einer neuen Sprache, die von mozilla namens Rost.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinweis: Typestate war, sank von Rust, nur eine eingeschränkte version (tracking initialisierten und zog von Variablen) ist Links. Siehe mein Hinweis am Ende.
Die motivation hinter TypeState ist, dass Arten unveränderlich sind, aber einige Ihrer Eigenschaften sind dynamisch, pro-variable basis.
Die Idee ist deshalb das erstellen von einfachen Prädikate über einen Typ, und verwenden Sie die Control-Flow-Analyse, dass der compiler ausführen, für viele andere Gründe zu statisch schmücken der Typ mit diesen Prädikaten.
Diese Prädikate werden nicht wirklich überprüft, indem der compiler selbst könnte es zu belastend wird, stattdessen wird der compiler einfach nur Gründe in Bezug auf die Grafik.
Als einfaches Beispiel erstellen Sie ein Prädikat
even
gibttrue
wenn eine Zahl gerade ist.Nun erstellen Sie zwei Funktionen:
halve
, die nur wirkt aufeven
zahlendouble
, die eine beliebige Anzahl, und eineeven
Anzahl.Beachten Sie, dass die Art
number
ist nicht verändert, Sie nicht erstellen Sie einevennumber
Art und duplizieren Sie alle jene Funktionen, die bisher gehandeltnumber
. Sie schreiben Sie einfachnumber
mit einem Prädikat genannteven
.Nun, lasst uns bauen ein paar Grafiken:
Einfach, ist es nicht ?
Natürlich wird es ein wenig komplizierter, wenn Sie haben mehrere mögliche Wege:
Zeigt dies, dass Sie Grund im Sinne der Sätze von Prädikaten:
Diese kann ergänzt werden durch die Allgemeine Regel von einer Funktion:
Und damit der Baustein TypeState in Rost:
check
: überprüft, ob das Prädikat hält, wenn es nichtfail
, ansonsten fügt sich das Prädikat auf eine Menge der PrädikateBeachten Sie, dass seit Rost erfordert, dass Prädikate sind Reine Funktionen, es können redundante
check
Anrufe, wenn es nachweisen kann, dass das Prädikat bereits hält an dieser Stelle.Was Typestate fehlt, ist einfach: komponierbarkeit.
Wenn Sie Lesen Sie die Beschreibung sorgfältig, beachten Sie dies:
Dies bedeutet, dass Prädikate für einen Typen sind, nutzlos in sich selbst, kommt das Programm von Annotation-Funktionen. Daher, die Einführung eines neuen Prädikats in eine bestehende Codebasis ist eine Bohrung, da die vorhandenen Funktionen müssen überprüft und optimiert, um gerecht zu erklären, ob oder nicht, Sie müssen/Erhaltung der invariante.
Dazu führen könnte, duplizieren Funktionen mit einer exponentiellen rate, wenn neue Prädikate pop-up: Prädikate sind leider nicht zusammensetzbar. Die sehr design-Problem, die Sie gedacht waren-Adresse (Verbreitung der Arten, also die Funktionen), scheint nicht angesprochen zu werden.
Es ist im Grunde eine Erweiterung von Typen, wo Sie nicht nur überprüfen, ob eine operation zulässig ist, in Allgemeinen, aber in diesem spezifischen Kontext. Alle, die zur compile-Zeit.
Den original Papier ist eigentlich ziemlich gut lesbar.
Gibt es eine typestate checker geschrieben, für Java, und Adam Warski erklärende Seite gibt einige nützliche Informationen. Ich bin nur gerade herauszufinden, dieses material selbst, aber wenn Sie sind vertraut mit QuickCheck für Haskell, die Anwendung des QuickCheck auf der monadischen Zustand scheint ähnlich: Kategorisierung der Staaten und erklären, wie Sie ändern, wenn Sie mutiert sind über die Schnittstelle.