delphi4arab منتديات دلفي للعرب
Delphi's Garbage Collector - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي التقنية (https://delphi4arab.net/forum/forumdisplay.php?fid=6)
+--- قسم : دلفي والتعامل مع النظام و الذاكرة (https://delphi4arab.net/forum/forumdisplay.php?fid=20)
+--- الموضوع : Delphi's Garbage Collector (/showthread.php?tid=2582)



Delphi's Garbage Collector - kachwahed - 20-11-2010

السلام عليكم ورحمة الله
"دلفي لا يملك 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
بالتوفيق.



Delphi's Garbage Collector - Moha711 - 03-12-2010

انا من الناقمين على دلفي Smile لكنني استعمله كثيرا

اظن ان هده الخاصية التي تميز لغة السي شارب عنه
فال C# يقوم بتحرير المساحات التي تاخدها حقول المكون (Methods , Proprieties ...) اوتوماتيكيا
و بدون كتابة اي كود اضافي ..اليس هدا جميلا


Delphi's Garbage Collector - hanipino - 04-12-2010

إقتباس :..اليس هدا جميلا
نعم جميل ... لاكن ليست حجة كافية للناقمين على الدالفى . Smile
+
لا اضن ان هذه التقنية تشكل صعوبة لمطورين الدالفى (الشركة المطورة للدالفى)


Delphi's Garbage Collector - Moha711 - 05-12-2010

إقتباس :لا اضن ان هذه التقنية تشكل صعوبة لمطورين الدالفى (الشركة المطورة للدالفى)

بل كدلك فهي تمثل صعوبة
يخصوص السي شارب : ليس السي شارب من يقوم بتحريرها بل ال Net Framework.
يعني يدخل هنا كيفية التعامل مع الداكرة


Delphi's Garbage Collector - hanipino - 05-12-2010

ان كانت Net Framework هى المسؤولة عن ذالك ... اطلع على المشاركة الثانية هنى Smile


Delphi's Garbage Collector - Moha711 - 06-12-2010

hanipino كتب :ان كانت net framework هى المسؤولة عن ذالك ... اطلع على المشاركة الثانية هنى Smile

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

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


Delphi's Garbage Collector - me_delphi - 08-12-2010

للسهولة ضريبتها....

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

فالمبرمج الدي يعتاد على مثل هده الأشياء لا تكون لديه خلفية قوية في البرمجة


Delphi's Garbage Collector - kachwahed - 09-04-2011

مثال آخر له علاقة لـ 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
أو المرفق.



Delphi's Garbage Collector - me_delphi - 10-04-2011

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

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

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