是否在CLR上运行CLR?

时间:2020-03-06 14:54:09  来源:igfitidea点击:

我想知道是否存在使用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