2008-09-30 88 views
10

我想知道是否有一个.NET兼容的CLR是使用CLI(通用语言基础结构)实现的,例如使用.NET本身,或者至少是否有任何资源可以帮助构建一个CLR。是否有CLR在CLR上运行?

基本上,像.NET程序那样将程序集加载为MemoryStreams,解析字节码,构造类型并执行指令。或者,它可以使用Reflection.Emit或其他方式JIT编译为标准IL。

我不想编译一个由原始CLR运行的.NET语言。我想要一个CLR,这是写在一个.NET语言(不是非托管的C + +或C,因为它通常是)运行 CIL。如果做得对,它应该能够自己运行。

对这种事情使用Mono.Cecil有什么想法吗?

+1

但是...为什么?这似乎是一件很奇怪的事情,我不能拿出任何可能的用例。 – davr 2008-09-30 00:59:51

+5

@Davr:因为那你可以在CLR中的CLR中运行一个CLR! – Shog9 2008-09-30 01:50:15

+4

@Davr与AOP有许多相同的论点,但是基于CLR的CLR也可能比正常的CLR更“管理”,因为它可以反映自身并进行包括优化在内的修改CLR。另外,它很酷。 – 2008-09-30 10:47:57

回答

1

如果你愿意扩大你的 “运行CIL” 到 “的JIT编译CIL到本机代码”,那么你应该看看Managed Operating System Alliance定义 - - 一群人(包括我自己)致力于创建编写托管操作系统内核所需的运行时间部分。

目前,有相当多的剩下要做的,但它是可能的JIT编译和运行简单的方法(只有Win32 - 我们目前使用的P/Invoke来创建本机代码缓存)

4

你应该检查出IKVM.NET Project。它包含一个用.NET编写的Java虚拟机。

http://www.ikvm.net/

我知道这是不是在CLR之上运行的实际CLR,但它是我所知道的是,最接近的事你想要做什么。

1

这在原则上是可以通过组合技术:

  • Jikes RVM是用Java编写的Java虚拟机实现。
  • IKVM.NET,.NET上的Java平台的实现。

它可能还可以采取Mono,编译成字节码LLVM编译使用Emscripten的字节码JavaScript和使用各种口译对.NET运行的JavaScript。