Como o LINQPad compila código?

Suponho que ele não invoque o csc.exe ou implemente um compilador inteiro, então como ele funcion

Update: Agradecimentos a Jon Skeet pelo ponteiro para o código que foi fácil de aprende

string c = @"
public class A
{
    public static void Main(string[] args)
    {
        System.Console.WriteLine(""hello world"");
    }
}
";

CodeDomProvider compiler = new CSharpCodeProvider();

CompilerParameters parameters = new CompilerParameters();
parameters.WarningLevel = 4;
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = true;

CompilerResults r = compiler.CompileAssemblyFromSource(parameters, c);

Assembly a = r.CompiledAssembly;

Type[] ts = a.GetTypes();

Type t = ts[0];

object o = t.GetMethod("Main").Invoke(null, new object[] { new string[] { } });

questionAnswers(2)

yourAnswerToTheQuestion