Delphi's Garbage Collector
#1
السلام عليكم ورحمة الله
"دلفي لا يملك Garbage Collector" عبارة نسمعها أحيانا كثيرة...
ممن ينتقد دلفي وممن يثني عليه أحيانا!
لماذا؟
لأن من ينتقد دلفي يدعي أن ذلك نقطة ضعف فيه، لأن GC (اختصارا) يسهل البرمجة بتقليص الأسطر، وإراحة المبرمج من تحرير يدوي للمكونات وغير ذلك...
ومن يمدح دلفي بذلك يدعي أن ذلك يقيد من حركة المبرمج وتحريره لأغراضه يدويا يجعله يتحكم في الكود أكثر...
بغض النظر عما إذا كان ذلك بعاطفة من محبي دلفي أو بغيرها، أو هل هناك حاجة لـ GC أم لا...
السؤال: هل يمكن برمجة Garbage Collector؟

...أولا ماذا تقصد بـ Garbage Collector؟

باختصار... جامع القمامة (Garbage Collector) هو كائن يقوم بتسيير الذاكرة بحيث يقوم عند إنهاء البرنامج بتحرير المساحات المحجوزة -لإنشاء الأغراض- بشكل تلقائي.
بعبارة أخرى لست بحاجة إلى تحرير الأنماط التي تقوم بإنشائها:
PHP كود :
//try
 
MyObject := TObject.Create;
//finally
//  MyObject.Free;
//end; 
وبالتالي تتخلص من احتمال حصول أي استنزاف مفرط في الذاكرة!
طالع: من Wikipedia Garbage Collector
الجواب:
- طبعا، يمكن برمجة ذلك، كما يمكن برمجة أي شيء بدلفي Smile
هناك محاولات جيدة قام البعض بها:
كود :
http://edn.embarcadero.com/article/28217
السورس مرفق في مثال (دلفي 2006 فما فوق)، أيضا:
API for Boehm Garbage Collector DLL: مكتبة DLL أصلها مكتوبة بـ C ومثال لاستخدام بدلفي
كود :
http://cc.embarcadero.com/item/21646
بالتوفيق.


الملفات المرفقة
.rar   Garbage.Collector.BoehmDLL.rar (الحجم : 45.29 ك ب / التحميلات : 73)
.rar   Delphi'sGC.rar (الحجم : 4.07 ك ب / التحميلات : 68)
الرد
#2
انا من الناقمين على دلفي Smile لكنني استعمله كثيرا

اظن ان هده الخاصية التي تميز لغة السي شارب عنه
فال C# يقوم بتحرير المساحات التي تاخدها حقول المكون (Methods , Proprieties ...) اوتوماتيكيا
و بدون كتابة اي كود اضافي ..اليس هدا جميلا
الرد
#3
إقتباس :..اليس هدا جميلا
نعم جميل ... لاكن ليست حجة كافية للناقمين على الدالفى . Smile
+
لا اضن ان هذه التقنية تشكل صعوبة لمطورين الدالفى (الشركة المطورة للدالفى)
الرد
#4
إقتباس :لا اضن ان هذه التقنية تشكل صعوبة لمطورين الدالفى (الشركة المطورة للدالفى)

بل كدلك فهي تمثل صعوبة
يخصوص السي شارب : ليس السي شارب من يقوم بتحريرها بل ال Net Framework.
يعني يدخل هنا كيفية التعامل مع الداكرة
الرد
#5
ان كانت Net Framework هى المسؤولة عن ذالك ... اطلع على المشاركة الثانية هنى Smile
الرد
#6
hanipino كتب :ان كانت net framework هى المسؤولة عن ذالك ... اطلع على المشاركة الثانية هنى Smile

اعرف القصة كاملة
وانا لا اقول هدا الكلام من مخيلتي ... يمكنك ان تحصل على هده المعلومات من قرائتك للكتب

لدلك ترى البرامج المحررة تحت بيئة الدوت نت تقؤيبا صغيرة الحجم
لان البرنامج يحصل على كل شيء منها
الرد
#7
للسهولة ضريبتها....

هدا ما يجعل دللفي ك ++c

فالمبرمج الدي يعتاد على مثل هده الأشياء لا تكون لديه خلفية قوية في البرمجة
لا اله الا أنت سبحانك اني كنت من الضالمين
الرد
#8
مثال آخر له علاقة لـ Janez Atmapuri Makovsek
نمط StringList على شكل سجلّ (record) تماما كـ TStringList لإصدارات 2006 فما فوق
لست بحاجة إلى إنشائه أو تدميره، كلاهما يتم تلقائيا من خلال واجهة (Interface)
PHP كود :
var 
    
strings: StringList;
    
astr: string;
begin
    strings
.Add('test1');
    
strings.Add('test2');
    
aStr := string(strings);
    
RichEdit.Lines.AddStrings(strings);
end; 
الجميل في هذا النموذج أنه بإمكانك استخدامه بالنفس الطريقة لأي نمط TObject آخر...
المصدر:
كود :
http://cc.embarcadero.com/Item/25670
أو المرفق.


الملفات المرفقة
.7z   StringList.7z (الحجم : 3.62 ك ب / التحميلات : 16)
الرد
#9
إقتباس :مثال آخر له علاقة لـ Janez Atmapuri Makovsek
نمط StringList على شكل سجلّ (record) تماما كـ TStringList لإصدارات 2006 فما فوق
لست بحاجة إلى إنشائه أو تدميره، كلاهما يتم تلقائيا من خلال واجهة (Interface)

بارك الله فيك أخي kachwahed ...هده الأشياء جيدة و تسهل البرمجة و نجدها في لغات الدوت نت و Java مثلا الا أن من يعتاد عليها من البداية تخفي عليه أمور مهمة في البرمجة من الواجب العلم بها

أما في نظري أحب أن تبقى لغة الدلفي اقرب مايمكن للغة ++C
لا اله الا أنت سبحانك اني كنت من الضالمين
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم