有没有在CLR上运行的CLR?

10

我想知道是否有一种基于CLI(公共语言基础设施)实现的.NET兼容CLR,例如使用.NET本身,或者至少有哪些资源可以帮助构建一个CLR。

基本上,就像一个.NET程序,它会将程序集作为MemoryStreams加载,解析字节码,构建类型并执行指令。可以选择使用Reflection.Emit或其他方法JIT编译为标准IL。

我不想将.NET语言编译成原始CLR运行。我想要一个由.NET语言编写的CLR(通常不是不受管理的C ++或C),并且运行CIL。如果操作正确,它应该能够运行自己。

关于使用Mono.Cecil来完成这种事情,有什么想法吗?


1
但是...为什么呢?这似乎是一件非常奇怪的事情,我想不出任何可能的用例。 - davr
5
因为这样你就能在一个CLR中运行另一个CLR,再在其中运行另一个CLR! - Shog9
4
@Davr 提出了与 AOP 相同的许多观点,但基于 CLR 的 CLR 可以比普通的 CLR 更加“可管理”,因为它可以反射自身并进行修改,包括优化,在普通 CLR 中无法实现。此外,这也非常酷。 - Mark Cidade
我确实有一个用例:对平台库(如mscorlib)的子集或重定向绑定。例如,将 DateTime.Now 暴露给不受信任的代码是一件糟糕的事情... - Jeffrey Hantin
2
一个CLR在CRL上的CLR...我想我刚刚遇到了堆栈溢出。 - Mark Sowul
也许可以通过将coreclr编译为C++/CLI来部分实现? - IS4
6个回答

5

我认为目前没有任何独立的 .net 虚拟机是自主托管的,但是 CosmosSharpOS 都是用 C# 编写的 .net 运行时。

可能可以重用它们的运行时代码来提取一个独立的运行时。Cosmos 可以用于在启动时托管自定义应用程序:http://www.codeproject.com/KB/system/CosmosIntro.aspx


4

你应该查看IKVM.NET项目,它包含一个用.NET编写的Java虚拟机。

http://www.ikvm.net/

我知道它不是在CLR上运行的实际CLR,但这是我所知道的最接近于你想要的东西。


我知道IKVM,但是看一下可能会有帮助。 - Mark Cidade

1

我不知道有没有,但在JVM上运行的JVM的想法应该是有帮助的。


1

如果你愿意将“运行CIL”扩展为“JIT编译CIL到本地代码”,那么你应该看看托管操作系统联盟——一个由一群人(包括我在内)组成的团体,致力于创建编写托管操作系统内核所需的运行时组件。

目前,还有很多工作要做,但是可以JIT编译和运行简单的方法(仅限Win32——我们目前使用P/Invoke来创建本地代码缓冲区)。


1

原则上,通过结合以下技术是可能的:

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

也有可能使用 Mono 编译为 LLVM 字节码,使用 Emscripten 将字节码编译为 Javascript,并在 .NET 上使用各种解释器运行 Javascript。


-2

不是我想要的。我想执行IL,而不是编译C#。 - Mark Cidade
在对我进行负面评价之前,或许可以先做一些研究。 - FlySwat
我并没有对你进行贬低,即使如此,你的答案也是不同的(例如:CodeDom)。 - Mark Cidade

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接