Domanda

Mi chiedevo se ci fosse un CLR compatibile con .NET che è stato implementato usando la CLI (infrastruttura di linguaggio comune), ad esempio, usando .NET stesso, o almeno se ci fossero risorse che aiuterebbe a costruirne uno.

Fondamentalmente, qualcosa come un programma .NET che carica gli assembly come MemoryStreams, analizza il bytecode, costruisce i tipi ed esegue le istruzioni. Facoltativamente, può compilare JIT in IL standard usando Reflection.Emit o comunque.

Non voglio compilare un linguaggio .NET per essere eseguito dal CLR originale. Voglio un CLR che sia scritto in un linguaggio .NET (non gestito C ++ o C come al solito) e funziona CIL. Se fatto bene, dovrebbe essere in grado di funzionare da solo.

Qualche idea sull'uso di Mono.Cecil per questo tipo di cose?

È stato utile?

Soluzione

Non credo che ci siano attualmente VM .net autonome che sono self hosting ma entrambe Cosmos e < a href = "http://sharpos.org" rel = "noreferrer"> SharpOS sono runtime .net scritti in C #.

Potrebbe essere possibile riutilizzare parte del loro codice di runtime per aggiungere un runtime autonomo. Cosmos può essere utilizzato per ospitare un'applicazione personalizzata all'avvio: http://www.codeproject.com /KB/system/CosmosIntro.aspx

Altri suggerimenti

Dovresti dare un'occhiata al Progetto IKVM.NET . Include una Java Virtual Machine scritta in .NET.

http://www.ikvm.net/

So che non è un vero CLR che gira sopra il CLR, ma è la cosa più vicina che conosco che fa quello che vuoi.

Non ne sono a conoscenza, ma le idee di JVM in esecuzione su JVM dovrebbero essere utili.

Se desideri espandere la tua definizione di " esegue CIL " a " JIT-Compila CIL in codice nativo, " quindi dovresti guardare la Managed Operating System Alliance - un gruppo di persone (me compreso) che lavorano verso la creazione dei pezzi di runtime necessari per scrivere un kernel del sistema operativo gestito.

Attualmente, c'è ancora molto da fare, ma è possibile compilare JIT ed eseguire metodi semplici (solo Win32 - attualmente utilizziamo P / Invoke per creare i buffer di codice nativo)

È possibile in linea di principio combinando tecnologie:

  • Jikes RVM è un'implementazione di Java Virtual Machine scritta in Java.
  • IKVM.NET , un'implementazione della piattaforma Java su .NET.

Potrebbe anche essere possibile prendere Mono , compilare in bytecode LLVM, compila il bytecode in Javascript usando Emscripten ed esegui Javascript su .NET usando uno dei vari interpreti.

Guarda lo spazio dei nomi System.Reflection.Emit, in particolare la classe ILGenerator.

Puoi emettere IL al volo.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top