کنترل منابع (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 ) پیاده سازی کنیم .
هماهنگی و هم زمانی
برنامه سازی چند رشته ای متداولتر می شود و D مبناهایی برای ساخت برنامه های چند رشته ای فراهم می کند . هم زمان سازی می تواند هم در سطح متد و هم در سطح شیئی انجام شود .
synchronize int func ( ) {.}
توابع همزمان شده ( سنکرون شده ) در هر زمان فقط به یک رشته اجازه می دهند که آن تابع را اجرا کند . عبارت synchronix\ze در اطراف قطعه ای از عبارات احاطه می کند و دسترسی به وسیله شیئی یا به صورت عمومی را کنترل می کند .
پشتیبانی تکنیکهای قدرتمند
آرایه های دینامیک به جای اشاره گر ها
متغییرهای ارجاعی به جای اشاره گر ها
اشیای ارجاعی به جای اشاره گرها
جمع آوری زباله به جای کنترل واضح و دستی حافظه
مبانی موجود برای همزمانی رشته ها
عدم وجود ماکرویی که به طور غیر عمدی به کد آسیب بزند .
توابع inline به جای ماکروها
کاهش وسیع نیاز به اشاره گرها
سایز انواع مرکب واضح و مشخص است
عدم شک در مورد علامت دار بودن کاراکتر ها
عدم نیاز به دوبار اعلان در کد منبع و فایلهای header
پشتیبانی واضح از تجزیه و تحلیل برای افزودن کد اشکال زدایی
حمید نصیبی (hamidnsaba@yahoo.com)