زبان برنامهنویسی D بخش ششم(961 مجموع کلمات موجود در متن) (4336 بار مطالعه شده است)  نحوه
برقراری ارتباط اشیای دارای جمع آوری
زباله با کد بیرونی
جمع
آور زباله در سگمنت داده ایستا ، پشته ها
و محتویات رجیستر هر thread
،
به دنبال ریشه ها می گردد .
اگر
تنها ریشه یک شیئ بیرون از آنها باشد ،
جمع آور زباله آن را از بین می برد و حافظه
را آزاد میسازد .
برای
اجتناب از این واقعه باید :
۱.
ریشه
دسترسی به یک شیئ را در جایی نگهداری کنیم
که جمع آور زباله در آن جا به دنبال ریشه
می گردد .
۲.به
شیئ مجدداً توسط تخصیص دهنده کد خارجی
یا کتابخانه های زمان اجرای C
یعنی
malloc/ free ،
حافظه تخصیص دهیم .
اشاره
گرها و جمع آور زباله
الگوریتم
های جمع آوری زباله بستگی دارد به اشاره
گرهایی که به چیزی در حال اشاره اند و
غیر اشارهگرها که به چیزی اشاره نمی
کرده اند . بدین
منظور دستورات زیر که در C
غیر
معمول نیستند باید به دقت در D
از
آنها خودداری شود :
۱.
اشاره
گرها را با xor
کردن
آنها با مقادیر دیگر مخفی نکنید مانند
اشاره گر xor
شده
حقهی لیست پیوندی در C
. از
حقهی xor برای
جا به جا کردن مقادیر دو اشاره گر استفاده
نکنید .
۲.
اشاره
گرهای به مقادیر صحیح را توسط cast
یا
دیگر حقه ها ذخیره نکنید ، چون جمع آوری
زباله انواع غیر اشارهگر را برای یافتن
ریشه های دسترسی بررسی نمی کند .
۳.
از
مزیت هم ترازی اشاره گرها برای ذخیره
فلگهای بیتی در بیتهای سطح پائین یا بیتهای
سطح بالا استفاده نکنید .
۴.
مقادیر
صحیح را در اشاره گرها نگهداری نکنید .
۵.
مقادیر
جادویی را در اشاره گرها ذخیره نکنید به
غیر از null .
۶.
اگر
شما باید یک مکان نگهداری خاص را بین انواع
اشاره گر و غیر اشارهگر به اشتراک بگذارید
از union استفاده
کنید تا جمع آور زباله تکلیف خودش را در
آن مورد بداند .
در
حقیقت تا جایی که می شود از اشاره گرها
استفاده نکنید .
D دارای
امکاناتی مانند اشیاء مرجع ، آرایه های
پویا و جمع آوری زباله است که نشان می دهد
که اغلب اشاره گرهای آشکارا ، متروک و
بلااستفاده خواهند بود .
اشاره
گرها برای ارتباط موفق با API
های
C و
بعضی کارهای کیمیاگرانه در D
فراهم
شده اند .
ساختمانها
و یونیون ها
نحوه
اعلان :
- Tag
{ DeclDefs }
-
Tag Identifier { DeclDefs }
-
Tag Identifier ;
-
Tag: struct / union
شبیه 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
<dd dir="RTL" style="margin-bottom: 0.5cm; text-align: right">
انتساب
اولیهی استاتیک یونیون ها
یونیون
ها به طور آشکار مقدار دهی اولیه می شوند
:
- union
U { int a ; double b ; }
-
static U u = { b : 5.0 } ; //
u.b = 5.0
دیگر
اعضای یونیون که انتساب دهنده را جای می
گذارند ولی فضای بیشتری اشغال می کنند
مقدار صفر می گیرند .
- Enums
-
اعلان
:
-
EnumDeclaration:
-
enum identifier { EnumMembers
}
-
enum { EnumMembers }
-
enum identifier ;
-
Enum کاربرد
معمولی ماکروی define#
در
زبان C را
برای تعریف مقادیر ثابت جایگزین میکند.
Enum ها
همچنین می توانند بی نام باشند که در آن
مورد به سادگی ثابت های مجتمع را تعریف
می کنند و یا دارای نام باشند که مقدمه یک
نوع جدید خواهند بود .
اعلان
زیر :
- enum
{ A, B, C } // anonymous enum
مقادیر ثابت A=0
, B=1 , C=2 که معادل دستورات
زیر است را تعریف میکند :
- const int A =
0; const int B = 1; const int C = 2;
در حالی که اعلان زیر:
- enum X { A, B,
C } // named enum
نوع جدید 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 |