Understruktursystem - Substructural type system

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.