زبان برنامهنویسی D بخش سوم(879 مجموع کلمات موجود در متن) (5587 بار مطالعه شده است)  کنترل
منابع
جمع
آوری زباله (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) |