Есть ли CLR, который работает на CLR? - PullRequest
10 голосов
/ 30 сентября 2008

Мне было интересно, существует ли .NET-совместимая CLR, которая была реализована с использованием CLI (общеязыковая инфраструктура), например, с использованием самой .NET, или, по крайней мере, были ли какие-либо ресурсы, помогите с постройкой один.

По сути, что-то вроде программы .NET, которая загружает сборки в виде MemoryStreams, анализирует байт-код, создает типы и выполняет инструкции. Опционально, он может JIT-компилироваться в стандартный IL, используя Reflection.Emit или как угодно.

Я не хочу компилировать язык .NET, который будет запускаться исходным CLR. Мне нужен CLR, который написан на языке .NET (не неуправляемый C ++ или C, как обычно) и работает CIL. Если все сделано правильно , он должен быть в состоянии запустить сам.

Есть мысли об использовании Mono.Cecil для такого рода вещей?

Ответы [ 6 ]

5 голосов
/ 30 сентября 2008

Я не думаю, что в настоящее время есть какие-либо автономные виртуальные машины .net, которые являются хостами, но оба Cosmos и SharpOS являются средами выполнения .net, написанными на C #.

Может быть возможно повторно использовать часть их кода времени выполнения для дополнительного автономного времени выполнения. Cosmos может использоваться для размещения пользовательского приложения при загрузке: http://www.codeproject.com/KB/system/CosmosIntro.aspx

4 голосов
/ 30 сентября 2008

Вы должны проверить IKVM.NET Project . Включает виртуальную машину Java, написанную на .NET.

http://www.ikvm.net/

Я знаю, что это не настоящий CLR, который работает поверх CLR, но это самое близкое, что я знаю, что делает то, что вы хотите.

1 голос
/ 20 июля 2012

Это возможно в принципе путем объединения технологий:

  • Jikes RVM - это реализация виртуальной машины Java, написанная на Java.
  • IKVM.NET , реализация платформы Java на .NET.

Также возможно взять Mono , скомпилировать в байт-код LLVM, скомпилировать байт-код в Javascript, используя Emscripten , и запустить Javascript в .NET, используя любой из различных интерпретаторов.

1 голос
/ 30 сентября 2008

Если вы хотите расширить свое определение «запускает CIL» до «JIT-Compiles CIL для собственного кода», то вам следует обратиться к Alliance Managed Operating System - группе людей (включая меня) работает над созданием частей времени выполнения, необходимых для написания ядра управляемой операционной системы.

В настоящее время осталось сделать совсем немного, но можно JIT-компилировать и запускать простые методы (только для Win32 - в настоящее время мы используем P / Invoke для создания собственных буферов кода)

1 голос
/ 30 сентября 2008

Я не знаю ни одного, но идеи от JVM, работающие на JVM, должны быть полезны.

0 голосов
/ 30 сентября 2008

Посмотрите на пространство имен System.Reflection.Emit, в частности класс ILGenerator.

Вы можете испускать IL на лету.

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

...