Understruktursystem - Substructural type system
| Typesystemer |
|---|
| Generelle begreber |
| Store kategorier |
|
| Mindre kategorier |
Substrukturelle typesystemer er en familie af typesystemer, der er analoge med substrukturelle logikker, hvor en eller flere af strukturreglerne er fraværende eller kun er tilladt under kontrollerede omstændigheder. Sådanne systemer er nyttige til at begrænse adgangen til systemressourcer såsom filer , låse og hukommelse ved at holde styr på ændringer, der opstår, og forhindre ugyldige tilstande.
Forskellige systemer af substrukturelle typer
Flere typesystemer er opstået ved at kassere nogle af de strukturelle regler for udveksling, svækkelse og sammentrækning:
| Udveksling | Svækkelse | Sammentrækning | Brug | |
|---|---|---|---|---|
| Bestilt | - | - | - | Præcis en gang i orden |
| Lineær | Tilladt | - | - | Præcis en gang |
| Affine | Tilladt | Tilladt | - | Højst en gang |
| Relevant | Tilladt | - | Tilladt | Mindst en gang |
| Normal | Tilladt | Tilladt | Tilladt | Vilkårligt |
- Ordnede typesystemer (kassér udveksling, svækkelse og kontraktion): Hver variabel bruges nøjagtigt én gang i den rækkefølge, den blev introduceret.
- Lineære systemer (tillader udveksling, men hverken svækkelse eller kontraktion): Hver variabel bruges nøjagtigt én gang.
- Affinesystemer (tillader udveksling og svækkelse, men ikke kontraktion): Hver variabel bruges højst én gang.
- Relevante typesystemer (tillader udveksling og kontraktion, men ikke svækkelse): Hver variabel bruges mindst én gang.
- Normaltypesystemer (tillader udveksling, svækkelse og kontraktion): Hver variabel kan bruges vilkårligt.
Forklaringen på affinesystemer forstås bedst, hvis den omformuleres til "hver forekomst af en variabel bruges højst én gang".
Bestilt typesystem
Ordnede typer svarer til ikke -kommutativ logik, hvor udveksling, sammentrækning og svækkelse kasseres. Dette kan bruges til at modellere stabelbaseret hukommelsestildeling (kontrast til lineære typer, der kan bruges til at modellere bunkebaseret hukommelsestildeling). Uden udvekslingsegenskaben må et objekt kun bruges, når det er øverst i den modellerede stak, hvorefter det springer af, hvilket resulterer i, at hver variabel bruges nøjagtigt én gang i den rækkefølge, det blev introduceret.
Lineære systemer
Lineære typer svarer til lineær logik og sikrer, at objekter bruges nøjagtigt én gang, så systemet sikkert kan lokalisere et objekt efter dets brug.
De Clean programmeringssprog gør brug af unikke typer (en variant af lineære typer) til hjælp support concurrency, input / output , og på stedet opdatering af arrays.
Lineære systemer tillader referencer, men ikke aliasser . For at håndhæve dette, går en reference uden for anvendelsesområdet, efter at den er vist på højre side af en opgave , hvilket sikrer, at der kun findes én reference til et objekt på én gang. Bemærk, at overførsel af en reference som et argument til en funktion er en form for tildeling, da funktionsparameteren vil blive tildelt værdien inde i funktionen, og derfor får en sådan brug af en reference også den til at gå uden for anvendelsesområdet.
Et lineært system ligner C ++ s unikke_ptr -klasse , der opfører sig som en markør, men kun kan flyttes (dvs. ikke kopieres) i en opgave. Selvom linearitetsbegrænsningen kontrolleres på kompileringstidspunktet , forårsager dereferencing af en ugyldig unik_ptr en udefineret adfærd i løbetid .
Egenskaben med en enkelt reference gør lineære typesystemer velegnede som programmeringssprog til kvanteberegning , da den afspejler kvantetilstanders ikke-kloningsteorem . Fra kategoriteorisk synspunkt er no-kloning en erklæring om, at der ikke er nogen diagonal funktor, der kan duplikere tilstande; set fra kombinatorens synspunkt er der ingen K-combinator, der kan ødelægge tilstande. Fra lambda calculus synspunkt kan en variabel x vises nøjagtigt en gang i et udtryk.
Lineære typesystemer er det interne sprog i lukkede symmetriske monoidale kategorier , meget på samme måde som simpelthen indtastet lambda -beregning er sproget i kartesiske lukkede kategorier . Mere præcist kan man konstruere functors mellem kategori af lineære type systemer og kategorien af lukkede symmetriske monoidal kategorier.
Affine type systemer
Affinetyper er en version af lineære typer, der tillader at kassere (dvs. ikke bruge ) en ressource, der svarer til affinelogik . En affin ressource kan bruges på de fleste en gang, mens en lineær man skal bruges præcis én gang.
Relevant typesystem
Relevante typer svarer til relevant logik, der tillader udveksling og sammentrækning, men ikke svækkelse, hvilket oversætter til hver variabel, der bruges mindst én gang.
Programmeringssprog
Følgende programmeringssprog understøtter lineære eller affine typer:
Se også
Noter
Referencer
- Walker, David (2002). "Substrukturelle typesystemer". I Pierce, Benjamin C. (red.). Avancerede emner i typer og programmeringssprog (PDF) . MIT Tryk. s. 3–43. ISBN 0-262-16228-8.