2008-09-30 35 views
10

Me preguntaba si existía un CLR compatible con .NET que se implementó utilizando la CLI (infraestructura de lenguaje común), por ejemplo, utilizando .NET, o al menos si había algún recurso que ayudaría a crear uno.¿Hay un CLR que se ejecuta en el CLR?

Básicamente, algo así como un programa .NET que carga ensamblajes como MemoryStreams, analiza el bytecode, construye los tipos y ejecuta las instrucciones. Opcionalmente, puede JIT-compilar a IL estándar usando Reflection.Emit o sin embargo.

No quiero compilar un lenguaje .NET ejecutado por el CLR original. Quiero un CLR que es escrito en un lenguaje .NET (C++ no administrado o C como suele ser) y ejecuta CIL. Si se hace bien, debería poder ejecutarse solo.

¿Alguna idea sobre el uso de Mono.Cecil para este tipo de cosas?

+1

Pero ... ¿por qué? Parece algo muy extraño de hacer, y no puedo pensar en ningún posible caso de uso. – davr

+5

@Davr: ¡porque entonces podría ejecutar un CLR en el CLR en el CLR! – Shog9

+4

@Davr muchos de los mismos argumentos que AOP, pero un CLR basado en CLR también puede ser aún más "administrado" que un CLR normal, ya que puede reflejarse sobre sí mismo y hacer modificaciones, incluida la optimización, imposible con un simple CLR. Además, es genial. –

Respuesta

5

No creo que actualmente existan máquinas virtuales de .NET independientes que sean autohospedantes, pero Cosmos y SharpOS son ejecutables en .NET escritos en C#.

Es posible reutilizar parte de su código de tiempo de ejecución para un tiempo de ejecución adicional.Cosmos se pueden utilizar para alojar una aplicación personalizada en el arranque: http://www.codeproject.com/KB/system/CosmosIntro.aspx

1

no tengo conocimiento de uno, pero las ideas frm JVM que se ejecutan en la JVM debe ser útil.

+0

genial, Maxine tiene un foco de metacircularidad –

1

Si usted está dispuesto a ampliar su definición de "corre CIL" a "JIT-CIL Compila a código nativo", entonces usted debe buscar en la Managed Operating System Alliance - - un grupo de personas (yo incluido) trabajando para crear las piezas de tiempo de ejecución necesarias para escribir un núcleo del sistema operativo administrado.

la actualidad, no es un poco más que hacer, pero es posible JIT-compilar y ejecutar métodos simples (Win32 solamente - Actualmente el uso P/Invoke para crear las memorias intermedias de código nativo)

4

Usted debería ver el IKVM.NET Project. Incluye una máquina virtual Java escrita en .NET.

http://www.ikvm.net/

Yo sé que no es un CLR real que se ejecuta sobre el CLR, pero es lo más parecido que conozco que hace lo que quiere.

+0

Conozco IKVM, pero sí, puede ser útil echarle un vistazo. –

1

Es posible, en principio, mediante la combinación de tecnologías:

  • Jikes RVM es una máquina virtual de Java aplicación escrita en Java.
  • IKVM.NET, una implementación de la plataforma Java en .NET.

También podría ser posible tomar Mono, compilar el código de bytes a LLVM, compilar el código de bytes de Javascript usando Emscripten, y ejecutar el código JavaScript en .NET utilizando cualquiera de los diversos intérpretes.