2008-09-30 3 views
10

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

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

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

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

+1

Но ... почему? Кажется, очень странно, и я не могу придумать какие-либо возможные варианты использования. – davr 2008-09-30 00:59:51

+5

@Davr: Потому что тогда вы можете запустить CLR в CLR в CLR! – Shog9 2008-09-30 01:50:15

+4

@ Davr много приходит к тем же аргументам, что и AOP, но CLR-CLR также может быть еще более «управляемым», чем обычная среда CLR, поскольку она может отражать себя и делать изменения, включая оптимизацию, невозможную с простым старым CLR. Кроме того, это просто здорово. – 2008-09-30 10:47:57

ответ

5

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

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

1

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

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

4

You следует проверить IKVM.NET Project. Он включает в себя виртуальную машину Java, написанную на .NET.

http://www.ikvm.net/

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

1

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

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

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

Смежные вопросы