130 likes | 231 Vues
Monadic Regions. Matthew Fluet Cornell University. Introduction. Draw together two lines of research Region-based memory management Regions delimit lifetimes of objects new .e Monadic encapsulation of effects Embed imperative features in pure languages
E N D
Monadic Regions Matthew Fluet Cornell University
Introduction • Draw together two lines of research • Region-based memory management • Regions delimit lifetimes of objects • new .e • Monadic encapsulation of effects • Embed imperative features in pure languages • runST :: .(s. ST s )
Introduction • Encode Tofte-Talpin region calculus in System F with monadic sub-language • Features • runST serves as inspiration • runRGN – encapsulate region computation • newRGN – encapsulate a single region • Sufficient polymorphism to encode region polymorphism
FRGN = System F + RGN monad • System F • Monadic (sub)-language • Monadic types and operations • RGN r – monadic region computations • RGNVar r – region allocated values • RGNHandle r – region handles
FRGN = System F + RGN monad • Create and read region allocated values allocRGNVar :: ,r. RGNHandle r RGN r (RGNVar r ) readRGNVar :: ,r. RGNVar r RGN r
FRGN = System F + RGN monad • Encapsulate and run a monadic computation runRGN :: .(r. RGNHandle r RGN r )
FRGN = System F + RGN monad • Encapsulate a region newRGN :: ,r.(s. RGNHandle s RGN s ) RGN r
FRGN = System F + RGN monad • Encapsulate a region newRGN :: ,r.(s. r s RGNHandle s RGN s ) RGN r α ≡ ,r,s. RGN r RGN s
Single Effect Calculus • LIFO stack of regions imposes a partial order on live (allocated) regions • Regions lower on the stack outlive regions higher on the stack • A single region can serve as a witness for a set of effects • Region appears as a single effect in place of the set
Translation • Type-preserving translation from Single Effect Calculus to FRGN new .e newRGN (.w.h. e)
Conclusion • Monadic encoding of effects applicable to region calculi • Trivial (syntactic) equality on types • Encapsulation within monad
FRGN = System F + RGN monad • Monadic unit and bind returnRGN :: ,r. RGN r thenRGN :: ,,r. RGN r ( RGN r ) RGN r