【问题标题】:Is there a CLR that runs on the CLR?是否有在 CLR 上运行的 CLR?
【发布时间】:2010-09-14 03:47:08
【问题描述】:

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

基本上,类似于 .NET 程序将程序集作为 MemoryStreams 加载、解析字节码、构造类型并执行指令。或者,它可以使用 Reflection.Emit 或然而 JIT 编译为标准 IL。

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

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

【问题讨论】:

  • 但是……为什么?这似乎是一件很奇怪的事情,我想不出任何可能的用例。
  • @Davr:因为这样你就可以在 CLR 中运行 CLR!
  • @Davr 有很多与 AOP 相同的参数,但基于 CLR 的 CLR 也可以比普通 CLR 更“受管理”,因为它可以反射自身并进行修改,包括优化,用普通的旧 CLR 是不可能的。另外,它很酷。
  • 我确实有一个用例:子集或重定向绑定到平台库,如 mscorlib。例如,将 DateTime.Now 暴露给不受信任的代码是一件坏事……
  • CLR 上的 CLR 上的 CLR...我想我只是有一个 Stack Overflow

标签: .net clr cil


【解决方案1】:

查看 System.Reflection.Emit 命名空间,特别是 ILGenerator 类。

您可以即时发出 IL。

http://msdn.microsoft.com/en-us/library/system.reflection.emit.ilgenerator_members.aspx

【讨论】:

  • 不是我要找的。我想执行 IL,而不是编译 C#。
  • 也许在对我进行降级之前做一些研究。
  • 我没有对你进行降级,即使那样你也有不同的答案(即 CodeDom)
【解决方案2】:

我不知道,但来自 JVM 的想法在 JVM 上运行应该会有所帮助。

【讨论】:

    【解决方案3】:

    如果您愿意将“运行 CIL”的定义扩展为“JIT-Compiles CIL to Native Code”,那么您应该查看Managed Operating System Alliance——一群致力于创建的人(包括我自己)编写托管操作系统内核所需的运行时部分。

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

    【讨论】:

      【解决方案4】:

      您应该查看IKVM.NET Project。它包括一个用 .NET 编写的 Java 虚拟机。

      http://www.ikvm.net/

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

      【讨论】:

      • 我知道 IKVM,但是看看它可能会有所帮助。
      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-20
          • 1970-01-01
          • 2011-03-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多