سؤال

كنت أتساءل عما إذا كان هناك CLR متوافق مع .NET تم تنفيذه باستخدام CLI (البنية التحتية للغة المشتركة)، على سبيل المثال، استخدام .NET نفسه، أو على الأقل إذا كانت هناك أي موارد من شأنها أن تساعد في بناء واحدة.

في الأساس، شيء مثل برنامج .NET الذي يقوم بتحميل التجميعات مثل MemoryStreams، ويوزع الرمز الثانوي، ويبني الأنواع، وينفذ التعليمات.اختياريًا، يمكنه ترجمة JIT إلى IL القياسي باستخدام Reflection.Emit أو غير ذلك.

لا أريد أن ترجمة لغة .NET ليتم تشغيلها بواسطة CLR الأصلي.أريد CLR هذا مكتوب بلغة .NET (ليس C++ أو C غير مُدار كما هو معتاد) و أشواط CIL. إذا تم القيام به بشكل صحيح، فيجب أن يكون قادرًا على تشغيل نفسه.

أي أفكار حول استخدام Mono.Cecil لهذا النوع من الأشياء؟

هل كانت مفيدة؟

المحلول

لا أعتقد أن هناك حاليًا أي أجهزة افتراضية .net مستقلة ذاتية الاستضافة ولكن كلاهما الكون و شارب أو إس هي أوقات تشغيل .net مكتوبة بلغة C#.

قد يكون من الممكن إعادة استخدام بعض أكواد وقت التشغيل الخاصة بهم لإضافة وقت تشغيل مستقل.يمكن استخدام Cosmos لاستضافة تطبيق مخصص عند التمهيد: http://www.codeproject.com/KB/system/CosmosIntro.aspx

نصائح أخرى

يجب عليك التحقق من مشروع IKVM.NET.يتضمن جهاز Java Virtual Machine مكتوبًا بلغة .NET.

http://www.ikvm.net/

أعلم أنه ليس CLR فعليًا يتم تشغيله أعلى CLR، ولكنه أقرب شيء أعرفه يفعل ما تريد.

لست على علم بواحدة منها، لكن الأفكار من JVM التي تعمل على JVM يجب أن تكون مفيدة.

إذا كنت على استعداد لتوسيع تعريفك لـ "تشغيل CIL" إلى "JIT-Compiles CIL إلى Native Code"، فعليك إلقاء نظرة على تحالف نظام التشغيل المدار - مجموعة من الأشخاص (وأنا من بينهم) يعملون على إنشاء أجزاء وقت التشغيل اللازمة لكتابة نواة نظام تشغيل مُدار.

في الوقت الحالي، لا يزال هناك الكثير مما يجب القيام به، ولكن من الممكن تجميع JIT وتشغيل أساليب بسيطة (Win32 فقط - نستخدم حاليًا P/Invine لإنشاء المخازن المؤقتة للتعليمات البرمجية الأصلية)

من الممكن من حيث المبدأ من خلال الجمع بين التقنيات:

  • جيكس RVM هو تطبيق Java Virtual Machine مكتوب بلغة Java.
  • IKVM.NET, ، تطبيق لمنصة Java على .NET.

قد يكون من الممكن أيضا أن تأخذ كثرة الوحيدات, ، قم بتجميع الرمز الثانوي LLVM، وقم بتجميع الرمز الثانوي إلى Javascript باستخدام إمسكريتن, وقم بتشغيل Javascript على .NET باستخدام أي من المترجمين الفوريين المختلفين.

انظر إلى مساحة الاسم System.Reflection.Emit، وتحديدًا فئة ILGenerator.

يمكنك أن تنبعث منها IL على الطاير.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top