Typ Uniqueness

In der Computerwissenschaft versichert ein einzigartiger Typ, dass ein Gegenstand auf eine Einzeln-Gewindeweise, mit höchstens einer einzelnen Verweisung darauf verwendet wird. Wenn ein Wert einen einzigartigen Typ hat, kann eine darauf angewandte Funktion optimiert werden, um den Wert im Platz im Gegenstand-Code zu aktualisieren. Aktualisierungen im Platz verbessern die Leistungsfähigkeit von funktionellen Sprachen, während sie Verweisungsdurchsichtigkeit aufrechterhalten. Einzigartige Typen können auch verwendet werden, um funktionelle und befehlende Programmierung zu integrieren.

Einführung

Das Einzigartigkeitsschreiben wird am besten mit einem Beispiel erklärt. Denken Sie eine Funktion, die die folgende Linie des Textes von einer gegebenen Datei liest:

fungieren Sie readLine (Datei f) Rückschnur

geben Sie Linie wo zurück

Schnur-Linie = doImperativeReadLineSystemCall (f)

Ende

Ende

Jetzt liest die folgende Linie von der Datei mit einem OS-Niveau-Systemanruf, der die Nebenwirkung hat, die aktuelle Position in der Datei zu ändern. Aber das verletzt Verweisungsdurchsichtigkeit, weil das Benennen davon mehrmals mit demselben Argument verschiedene Ergebnisse jedes Mal zurückgeben wird, wie die aktuelle Position in der Datei bewegt wird. Das macht der Reihe nach verletzen Verweisungsdurchsichtigkeit, weil sie ruft.

Jedoch, mit dem Einzigartigkeitsschreiben, können wir eine neue Version davon bauen ist Verweisungs-durchsichtig, wenn auch es oben auf einer Funktion gebaut hat, ist es nicht Verweisungs-durchsichtig:

fungieren Sie readLine2 (einzigartige Datei f) Umsatz (Datei, Schnur)

kehren Sie (differentF, Linie) wo zurück

Schnur-Linie = doImperativeReadLineSystemCall (f)

Datei differentF = newFileFromExistingFile (f)

Ende Ende

Die Behauptung gibt an, dass der Typ dessen einzigartig ist; das heißt darf darauf wieder vom Anrufer nach dem Umsatz nie verwiesen werden, und diese Beschränkung wird durch das Typ-System beachtet. Und seitdem gibt sich, aber eher einen neuen, verschiedenen Dateigegenstand nicht zurück, das bedeutet, dass es unmöglich ist für, mit als ein Argument jemals wieder genannt zu werden, so Verweisungsdurchsichtigkeit bewahrend, während man Nebenwirkungen berücksichtigt vorzukommen.

Programmiersprachen

Einzigartigkeitstypen werden auf den funktionellen Programmiersprachen Sauber und Quecksilber durchgeführt. Sie werden manchmal verwendet, um Eingabe/Ausgabe-Operationen auf funktionellen Sprachen anstatt monads zu tun.

Beziehung zum geradlinigen Schreiben

Der Begriff wird häufig austauschbar mit dem geradlinigen Typ gebraucht, obwohl häufig, was besprochen wird, technisch das Einzigartigkeitsschreiben ist, weil das wirkliche geradlinige Schreiben einem nichtlinearen Wert erlaubt, zu einer geradlinigen Form "geworfen" zu werden, während es noch vielfache Verweisungen darauf behält. Einzigartigkeit versichert, dass ein Wert keine anderen Verweisungen darauf hat, während Linearität versichert, dass keine Verweisungen mehr zu einem Wert gemacht werden können.

Siehe auch

  • Geradliniger Typ
  • Geradlinige Logik

Links

Diskussionen der Einzigartigkeit, die auf Programmiersprachen tippt

Experimente mit dem Einzigartigkeitsschreiben (von einer Leistungsperspektive)


Hud (Film) / Cat Ballou
Impressum & Datenschutz