Typ jedinečnosti - Uniqueness type
Typové systémy |
---|
Obecné pojmy |
Hlavní kategorie |
Menší kategorie |
Viz také |
v výpočetní, a jedinečný typ zaručuje, že je objekt použit v a s jedním závitem způsobem, s maximálně jediným odkazem na to. Pokud má hodnota jedinečný typ, může na ni být použita funkce optimalizováno aktualizovat hodnotu na místě v kód objektu. Takové místní aktualizace zvyšují efektivitu funkční jazyky při zachování referenční transparentnost. K integraci funkčního a imperativního programování lze také použít jedinečné typy.
Úvod
Psaní jedinečnosti je nejlépe vysvětlit na příkladu. Zvažte funkci readLine
který přečte další řádek textu z daného souboru:
funkce readLine(Soubor F) se vrací Tětiva zpětné vedení kde Tětiva čára = doImperativeReadLineSystemCall(F) končit
Nyní doImperativeReadLineSystemCall
přečte další řádek ze souboru pomocí OS -úroveň systémové volání který má vedlejší účinek změny aktuální pozice v souboru. To ale porušuje referenční průhlednost, protože její opakované volání se stejným argumentem vrátí různé výsledky pokaždé, když se aktuální pozice v souboru přesune. To zase dělá readLine
porušit referenční transparentnost, protože volá doImperativeReadLineSystemCall
.
Pomocí psaní jedinečnosti však můžeme vytvořit novou verzi readLine
to je referenční transparentní, i když je postaveno na funkci, která není referenční transparentní:
funkce readLine2(unikátní Soubor F) se vrací (unikátní Soubor, Tětiva) vrátit se (differentF, line) kde Tětiva čára = doImperativeReadLineSystemCall(F) Soubor differentF = newFileFromExistingFile(F) končit
The unikátní
deklarace určuje, že typ F
je jedinečný; to znamená F
může být volajícím již nikdy odkázán readLine2
po readLine2
vrátí a toto omezení je vynuceno typový systém. A od té doby readLine2
nevrací F
sám o sobě, ale spíše nový, odlišný objekt souboru differentF
, to znamená, že je to nemožné readLine2
být volán s F
jako argument, což zachovává referenční transparentnost a současně umožňuje výskyt vedlejších účinků.
Programovací jazyky
Typy jedinečnosti jsou implementovány ve funkčních programovacích jazycích, jako je Čistý, Rtuť, VAK a Idrisi. Někdy se k tomu používají I / O operace ve funkčních jazycích místo monády.
Pro prohlížeč bylo vyvinuto rozšíření kompilátoru Programovací jazyk Scala který používá anotace ke zpracování jedinečnosti v kontextu předávání zpráv mezi aktéry.[1]
Vztah k lineárnímu psaní
Unikátní typ je velmi podobný a lineární typ, do té míry, že termíny jsou často používány zaměnitelně, ale ve skutečnosti existuje rozdíl: skutečné lineární psaní umožňuje nelineární hodnotu obsadit do lineární formy, přičemž si na ni stále uchovává více odkazů. Jedinečnost zaručuje, že hodnota nemá žádné další odkazy na ni, zatímco linearita zaručuje, že na hodnotu již nelze odkazovat.[2]
Viz také
Reference
- ^ Haller, P .; Odersky, M. (2010), „Schopnosti jedinečnosti a půjčky“, ECOOP 2010 - objektově orientované programování (PDF), str. 354–378
- ^ Wadler, Philip (17. – 19. Června 1991). Existuje použití pro lineární logiku?. Sympozium ACM SIGPLAN o částečném hodnocení a manipulaci s programem založeným na sémantice (PEPM '91). 255–273. CiteSeerX 10.1.1.26.4202. doi:10.1145/115865.115894. ISBN 0-89791-433-3.
externí odkazy
Tento článek je Použití externí odkazy nemusí dodržovat zásady nebo pokyny Wikipedie.únor 2013) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
- Bibliografie o lineární logice
- Zjednodušení psaní jedinečnosti
- Spisy Philipa Wadlera o lineární logice
Diskuze o jedinečnosti psaní v programovacích jazycích
- Lively Linear Lisp - 'Look Ma, No Garbage!'
- Stohy lineární logiky a obměny - první bude první
- Minimalizace aktualizace referenčního počtu s odloženými a ukotvenými ukazateli pro funkční datové struktury
- Proměnné „jednorázové“ a lineární objekty - správa úložiště, reflexe a vícevláknové zpracování