是否在CLR上运行CLR?
我想知道是否存在使用CLI(通用语言基础结构)(例如.NET本身)实现的.NET兼容CLR,或者至少是否有任何资源可以帮助构建一个。
基本上,.NET程序之类的程序将程序集作为MemoryStreams加载,解析字节码,构造类型并执行指令。也可以选择使用Reflection.Emit或者JIT将其JIT编译为标准IL。
我不想编译由原始CLR运行的.NET语言。我希望使用.NET语言(不是通常的非托管C ++或者C语言)编写的CLR并运行CIL。如果操作正确,它应该可以自行运行。
关于将Mono.Cecil用于此类事情有任何想法吗?
解决方案
查看System.Reflection.Emit命名空间,特别是ILGenerator类。
我们可以即时发射IL。
http://msdn.microsoft.com/zh-CN/library/system.reflection.emit.ilgenerator_members.aspx
我不知道一个,但是在JVM上运行JVM的想法应该会有所帮助。
- Jikes RVM
- Maxine VM
如果我们愿意将"运行CIL"的定义扩展为"将CIL编译为本机代码的JIT",那么我们应该看一下托管操作系统联盟-一群人(包括我自己)致力于创建运行时组件编写托管操作系统内核所必需。
当前,还有很多工作要做,但是可以JIT编译并运行简单的方法(仅Win32,我们目前使用P / Invoke创建本机代码缓冲区)
我们应该签出IKVM.NET项目。它包括一个用.NET编写的Java虚拟机。
http://www.ikvm.net/
我知道这不是运行在CLR之上的实际CLR,但这是我所知道的最能满足我们需求的东西。
我认为目前没有任何独立的.net虚拟机可以自我托管,但是Cosmos和SharpOS都是用C#编写的.net运行时。
可能可以重用其某些运行时代码来额外增加独立的运行时。 Cosmos可用于在引导时托管自定义应用程序:http://www.codeproject.com/KB/system/CosmosIntro.aspx