1) Assume your project for the next six weeks is to implement a garbage collector for slang2 (i.e. a language with functions, a call stack, and a heap). Outline your plan for this implementation, including what style of garbage collector you will implement and why. What obstacles do you anticipate in this implementation? 2) Explain what a static link is in a call stack. Do all functions require a static link? If not, how can you identify programs which do not require one? 3) Explain what a closure is? When does a function require a closure? 4) Describe the difficulties that could arise in compiling a language, such as Java, that supports multiple inheritance through interfaces (so that one value can potentially have multiple unrelated types, such as Comparable and Serializable). 5) 2001 paper 5 question 6, first two parts 5) Consider the following AST for a small language datatype Expr = Num of int | Bool of boolean | Var of string | Plus of Expr * Expr | Minus of Expr * Expr | EQ of Expr * Expr | IF of Expr * Expr * Expr | Let of ((string * Expr) list) * Expr Write a program to perform constant propagation and constant folding for this language. Review: Develop a program to translate a program in this language into a sequence of stack instructions