In the last post, we discussed closure conversion applied to the Simply-Typed Lambda Calculus (STLC), perhaps the simplest language with lexical scoping and first-class functions. Now we turn to closure conversion applied to a richer language, one that includes generics.
The Polymorphic Lambda Calculus (aka. System F)
System F extends the STLC with first-class generics: the Λ expression and an expression for instantiating a generic. typesT::=…∣α∣∀α.Texpressionse::=…∣Λα.e∣e[T]valuesv::=…∣Λα.eframesF::=…∣◻[T]
The typing rules for System F are those of the STLC plus the following: Γ,α⊢e:TΓ⊢Λα.e:∀α.TΓ⊢e:∀α.T2Γ⊢e[T1]:[α:=T1]T2
Also, there is one new reduction rule: (Λα.e)[T]⟶[α:=T]e
Updating the Intermediate Language: IL2
With the introduction of generics, we not only worry about lexically scoped term variables but we are also concerned with lexically scoped type variables. So the δ and γ functions must be updated to include type variables and their bindings. Furthermore, the closure operator must be extended with type arguments to bind the new type variables. expressionse::=…∣δ¯y:T,¯α,x:T.e∣γx:T,¯y=v,α=T.e∣e{¯e,¯T}
The following are the reduction rules for the functions of IL2. (δ¯y:T,¯α,x:T.e){¯e,¯T}⟶γx:T,¯y=v,α=T.e(γx:T,¯y=v,α=T.e)v⟶[¯α:=T]{¯y:=v}{x:=v}e
Next we turn to the Λ. We'll need to translate Λ to something in IL2, and in the spirit of closure conversion, it should be something that does not support lexical scoping. Inspired by the δ and γ functions, we create analogous things for generics. expressionse::=…∣Φ¯y:T,¯α,α.e∣Υα,¯y=v,α=T.e
The following are the reduction rules for the generics of IL2. (Φ¯y:T,¯α,α.e){¯e,¯T}⟶Υα,¯y=v,α=T.e(Υα,¯y=v,α=T.e)[T]⟶[¯α:=T]{¯y:=v}[α:=T]e
Closure conversion for System F
With IL2 in place, the definition of closure conversion for System F is relatively straightforward. The case for λ computes the free type variables (FTV) and includes them in the δ function. The new case for Λ is analogous to the case for λ.
ClosureConversion(e)=let(e′,¯f)=C(e)in(globals¯fine′)
No comments:
Post a Comment