{"id":165,"date":"2015-08-25T04:35:15","date_gmt":"2015-08-25T04:35:15","guid":{"rendered":"http:\/\/www.voidbred.com\/blog\/?p=165"},"modified":"2015-08-25T04:35:15","modified_gmt":"2015-08-25T04:35:15","slug":"reflection-emit-with-f","status":"publish","type":"post","link":"http:\/\/www.voidbred.com\/blog\/2015\/08\/reflection-emit-with-f\/","title":{"rendered":"Reflection Emit with F#"},"content":{"rendered":"<p>Been playing around with making a Lisp with F#. \u00a0I don&#8217;t really know F# and I haven&#8217;t used System.Reflection.Emit directly yet&#8230; \u00a0So here is my direct translation of Reflection.Emit Hello World in F#:<\/p>\n<pre class=\"lang:default decode:true \" title=\"Reflection.Emit Hello World in F#\">open System\r\nopen System.Reflection\r\nopen System.Reflection.Emit\r\nopen System.Threading\r\n\r\nlet assemblyName = new AssemblyName ()\r\nassemblyName.Name &lt;- \"HelloWorld\"\r\nlet assemblyBuilder =\r\n  Thread.GetDomain().DefineDynamicAssembly(assemblyName,\r\n                                           AssemblyBuilderAccess.RunAndSave)\r\nlet modl = assemblyBuilder.DefineDynamicModule(\"HelloWorld.exe\")\r\nlet typeBuilder = modl.DefineType(\"HelloWorldType\",\r\n                                  TypeAttributes.Public |||\r\n                                  TypeAttributes.Class)\r\nlet methodBuilder =\r\n  typeBuilder.DefineMethod(\"Main\",\r\n                           MethodAttributes.HideBySig |||\r\n                           MethodAttributes.Static |||\r\n                           MethodAttributes.Public,\r\n                           typeof&lt;Void&gt;,\r\n                           [|typeof&lt;String&gt;|])\r\n\r\nlet ilGenerator = methodBuilder.GetILGenerator()\r\nilGenerator.EmitWriteLine(\"hello world\")\r\nilGenerator.Emit(OpCodes.Ret)\r\n\r\nlet helloWorldType = typeBuilder.CreateType()\r\nhelloWorldType.GetMethod(\"Main\").Invoke(null, [|null|])\r\n\r\nassemblyBuilder.SetEntryPoint(methodBuilder,\r\n                              PEFileKinds.ConsoleApplication)\r\nassemblyBuilder.Save(\"HelloWorld.exe\")\r\n<\/pre>\n<h6>Reference:<\/h6>\n<p><a href=\"http:\/\/blogs.msdn.com\/b\/joelpob\/archive\/2004\/01\/21\/61411.aspx\" target=\"_blank\">http:\/\/blogs.msdn.com\/b\/joelpob\/archive\/2004\/01\/21\/61411.aspx<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Been playing around with making a Lisp with F#. \u00a0I don&#8217;t really know F# and I haven&#8217;t used System.Reflection.Emit directly yet&#8230; \u00a0So here is my direct translation of Reflection.Emit Hello World in F#: open System open System.Reflection open System.Reflection.Emit open System.Threading let assemblyName = new AssemblyName () assemblyName.Name &lt;- &#8220;HelloWorld&#8221; let assemblyBuilder = Thread.GetDomain().DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave)&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/www.voidbred.com\/blog\/wp-json\/wp\/v2\/posts\/165"}],"collection":[{"href":"http:\/\/www.voidbred.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.voidbred.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.voidbred.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.voidbred.com\/blog\/wp-json\/wp\/v2\/comments?post=165"}],"version-history":[{"count":1,"href":"http:\/\/www.voidbred.com\/blog\/wp-json\/wp\/v2\/posts\/165\/revisions"}],"predecessor-version":[{"id":166,"href":"http:\/\/www.voidbred.com\/blog\/wp-json\/wp\/v2\/posts\/165\/revisions\/166"}],"wp:attachment":[{"href":"http:\/\/www.voidbred.com\/blog\/wp-json\/wp\/v2\/media?parent=165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.voidbred.com\/blog\/wp-json\/wp\/v2\/categories?post=165"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.voidbred.com\/blog\/wp-json\/wp\/v2\/tags?post=165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}