Pregunta

Me preguntaba si había un CLR compatible con .NET que se implementó usando la CLI (infraestructura de lenguaje común), por ejemplo, usando el propio .NET, o al menos si había algún recurso que ayudaría a construir uno.

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

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

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

¿Fue útil?

Solución

No creo que actualmente haya máquinas virtuales .net independientes que sean de alojamiento propio, pero Cosmos y < a href = "http://sharpos.org" rel = "noreferrer"> SharpOS son tiempos de ejecución .net escritos en C #.

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

Otros consejos

Debe consultar el Proyecto IKVM.NET . Incluye una máquina virtual Java escrita en .NET.

http://www.ikvm.net/

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

No conozco uno, pero las ideas de JVM que se ejecutan en JVM deberían ser útiles.

Si está dispuesto a ampliar su definición de " ejecuta CIL " a "JIT-Compila CIL a código nativo" entonces debería mirar la Alianza del Sistema Operativo Administrado - un grupo de personas (incluido yo) trabajando para crear las piezas de tiempo de ejecución necesarias para escribir un núcleo del sistema operativo administrado.

Actualmente, queda mucho por hacer, pero es posible compilar JIT y ejecutar métodos simples (solo Win32; actualmente utilizamos P / Invoke para crear los buffers de código nativo)

Es posible en principio combinando tecnologías:

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

También podría ser posible tomar Mono , compilar a bytecode LLVM, compile el bytecode a Javascript usando Emscripten , y ejecute el Javascript en .NET usando cualquiera de los diversos intérpretes.

Observe el espacio de nombres System.Reflection.Emit, específicamente la clase ILGenerator.

Puede emitir IL sobre la marcha.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top