http://technotux.com/html/index.php?module=htmlpages&func=display&pid=58
Welcome to TECHNOTUX      
   ورود/ایجاد حساب کاربری یكشنبه، ۰۳ آذر ۱۳۸۷   
   منوی اصلی
· خانه
   تازه واردان و تازه‌کارها
· تازه واردان و تازه‌کارها بخوانند
· قوانین انجمن‌ها
   درباره ما
· هدف ما چیست؟
   تهیه توزیع‌های لینوکس
· فروشگاه لینوکس شاپ
· فروشگاه Sito.ir
   امکانات
· ارسال خبر
· آمارها
· اخبار
· مقالات آموزشی
· انجمنها (سوال کنید!)
· جستجو در سایت
· جستجو در انجمن‌ها
· لیست برگزیده
· کانال IRC
   جستجو
Google
   اخبار لینوکس از Slashdot
   مرورگر مقالات سایت

   آیا میدانید؟

برای نمایش یک تقویم سه ماهه در خط فرمان از دستور cal به شکل زیر استفاده نمایید:

$ cal -3

-- نکته‌های خط فرمان
   کاربران حاضر
مدیر
هیچیک از مدیران حاضر نیست
مدیر خبر
هیچ مدیر کمکی حاضر
مدیر انجمن
هیچ مدیر کمکی حاضر
اعضا:
جدیدترین:جدید امروز:0
جدیدترین:جدید دیروز:1
جدیدترین:مجموع:7170
جدیدترین:جدیدترین:
This_is_ALireza
اعضا:حاضر
اعضا:اعضا:1
مهمان‌ها:مهمان‌ها:84
مجموع:مجموع:85
کاربران حاضر
حاضرilius
   ورود کاربران




 


 برای ورود مشکل دارید؟
 ثبت نام کاربران جدید
   سایت‌های پیشنهادی
· آموزش فارسی GTK
· آموزش پایتون
· پرسیسم CMS
· گنو/دانلود
· مستندات فارسی برای nix*
· گروه کاربران لینوکس تهران
· پارسیکس گنو/لینوکس
· طرح ملی نرم‌افزارهای متن‌باز
· نشریه الکترونیک لینوکس
· گنو ایران.ارگ
· واژه‌نامه xFarDic
   آخرین بسته‌ها
   RSSهای تکنوتاکس

اخبار و اعلامیه‌ها


آخرین پست‌های انجمن‌ها

زبان برنامه‌نویسی 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


Linux is a registered trade mark of Linus Torvalds.

تمامی مطالب و مقالات این سایت تحت مجوز GNU FDL قرار دارند. بنابراین کپی و ایجاد تغییر در آنها مطابق شرایط این مجوز آزاد می‌باشد. یک نسخه از این مجوز را اینجا می‌توانید برای خود دریافت نمایید.

Email Us : webmaster AT technotux DOT org