سؤال

وأنا أكتب لغتي البرمجة الخاصة في C #، مع بعض السمات أحب، وأنا اخترت استخدام MSIL كما بايت كود المخرجات (Reflection.Emit مفيد جدا، وأنا لا يجب أن نفكر حتى بايت كود آخر). كان يعمل، وتنبعث قابل للتنفيذ، والتي يمكن تشغيلها (حتى decompiled مع العاكس :)) وسريع جدا.

ولكن - أريد أن تشغيل متعددة "العمليات" في واحدة عملية + موضوع واحد، والسيطرة على الوقت وحدة المعالجة المركزية المسندة إليها يدويا (أيضا تنفيذ أكثر قوة IPC التي توفرها إطار .NET) هل هناك أي طريقة لتعطيل تماما JIT وخلق الخاصة VM، يخطو التدريس بعد تعليمات باستخدام صافي الإطار (واستخدام الذاكرة السيطرة، وما إلى ذلك)، من دون الحاجة إلى كتابة أي شيء بمفردي، أو لتحقيق ذلك لا بد لي من الكتابة كامل MSIL تفسير؟

وتحرير 1): وأنا أعلم أن تفسير IL ليس أسرع شيء في الكون:)

وتحرير 2): لتوضيح - أريد بلدي VM ليكون نوعا من "نظام التشغيل" - الذي تحصل عليه بعض الوقت وحدة المعالجة المركزية ويقسمها بين العمليات، تسيطر على تخصيص الذاكرة بالنسبة لهم، وهلم جرا. هو لا يجب أن تكون سريعة وغير فعالة، ولكن مجرد إثبات المفهوم لبعض تجاربي. أنا لا أحتاج لتنفيذه على مستوى معالجة كل التعليمات - ما إذا كان ينبغي أن يتم ذلك من خلال .NET، أنا متعود الاعتبار، أريد فقط أن أقول: خطوة تعليمة واحدة، وانتظر حتى قلت لك أن الخطوة التالية

وتحرير 3): أدركت، أن ICorDebug يمكن ربما تحقيق احتياجاتي، وتبحث الآن في تنفيذ وقت التشغيل مونو في

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

المحلول

هل يمكن استخدام مونو - أعتقد أن يسمح خيار لتفسير IL بدلا من ذلك JITting . والحقيقة أنه من الوسائل مفتوحة المصدر (حسب الترخيص) التي يجب أن تكون قادرا على تعديله وفقا لاحتياجاتك أيضا.

ومونو لا يملك كل من وظائف. NET، وباعتراف الجميع - ولكن قد تفعل كل ما تحتاجه

.

نصائح أخرى

وحذار أن MSIL تم تصميمها ليتم تحليلها من قبل مترجم JIT. وهي ليست مناسبة جدا للمترجم. وخير مثال هو ربما التعليمات ADD. فهو يستخدم لإضافة مجموعة متنوعة واسعة من قيمة القيم نوع: بايت، قصيرة، int32، int64، USHORT، uint32، uint64. المترجم الخاص بك يعرف ما هو مطلوب نوع من الإضافة ولكن سوف تفقد هذا النوع من المعلومات عند إنشاء MSIL.

والآن أنت بحاجة للعثور عليه مرة أخرى في وقت التشغيل وهذا يتطلب فحص أنواع القيم على المكدس التقييم. بطيئة جدا.

لقد كرس أحد IL تفسيرها بسهولة تعليمات ضيف مثل ADD8، ADD16، وما إلى ذلك.

وتنفيذ مايكروسوفت من وقت تشغيل اللغة العامة لديها نظام إعدام واحدة فقط، وJIT. مونو، من ناحية أخرى تأتي مع كل وJIT ومترجم.

وأنا، ومع ذلك، لا نفهم تماما بالضبط ما كنت <م> تريد أن تفعل بنفسك وماذا كنت ترغب في ترك لتنفيذ مايكروسوفت:

<اقتباس فقرة>   

هل هناك أي طريقة لتعطيل تماما JIT وخلق الخاصة VM؟

و

<اقتباس فقرة>   

... دون الحاجة لكتابة أي شيء بمفردي، أو لتحقيق ذلك لا بد لي من الكتابة كامل MSIL تفسير؟

وهو نوع من تناقض.

إذا كنت تعتقد، ويمكن أن تكتب نظام التنفيذ أفضل من مايكروسوفت JIT، سيكون لديك لكتابة من الصفر. نضع في اعتبارنا، بيد أن كلا من مايكروسوفت ومونوس JIT والمجمعين الأمثل للغاية. (البرمجة اللغوية تبادل لاطلاق النار)

وتكون قادرة على الجدول الزمني وحدة المعالجة المركزية لعمليات نظام التشغيل هو بالضبط لا يمكن من وضع المستخدم. هذا هو المهمة أنظمة التشغيل.

وربما تكون بعض تنفيذ المواضيع خضراء فكرة، ولكن هذا هو بالتأكيد موضوع للالتعليمات البرمجية غير المدارة. اذا كان هذا ما تريد، وإلقاء نظرة على API استضافة CLR.

وأود أن أقترح، حاولت تنفيذ غتك في CIL. بعد كل شيء، ويحصل على جمعها وصولا الى إلى x86 الخام. إذا كنت لا تبالي التحقق، يمكنك استخدام المؤشرات عند الضرورة.

وشيء واحد يجب أن تنظر به هو إنشاء التعليمات البرمجية في أسلوب الدولة والآلة. اسمحوا لي أن أشرح ما أعنيه بهذا.

وعندما تكتب أساليب مولد في C # مع عودة العائد، وجمعت طريقة إلى فئة IEnumerator الداخلية التي تطبق آلة الدولة. يتم ترجمة التعليمات البرمجية في هذه الطريقة إلى كتل المنطقية التي يتم إنهاء مع عودة العائد أو العائد بيان الشوط الاول، وكل كتلة يتوافق مع دولة مرقمة. لأن كل عودة العائد يجب أن توفر قيمة، كل كتلة ينتهي عن طريق تخزين قيمة في حقل المحلي. الكائن العداد، من أجل توليد القيمة المقبلة، ويدعو طريقة التي تتكون من بيان التبديل العملاقة على عدد الولاية الحالي من أجل تشغيل كتلة الحالي، ثم تتقدم الدولة وإرجاع قيمة الحقل المحلي.

ولغة البرمجة الخاصة بك يمكن أن تولد أساليبها في أسلوب مماثل، حيث يتوافق طريقة لكائن جهاز الدولة، وVM يخصص وقت من خلال تطوير آلة الدولة خلال الوقت المحدد. هناك عدد قليل من أجزاء صعبة إلى هذا الأسلوب: تنفيذ أشياء مثل استدعاءات الأسلوب ومحاولة / وأخيرا كتل هي أصعب مما توليد متابعة مباشرة MSIL

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