عند تنفيذ مترجم فوري ، هل من الجيد أم سيئًا أن تتمثل في تجميع جامع القمامة في لغة المضيف؟

StackOverflow https://stackoverflow.com/questions/2179501

سؤال

دعنا نقول أنك تقوم بتنفيذ مترجم لفترات مترجمة بلغة GCED بلغة يتم GED. يبدو لي أنك ستحصل على مجموعة Garbage مجانًا طالما أنك حريص بشكل معقول بشأن تصميمك.

هل هذا عمومًا كيف يتم ذلك؟ هل هناك أسباب وجيهة لعدم القيام بذلك؟

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

المحلول

اللغة ووقت التشغيل هما شيئان مختلفان. إنهم ليسوا مرتبطين حقًا IMHO.

لذلك ، إذا كان وقت التشغيل الحالي الخاص بك يوفر GC بالفعل ، فيجب أن يكون هناك سبب وجيه لتمديد وقت التشغيل مع GC آخر. في الأيام الخوالي عندما كانت تخصيصات الذاكرة في نظام التشغيل بطيئة ومكلفة ، أحضرت التطبيقات مديري الكومة الخاصة بهم حيث يكون أكثر كفاءة في التعامل مع قطع البيانات الصغيرة. كان ذلك Readon لإضافة إدارة ذاكرة أخرى إلى وقت تشغيل موجود (أو نظام التشغيل). ولكن إذا كنت تتحدث عن Java أو .NET أو نحو ذلك - يجب أن تكون هذه جيدة وفعالة بما يكفي لمعظم المهام في متناول اليد.

ومع ذلك ، قد ترغب في إنشاء واجهة/واجهة برمجة تطبيقات مناسبة لمهام إدارة الذاكرة والكائنات (وغيرها) ، بحيث يمكن تنفيذ وقت تشغيل لغتك ("الضيف") على وقت تشغيل مضيف آخر في وقت لاحق.

نصائح أخرى

بالنسبة للمترجم الفوري ، لا ينبغي أن تكون هناك مشكلة في استخدام GC المضيف ، IMHO ، خاصة في البداية. كما هو الحال دائمًا ، يجب أن يكون الهدف هو عمل شيء ما ، ثم يجعله يعمل بشكل صحيح ، ثم اجعله سريعًا. هذا صحيح بشكل خاص للغات الخاصة بالمجال (DSL) حيث الهدف هو لغة صغيرة. بالنسبة لهذه ، فإن تنفيذ GC الكامل سيكون مبالغة.

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