delphi4arab منتديات دلفي للعرب

نسخة كاملة : Delphi's Garbage Collector
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم ورحمة الله
"دلفي لا يملك 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
بالتوفيق.
انا من الناقمين على دلفي Smile لكنني استعمله كثيرا

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

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

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

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

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

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

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

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