Been playing around with making a Lisp with F#. I don’t really know F# and I haven’t used System.Reflection.Emit directly yet… So here is my direct translation of Reflection.Emit Hello World in F#:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
open System open System.Reflection open System.Reflection.Emit open System.Threading let assemblyName = new AssemblyName () assemblyName.Name <- "HelloWorld" let assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave) let modl = assemblyBuilder.DefineDynamicModule("HelloWorld.exe") let typeBuilder = modl.DefineType("HelloWorldType", TypeAttributes.Public ||| TypeAttributes.Class) let methodBuilder = typeBuilder.DefineMethod("Main", MethodAttributes.HideBySig ||| MethodAttributes.Static ||| MethodAttributes.Public, typeof<Void>, [|typeof<String>|]) let ilGenerator = methodBuilder.GetILGenerator() ilGenerator.EmitWriteLine("hello world") ilGenerator.Emit(OpCodes.Ret) let helloWorldType = typeBuilder.CreateType() helloWorldType.GetMethod("Main").Invoke(null, [|null|]) assemblyBuilder.SetEntryPoint(methodBuilder, PEFileKinds.ConsoleApplication) assemblyBuilder.Save("HelloWorld.exe") |
Reference:
http://blogs.msdn.com/b/joelpob/archive/2004/01/21/61411.aspx