From Shabgard.ORG

Programming
زبان برنامه‌نویسی D بخش ششم
By
Dec 31, 2004, 17:13

نحوه برقراری ارتباط اشیای دارای جمع آوری زباله با کد بیرونی:

جمع آور زباله به دنبال ریشه ها د سگمنت داده ایستا و پشته ها و محتویات رجیستر هر رشته‌ی اجرا می گردد. اگر تنها ریشه یک شیئی بیرون از آنها باشد ، جمــــع آور زباله آن را از بین می برد و حافظه را آزاد می‌سازد.

برای اجتناب از این واقعه باید:

ریشه دسترسی به یک شیئی را در جایی ابقا کنیم که جمع آور زباله در آن جا به دنبال ریشه می گردد .

به شیـــئی مجــــــدداً توسط تخصیص دهنده که خارجی یا کتــــابخانه های زمان اجرای C ( malloc/free ) ، حافظه تخصیص دهیم .

اشاره گرها و جمع آور زباله

الگوریتم های جمع آوری زباله بستگی دارد به اشاره گرهایی که به چیزی در حال اشاره ‌اند و غیر اشاره‌گرها که به چیزی اشاره نمی کرده اند . بدین منظور دستورات زیر که در C غیر معمول نیستند باید به دقت در D از آنها خودداری شود :

۱) اشاره گرها را با xor کردن آنها با مقادیر دیگر مخفی نکنید مانند اشاره گر xor شده حقه‌ی لیست پیوندی در C . از حقه‌ی xor برای جا به جا کردن مقادیر دو اشاره گر استفاده نکنید .

۲) اشاره گرهای به مقادیر صحیح را توسط cast یا دیگر حقه ها ذخیره نکنید چون جمع آوری زباله انواع غیر اشاره‌گر را برای یافتن ریشه های دسترسی بررسی نمی کند .

۳) از مزیت هم ترازی اشاره گرها برای ذخیره فلگهای بیتی در بیتهای سطح پائین یا بیتهای سطح بالا استفاده نکنید .

۴) مقادیر صحیح را در اشاره گرها نگهداری نکنید و

۵) مقادیر سحر آمیز را در اشاره گرها ذخیره نکنید به غیر از null .

۶) اگر شما باید یک مکان نگهداری خاص را بین انواع اشاره گر و غیر اشاره‌گر به اشتراک بگذارید از union استفاده کنید تا جمع آور زباله تکلیف خودش را در آن مورد بداند .

در حقیقت تا جایی که می شود از اشاره گرها استفاده نکنید . D دارای خصوصیات است که نشان می دهد که اغلب اشاره گرهای آشکارا ، متروک و بلااستفاده خواهند بود . مانند اشیاء مرجع ، آرایه های پویا و جمع آوری زباله . اشاره گرها برای ارتباط موفق با API های C و بعضی کارهای کیمیاگرانه پدید آمده بودند .


ساختمانها و یونیون ها

Aggregate Declaration

شبیه C کار می کنند با تفاوتهای زیر :

۱) بدون فیلد های بیت

۲) هم ترازی به طور آشکار قابل مشخص کردن است .

۳) بدون فضای نام برچسب جداگانه – نام برچسب ها در حوزه کنونی می باشند .

۴) اعلان هایی مانند struct ABC x ; مجاز نیستند بنویسید : ABC x ;

۵) ساختمانها یا یونیون های بی نام می توانند عضوی از ساختمانها یا یونیون های دیگر باشند .

۶) انتساب دهنده های پیش فرض اولیه برای اعضا پشتیبانی می شود .

۷) توابع عضو و اعضای استاتیک مجاز است .

ساختمانها و یونیون ها به معنی اجتماع ساده داده ها یا راهی برای رنگ و آب دادن به یک ساختمان داده می باشد ، علاوه بر سخت افزار یا یک نوع خارجی ، انواع خارجی می توانند توسط API سیستم عامل یا یک فرمت فایل تعریف شوند . خصوصیات شیئی گرا نیز با نوع داده کلاس فراهم شده اند .


انتساب اولیه استاتیک ساختمان ها

به اعضای ساختمان استاتیک به طور پیش فرض مقدار صفر انتساب داده می شود و به مقادیر ممیز شناور مقدار NAN . اگر یک انتساب دهنده اولیه‌ی استاتیک فراهم شود ، اعضا به وسیله نام عضو ، کولوم و املای عبارت انتساب اولیه می شوند . در ضمن ممکن است اعضا به هر نحو انتساب اولیه شوند .

struct X { int a; int b; int c; int d = 7;}

static X x = { a:1, b:2}; // c is set to 0, d to 7

static X z = { c:4, b:5, a:2 , d:5}; // z.a = 2, z.b = 5, z.c = 4, d = 5

انتساب اولیه‌ی استاتیک یونیون ها

یونیون ها به طور آشکار مقدار دهی اولیه می شوند :

union U { int a ; double b ; }

static U u = { b : 5.0 } ; // u.b = 5.0

دیگر اعضای یونیون که انتساب دهنده را جای می گذارند ولی فضای بیشتری اشغال می کنند مقدار صفر می گیرند .

Enums

اعلان Enum

enum identifier { اعضا }

enum { اعضا }

enum identifier ;

Enum ها کاربرد معمولی ماکروهای # define را با ثبات های تعریف جایگزین می کنند .

Enum ها همچنین می توانند بی نام باشند که در آن مورد به سادگی ثابت های مجتمع را تعیف می کنند و یا دارای نام باشند که مقدمه یک نوع جدید خواهند بود .

C = 2 , b=1 , A=0 ثابتهای enum { A,B,C} بدون نام enum

را تعریف می کند . در حالی که Enum دارای نام enum X { A,B,C} نوع جدید x با مقادیر X.A = 0 و X.B = 1 و X.C =2 تعریف می کند .

Enum ها باید حداقل دارای یک عضو باشند . اگر برای یک عضو Enum یک عبارت ریاضی فراهم شده باشد ارزش عضو مذکور برابر حاصل عبارت است و عضو بعدی Enum دارای ارزش عضو قبلی به علاوه یک است .

Enum { A , B = 5 + 7 , C, D = 8 , E }


داریم A = 0 , B = 12 , C = 13 , D = 8 , E = 9

صفات Enum

کوچکترین عضو min

بزرگترین عضو max

سایز نگهداری ارزش عضو size

مقدار دهی Enum

در غیاب یک مقدار دهنده به صورت آشکار ، یک متغیر Enum دارای مقدار اولین عضو است .

Enum X { A = 3 , B,C }

مقدار X برابر 3 می شود . X x ;



حمید نصیبی hamidnsaba@yahoo.com



Copyright by Shabgard.ORG