Linjära system gör det möjligt för programmerare att hantera eller uttryckligen återvinna minne, men begränsas kraftigt av det faktum att de inte tillåter alias. Detta dokument beskriver en pseudo-linjär typ system som tillåter en grad av aliasing och minne återanvändning samt förmågan att de ne komplexa rekursiva datastrukturer. Vårt typsystem kan koda konventionella linjära datastrukturer såsom linjära listor och träd samt mer sofistikerade datastrukturer inklusive cykliska och dubbelkopplade listor och träd. I de senare fallen är vårt typsystem tillräckligt uttrycksfullt för att representera pekande alias och ändå säkert tillåta destruktiva operationer som objekt deallocation. Vi demonstrerar exibiliteten hos vårt typsystem genom att koda två gemensamma rymdmedvetna algoritmer: destinationspasserande stil och Deutsch-Schorr-Wite eller \link-reversal" traversal algoritmer. 1 Introduktion Typsäkra programmeringsspråk, såsom Haskell, Java och ML, ger inte programmerare kontroll över minneshantering. I synnerhet tillåter dessa språk inte programmerare att separera allokering och initiering av minnesobjekt, inte heller tillåter de explicit återanvändning av minnesobjekt. I stället presenteras allokering och initiering av objekt för programmeraren som en atomoperation, och återanvändning av minnet uppnås \under täcket" genom sophämtning. Med andra ord uppnås minneshantering genom metalingvistiska mekanismer som till stor del ligger utanför programmerarens kontroll. I typosäkra språk som C eller C++, programmerare har kontroll över minneshantering så att de kan skräddarsy rutiner för tillämpning-speci c begränsningar, där tid och / eller utrymme overheads av allmänna memory management mekanismer inte uppfyller. Sådana språk har dock en mycket mer komplicerad och felbenägen programmeringsmodell. I synnerhet hindrar varken de statiska typsystemen, kompilatorerna eller run-time-systemen i dessa språk oavsiktlig användning av uninitialiserade objekt, eller oavsiktlig återanvändning av minnet vid en inkompatibel typ. Sådana fel är mycket kostsamma att diagnostisera och korrigera. Vårt yttersta mål är att ge stöd till programmeringsstyrd minneshantering, utan sakricing typesafety, och utan att ådra sig betydande overhead. Dessutom hoppas vi kunna upptäcka generella maskinskrivningsmekanismer och principer som möjliggör större latitud i utformningen av lågnivåspråk avsedda för systemtillämpningar eller som mål att certifiera kompilatorer 28, 30]. I denna tidning, vi
Ett relaterat arbete REF introducerar begreppet aliastyper till modeller för föränderliga datastrukturer såsom länkade listor.
Alias Types for Recursive Data Structures
{'venue': 'In Workshop on Types in Compilation', 'journal': None, 'mag_field_of_study': ['Computer Science']}