إيفيميرون
الإيفيميرون هو بنية بيانات تحل مشكلتين مترابطتين في أنظمة جمع البيانات المهملة . من جهة، يُرسل الإيفيميرون إشعارًا عند اقتراب جمع كائن ما . ومن جهة أخرى، يسمح الإيفيميرون بربط البيانات بكائن ما دون إنشاء مرجع إليه، مما قد يمنع جمعه. يتكون الإيفيميرون من زوج مفتاح-قيمة، حيث يُمثل المفتاح الكائن الذي يحميه الإيفيميرون، مُعلمًا النظام عند إمكانية جمعه، بينما تُمثل القيمة أي بيانات مرتبطة بالكائن، مثل قائمة خصائص ، والتي قد تكون فارغة. ونظرًا لأن عناصر قائمة الخصائص قد تُشير إلى المفتاح، فقد تمنع جمعه. لكن جامع البيانات المهملة يتعامل مع الإيفيميرون بشكل خاص. لا يتم تتبع حقل القيمة إلا بعد التأكد من إمكانية الوصول إلى المفتاح من جذور النظام عبر مفاتيح الإيفيميرون فقط. وبالتالي، تحتفظ مجموعة الإيفيميرونات التي لا يُمكن الوصول إلى مفاتيحها إلا عبر مفاتيح الإيفيميرون بمفاتيح جاهزة للجمع. لا يمكن الوصول إلى هذه الكائنات من الجذور إلا عبر الكائنات المؤقتة (ephemerons). عندما يكتشف جامع البيانات المهملة مجموعة كهذه، تُضاف الكائنات المؤقتة إلى قائمة الانتظار للإشعار، ويتم تتبع مفاتيحها وقيمها. وبالتالي، تكشف الكائنات المؤقتة الكائنات الجاهزة للجمع، وتكسر الحلقات التي قد تمنع جمع الكائنات.
وصف
في علوم الحاسوب ، تحدث عملية الإنهاء عندما يُبلغ جامع البيانات المهملة (GC) التطبيق بأن كائنًا ما "يكاد يكون قابلاً للجمع". تُستخدم هذه العملية لمساعدة التطبيق في الحفاظ على ثوابته . قد يستخدم جامع البيانات المهملة المراجع الضعيفة لتحديد الكائنات التي تكاد تكون قابلة للجمع. عند النظر إلى المراجع الضعيفة كأزواج مفتاح-قيمة، يكمن الفرق الرئيسي بينها وبين الكائنات المؤقتة في طريقة تعامل جامع البيانات المهملة معها. بالنسبة للمراجع الضعيفة، يتبع جامع البيانات المهملة دائمًا القيمة الموجودة في زوج المفتاح-القيمة. أما بالنسبة للكائنات المؤقتة، فلا يتبع جامع البيانات المهملة القيمة، بل يضع الكائن المؤقت في قائمة انتظار لمزيد من المراقبة في مرحلة ثانية: بعد انتهاء مرحلة التتبع الأولى، يمر جامع البيانات المهملة عبر قائمة الانتظار ناظرًا إلى كل كائن مؤقت، وإذا تمت رؤية مفتاحه، فإنه يتبع قيمته. يؤثر هذا الاختلاف الدقيق على الرسوم البيانية التي تحتوي على بعض أنواع الدورات، حيث لا تصف الأزواج الضعيفة بدقة أن الكائن يجب أن يكون "يكاد يكون قابلاً للجمع". على سبيل المثال، لنفترض زوجًا من المفتاح والقيمة مع مراجع ضعيفة، حيث يكون المفتاح كائنًا والقيمة مجموعة من الخصائص المرتبطة به. من المتوقع أنه عندما يصبح الكائن جاهزًا للجمع، ستختفي الخصائص أيضًا. ولكن إذا كانت القيمة، ربما بشكل متعدٍ، تُشير إلى مفتاحها (الكائن)، فلن يُجمع الكائن أبدًا. لو استُخدم عنصر مؤقت (ephemeron) بدلًا من ذلك، لما تم تتبع القيمة إلا إذا ثبت أن الكائن موجود، مما يحل الحلقة. تُشبه العناصر المؤقتة الأزواج الضعيفة، ولكن قد يُصنف الكائن الموجود في حقل مفتاح العنصر المؤقت على أنه "شبه قابل للجمع" حتى لو كان بالإمكان الوصول إليه من حقول قيمة العنصر المؤقت. [ 1 ]
الاستخدامات
الكائن المؤقت هو كائن يشير بقوة إلى محتوياته طالما لم يتم جمع مفتاحه بواسطة جامع البيانات المهملة، ثم يشير بشكل ضعيف بعد ذلك. تحل الكائنات المؤقتة مشكلة شائعة عند محاولة "إلحاق" خصائص بالكائنات باستخدام سجل. فعندما يُراد إلحاق خاصية ما بكائن، يجب أن يكون لهذه الخاصية (من حيث سلوك جامع البيانات المهملة) عادةً نفس مدة بقاء متغير مثيل هذا الكائن. إلا أن هذا الأمر يتعقد بوجود ارتباط خارجي بين الكائن وخاصيته، مثل:
خاصية --------- سجل --------- ارتباط --------- كائن
هنا، يحتفظ سجل النظام (طرف ثالث) بالارتباط نفسه، مما يستلزم إزالته يدويًا من السجل (بدلاً من عملية جمع البيانات المهملة التلقائية). مع أن هذه المشكلة قابلة للحل دائمًا في أي حالة محددة باستخدام أحد أنواع الارتباطات الضعيفة، إلا أن اختيار النوع "المناسب" من الارتباط يعتمد على عوامل متعددة، بعضها قابل للتغيير ديناميكيًا.
تُحلّ مشكلة "المتغيرات المؤقتة" (Ephemerons) بتحديد أن "محتويات" (قيمة) المتغير المؤقت تُحفظ بشكل دائم حتى يُعرف أن المفتاح قد تم جمعه بواسطة جامع البيانات المهملة. بعد ذلك، تُحفظ محتويات المتغير المؤقت بشكل مؤقت. وبالتالي، لا يمكن أن تصبح محتويات المتغير المؤقت مؤهلة لجمع البيانات المهملة إلا إذا كان المفتاح قابلاً لذلك، وهو السلوك نفسه الذي نلاحظه لمتغير مثيل الكائن.
تاريخ
ابتكر جورج بوسورث مفهوم "البيانات المؤقتة" (Ephemerons) لأول مرة أثناء عمله في شركة Digitalk. [ 1 ] وقد استُخدمت كآلية إنهاء في Visual Smalltalk Enterprise . واليوم، تتوفر البيانات المؤقتة في معظم لهجات Smalltalk ، بالإضافة إلى العديد من اللغات الأخرى التي تدعم جمع البيانات المهملة تلقائيًا.
أمثلة على الاستخدام
أحاديث قصيرة
تتضمن العديد من لهجات لغة سمول توك ميزاتٍ مُدمجة أو حزمًا إضافية تُسمى "إفيميرون". على سبيل المثال، GNU Smalltalk [ 2 ] و Squeak [ 3 ] .
لغة لوا
لا تحتوي لغة Lua على بنية بيانات منفصلة خاصة بالبيانات المؤقتة (ephemeron)، ولكن يمكن ضبط هياكل بيانات الجداول فيها بحيث تحتفظ بمفاتيحها أو قيمها أو كليهما بطريقة ضعيفة. إذا كانت المفاتيح محفوظة بطريقة ضعيفة، بينما القيم محفوظة بطريقة قوية، فسيتصرف الجدول كبيانات مؤقتة. كما قدمت Lua 5.2 سلوك الجداول الوصفية (metatable) الذي يساعد في إنشاء هياكل بيانات شبيهة بالبيانات المؤقتة. [ 4 ]
.شبكة
تدعم لغات مثل C# و F# و VB.NET ، بدءًا من .NET Framework 4.0، فئة ConditionalWeakTable . [ 5 ] كانت آلية ephemeron الأساسية ( DependentHandle ) خاصة حتى .NET 6.
أوكاميل
تم تقديم تطبيق لنوع ephemeron في OCaml في عام 2014 [ 6 ] وتمت إضافته إلى المكتبة القياسية في الإصدار 4.03. [ 7 ]
مضرب
تدعم لهجة Racket من لغة Lisp خاصية ephemerons في نظام التشغيل الخاص بها . هناك ، تُستخدم ephemerons مع عمليات الربط الضعيفة للسماح لجامع البيانات المهملة بتحرير أزواج المفتاح والقيمة حتى لو كانت القيمة تحتوي على مرجع إلى مفتاح. [ 8 ]
مخطط SRFI
يُعرّف طلب تنفيذ Scheme (SRFI ) واجهة برمجة تطبيقات (API) للعناصر المؤقتة (ephemerons) للغة Scheme . [ 9 ] ومع ذلك، لا تدعم جميع تطبيقات Scheme جميع طلبات تنفيذ Scheme (SRFIs).
مراجع
- 1 2 باري هايز (1997). "الزائلات: آلية إنهاء جديدة" . لغات البرمجة الكائنية، والأنظمة، والتطبيقات .
- ↑ "الكائنات الخاصة - دليل مستخدم GNU Smalltalk" . تم الاطلاع عليه بتاريخ 20 فبراير 2013 .
- ↑ "الظواهر العابرة" . تم الاطلاع عليه بتاريخ 20 فبراير 2013 .
- ↑ "دليل مرجع Lua 5.2، القسم 2.5.2" . تم الاطلاع عليه بتاريخ 23 مايو 2025 .
- ↑ ".NET 4.0 - System.Runtime.CompilerServices.ConditionalWeakTable" . مدونة IKVM.NET . مؤرشفة من الأصل بتاريخ 16 أكتوبر 2013. تم الاطلاع عليها بتاريخ 14 أكتوبر 2013 .
- ↑ بوبوت، فرانسوا. "الكلمات المؤقتة تلتقي بجامع البيانات المهملة في OCaml" (ملف PDF) . ورشة عمل مستخدمي ومطوري OCaml لعام 2014. مؤرشف من الأصل (ملف PDF) في 19 نوفمبر 2016. تم الاطلاع عليه في 5 أبريل 2018 .
- ↑ مينسكي، يارون. "OCaml 4.03: كل شيء آخر" . مدونة جين ستريت التقنية . تم الاطلاع عليه بتاريخ 5 أبريل 2018 .
- ↑ "15.2 الزوال" . تم الاطلاع عليه بتاريخ 20 فبراير 2013 .
- ↑ "SRFI-124: Ephemerons" .
- إدارة الذاكرة التلقائية
- هياكل المترجم
