http://www.gnuiran.ir
Welcome to TECHNOTUX      
   ورود/ایجاد حساب کاربری یكشنبه، ۰۳ آذر ۱۳۸۷   
   منوی اصلی
· خانه
   تازه واردان و تازه‌کارها
· تازه واردان و تازه‌کارها بخوانند
· قوانین انجمن‌ها
   درباره ما
· هدف ما چیست؟
   تهیه توزیع‌های لینوکس
· فروشگاه لینوکس شاپ
· فروشگاه Sito.ir
   امکانات
· ارسال خبر
· آمارها
· اخبار
· مقالات آموزشی
· انجمنها (سوال کنید!)
· جستجو در سایت
· جستجو در انجمن‌ها
· لیست برگزیده
· کانال IRC
   جستجو
Google
   اخبار لینوکس از Slashdot
   مرورگر مقالات سایت

   آیا میدانید؟

در صورتی که مایل هستید یک فایل را با استفاده از الگوریتم GPG رمز کرده و کلمه عبور بر روی آن قرار دهید، می‌توانید از دستور gpg به همراه گزینه c- استفاده نمایید. مانند:

$ gpg -c mydoc

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




 


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

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


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

زبان برنامه‌نویسی D بخش سوم

(879 مجموع کلمات موجود در متن)
(5588 بار مطالعه شده است)  نسخه چاپی

کنترل منابع

جمع آوری زباله (Grabage Collection)

تخصیص حافظه در D کاملاً با جمع‌آوری زباله همراه است. تجربه شهودی بیان می‌کند که تعداد زیادی از خصوصیات ++C برای کنترل رهاسازی حافظه لازم است .با وجود جمع‌آوری زباله، زبان بسیار ساده‌تر می‌شود.

گروهی می‌گویند جمع‌آوری زباله برای جوجه برنامه‌نویس ها و تنبل‌ها است. زمانی این حرف در مورد ++C گفته می‌شد. اما شاید هیچ چیز در ++C نیست که با C یا اسمبلر قابل انجام نباشد .

جمع‌آوری زباله ، کد خسته کننده پیگیری تخصیص حافظه‌های مستعد خطا که در C و ++C لازم است را حذف می‌کند. این نه تنها بدین معناست که گسترش برنامه‌ها سریعتر انجام می‌گیرد و هزینه‌های نگهداری کاهش می یابد ، بلکه برنامه به میزان زیادی در دفعات اجرا سریع تر است.


کنترل حافظه ساده و واضح

با وجود اینکه D یک زبان دارای جمع‌آوری زباله است ، اعمال new و delete می‌توانند طوری تعریف شوند که به عنوان یک تخصیص دهنده حافظه ی سفارشی به کار ‌روند.

RAII

RAII یک تکنیک پیشرفته گسترش نرم‌افزار برای کنترل تخصیص منابع و آزادسازی آنها است ، D از RAII در یک روش کنترل شده قابل پیش‌بینی که مستقل از چرخه جمع‌آوری زباله است پشتیبانی می‌کند.

کارایی

توده سبک وزن

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

Inline Assembler

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

همچنین بسیاری از پیاده سازی های D توابع اصلی را (شبیه به پشتیبانی ذاتی C از پردازش درگاههای ورودی خروجی ، دسترسی مستقیم به عملیاتهای ممیز شناور و …) پشتیبانی می کند .

قابلیت اعتماد

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



معاهدات ( Contracts )

طراحی به وسیله کنتراکت (اختراع B.Meyer ) یک تکنیک انقلابی برای کمک به مطمئن شدن از صحت برنامه است و نسخه DBC زبان D شامل پیش شرطهای توابع ، پس شرطهای توابع ، یکسانی های کلاس و کنتراکتهای ثابت کننده است .


آزمایش واحد

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

آزمایش واحد در دیگر زبان ها قابل انجام است. اما تا خود زبان شامل این مفهوم نباشد، نتیجه جالب از آب در نمی آید . آزمایش واحد یک خصوصیت اصلی و بارز در D است . برای توابع کتابخانه ای به خوبی عمل می کند، هم ضمانت می کند که تابع حقیقتاً کار می کند و هم با مثال بیان می کند که تابع چگونه کار می کند . خیل کثیرمنابع کدهای کاربردی و کتابخانه های ++C موجود در اینترنت برای دانلود را در نظر بگیرید . چه تعداد از آنها با تستهای کلی همراه است ( تست واحد را هم در نظر نگیرید ) ؟ کمتر از یک درصد . روش معمول این است که اگر کامپایل شده است اجرا هم می شود و شگفت زده خواهیم شد اگر هشدارهای کامپایلر اشکالات واقعی باشند .

در کنار طراحی با کنتراکت ، آزمایش واحد ، D را به مراتب به بهترین زبان برای نوشتن قابل اعتماد و کاربردهای سیستمی قدرتمند تبدیل می کند.


مشخصه اشکال زدایی در دستورات زبان

اکنون اشکال زدایی بخشی از املای زبان است ( debug ) . که در زمان کامپایل قابل فعال یا غیر فعال شدن است بدون کاربرد دستورات پیش پردازنده یا ماکروها . املای debug یک ابزار تشخیص سازگار، استوار و قابل حمل و قابل فهم را فعال می کند که بفهمد آیا نیاز است که کد منبع قادر بر ایجاد هر دو کامپایل اشکال زدایی و کامپایل نهایی باشد ؟

پردازش استثناء

مدل برتر try–catch-finally به جای مدل فقط try–catch به کار رفته است .دیگر هیچ نیازی نیست که اشیای زائد ایجاد کنیم فقط برای اینکه معناهای نهایی را توسط مخرب ( destructor ) پیاده سازی کنیم .

هماهنگی و هم روندی(Synchronization)

برنامه سازی چند رشته ای (Multi Thread Programming) متداول تر می شود و D مبناهایی برای ساخت برنامه های چند رشته ای فراهم می کند . هم روند سازی می تواند هم در سطح متد و هم در سطح شیئ انجام شود .

synchronize int func ( ) {.}

توابع هم روند (سنکرون) در هر زمان فقط به یک رشته (Thread) اجازه می دهند که آن تابع را اجرا کند . عبارت synchronize در اطراف قطعه ای از عبارات انحصار متقابل(mutex)ایجاد می کند و دسترسی به وسیله شیئ یا به صورت عمومی را کنترل می کند .


پشتیبانی تکنیک های قدرتمند

    ۱. آرایه های دینامیک به جای اشاره گر ها

    ۲. متغیرهای ارجاعی به جای اشاره گر ها

    ۳. اشیای ارجاعی به جای اشاره گرها

    ۴.جمع آوری زباله به جای کنترل دستی حافظه

    ۵. مبانی پیش ساخته موجود برای هم روندی رشته ها

    ۶. عدم وجود ماکرویی که به طور غیر عمدی به کد آسیب بزند .

    ۷. توابع inline به جای ماکروها

    ۸. کاهش وسیع نیاز به اشاره گرها

    ۹. سایز انواع مرکب واضح و مشخص است

    ۱۰. عدم شک در مورد علامت دار بودن کاراکتر ها

    ۱۱. عدم نیاز به دو بار اعلان در کد منبع و فایلهای header

    ۱۲. پشتیبانی واضح از تجزیه و تحلیل برای افزودن کد اشکال زدایی


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



Linux is a registered trade mark of Linus Torvalds.

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

Email Us : webmaster AT technotux DOT org