تبلیغات
تبلیغات متنی
محبوبترینها
قیمت انواع دستگاه تصفیه آب خانگی در ایران
نمایش جنگ دینامیت شو در تهران [از بیوگرافی میلاد صالح پور تا خرید بلیط]
9 روش جرم گیری ماشین لباسشویی سامسونگ برای از بین بردن بوی بد
ساندویچ پانل: بهترین گزینه برای ساخت و ساز سریع
خرید بیمه، استعلام و مقایسه انواع بیمه درمان ✅?
پروازهای مشهد به دبی چه زمانی ارزان میشوند؟
تجربه غذاهای فرانسوی در قلب پاریس بهترین رستورانها و کافهها
دلایل زنگ زدن فلزات و روش های جلوگیری از آن
خرید بلیط چارتر هواپیمایی ماهان _ ماهان گشت
سیگنال در ترید چیست؟ بررسی انواع سیگنال در ترید
بهترین هدیه تولد برای متولدین زمستان: هدیههای کاربردی برای روزهای سرد
صفحه اول
آرشیو مطالب
ورود/عضویت
هواشناسی
قیمت طلا سکه و ارز
قیمت خودرو
مطالب در سایت شما
تبادل لینک
ارتباط با ما
مطالب سایت سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون
مطالب سایت سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون
آمار وبسایت
تعداد کل بازدیدها :
1833926908
زبان برنامه نويسي D
واضح آرشیو وب فارسی:سایت ریسک: View Full Version : زبان برنامه نويسي D saghy31-10-2004, 03:30 AMبا تشكر از آقاي حمید نصیبی و دوستان تكنوتكس آشنایی با زبان برنامه سازی D تحت لینوکس (بخش اول) D چیست؟ D یک زبان برنامهسازی سیستمی و کاربردی همه منظوره است. D یک زبان سطح بالاتر از ++C است اما توانایی نوشتن کدهای قدرتمند و تعامل مستقیم با APIهای سیستم عامل و سختافزار را حفظ میکند. D به خوبی برای نوشتن برنامههای متداول و برنامههای بزرگ چند میلیون خطی با تیمهای برنامه نویسی مناسب است. D به آسانی قابل آموختن است ، توانائیهای زیادی را برای کمک به برنامهنویس فراهم میکند و به خوبی برای فناوری پرتکاپوی بهینهسازی کامپایلر مناسب است. D یک زبان متنی (اسکریپتی) یا دارای مضر نیست و دارای ماشین مجازی ، مذهب خاص یا فلسفه برتریجویی نمیباشد. یک زبان عملی است برای برنامهنویسان حرفهای که نیاز به انجام سریع و قابل اعتماد پروژه دارند و به کد قابل فهم آسان نیاز دارند و مسئول عملکرد صحیح برنامه هستند. D اوج چند دهه تجربه به کارگیری کامپایلرهایی از زبانهای گوناگون و تلاش برای بنانهادن پروژه های بزرگ توسط آن زبانها است. D از زبانهای دیگر مخصوصاً ++C الهام میگیرد و آن را با تجــــربه و کاربرد به معنای واقعی درهم میآمیزد. چرا D ؟ واقعاً چرا؟ کی زبان برنامهنویسی دیگری نیاز دارد؟ صنعت نرمافزار راه درازی از زمان اختراع زبان C تاکنون پیچیده است. به وسیله ++C تعداد زیادی مفاهیم جدید به زبان C افزوده شد. اما سازگاری گذشته با C در آن ادامه یافت ، شامل سازگاری با تقریباً تمام ضعفهای طراحی اصلی زبان C. تلاشهای زیادی برای برطرف ساختن آن ضعفها تاکنون صورت گرفته است اما در پی سازگاری با گذشته خنثی شده است. در ضمن هر دوی C و ++C دستخوش یک رشد پیوسته خصوصیات جدید شدهاند. این خصوصیات جدید باید به دقت به ساختار موجود خورانده شود بدون نیاز به بازنویسی کد قدیمی نتیجه نهایی بسیار پیچیده است ؛ C استاندارد تقریباً ۵۰۰ صفحه است و ++C استاندارد حدود ۷۵۰ صفحه! حقیقت شلوغی کامپایلر ++C این است که کامپایلرهای انــــدکی به طور مؤثر استاندارد را دست نخورده به کار میگیرند. برنامه نویسان ++C گرایش مییابند که در جزایر خاصی از زبان برنامه بسازند و در نظر میگیرند کاربرد بسیار خوب بعضی خصوصیات را در حالی که از دیگر مجموعهها اجتناب میکنند . با وجود اینکه کد از یک کامپایلر به کامپایلر دیگر قابل حمل است میتـــواند مشکل باشد که از برنامه نویسی به برنامه نویسی دیگر منتقل شود. توانایی بزرگ ++C این است که میتواند تعداد زیادی سبکهای اصلی برنامهنویسی را پشتیبانی کنند . اما در کاربرد طولانی مدت سبکهای دارای اشتراک و متناقض یک مانع هستند و سبب تأخیر. ناامید کننده است که زبانی چنین قدرتمند ، اعمال پایهای مانند تغییر اندازه آرایهها و الحاق رشتهها را انجام نمیدهد. بله ++C توانایی برنامه نویسی قدرتمند برای پیاده سازی آرایه های قابل تغییر اندازه و رشته ها را فراهم میکنند (مانند نوع بردار در STL ) . به هرحال چنین خصوصیات بنیادی ، بایستی جزء قسمتهای زبان باشد. آیا قدرت و قابلیتهای ++C ، قابل گسترش ، طراحی مجدد و پیادهسازی به یک زبان ساده وارتگنال و کاربردی میباشد؟ آیا تمامی آنها میتواند داخل بستهای قرار گیرد که برای کامپایلرنویسان به آسانی قابل پیادهسازی صحیح باشد و کامپایلرها را قادر کند که به نحوی کارا ، کدهای بهینه شده و پرتکاپو ایجاد کند؟ فناوری پیشرفته کامپایلر به نقطهای رسیده است که خصوصیاتی از زبان که به منظور جبران کردن فناوری ابتدایی کامپایلر وجود دارند ، میتوانند حذف شوند. (مثالی ازاین نمونه میتواند واژه کلیدی “Register” در C باشد ، مثالی ظریفتر ماکروی پیشپردازنده در C است) . ما میتوانیم به قناوری پیشرفتهی بهینه سازی کامپایلر اعتماد کنیم تا دیگر به خصوصیاتی از زبان که برای دست یافتن به کیفیت کد قابلقبول (جدای از کامپایلرهای ابتدائی) لازم است نیاز نداشته باشیم. D درنظر دارد که هزینههای گسترش نرمافزار را حداقل %10 کاهش دهد توسط افزودن خصوصیات بهینهسازی بالابرنده میزان سودمندی و تولید و همچنین با تعدیل کردن خصوصیات زبان ، به طوری که اشکالات وقتگیر متداول از ابتدا حذف میشوند. خصوصیات حفظ شده از C++/C منظره کلی D شبیه C و ++C است . این موضوع آموختن D و انتقال کد به آن را آسانتر میکند. گذر از C++/C به سوی D باید طبیعی حس شود و برنامه نویس مجبور نخواهد بود که یک راه کاملاً جدید انجام کارها را فراگیرد. استفاده از D به این معنا نیست که برنامه نویس به یک ماشین مجازی خاص زبان اجرا محدود شود مانند ماشین مجازی جاوا یا Smalltalk . هیچ ماشین مجازی D وجود ندارد یک کامپایلر سرراست است که Objectfile های قابل پیوند (Link) تولید میکند. D به سیستم عامل متصل میشود دقیقاً مانند C. ابزارهای آشنای متداول مانند “MAKE” مستقیماً در برنامهنویسی D گنجانده شده است. منظره عمومی و احساس موجود در C++/C ابقا خواهد شد . همان املای جبری به کار خواهد رفت و اغلب عبارات و فرمهای دستورات و طرحبندی عمومی. برنامههای D میتواند هم به کسب C ـ توابع و دادهها ـ و هم در کسب ++C نه شیءگرا ـ یاترکیبی از هردو قابل نوشتن است. D برای چه کسانی مناسب است؟ برنامه نویسانی که به طور مداوم از ابزارهای تجزیه و تحلیل کد استفاده میکنند تا خطاها را حتی قبل از کامپایل شدن ازبین ببرند. افرادی که عمل کامپایل را با بالاترین سطح هشدارها انجام میدهند یا از کامپایلر میخواهند که هشدارها را به منزله خطا تلقی کند. مدیران برنامهنویسی که مجبورند به راهنماییهای سبک برنامهنویسی برای اجتناب از اشکالات معمول C اعتماد کنند. افرادی که براین باورند که وعدههای سبک شیءگرای ++C به خاطر پیچیدهگیهایش برآورده نمیشود. برنامهنویسانی که از قدرت بیانگر ++C لذت میبرند اما به خاطر نیاز به صرف تلاش زیاد برای اداره حافظه و یافتن اشکالات اشارهگرها ، ناامید شدهاند. پروژههایی که نیاز به تست همراه و تصدیق و تأیید دارند. برنامهنویسانی که فکر می کنند زبان باید دارای خصوصیات کافی باشد . برای رفع نیاز دائمی اداره دستی و مستقیم اشارهگرها. برنامهنویسان محاسبات عددی . D دارای خصوصیات زیادی برای پشتیبانی مستقیم اعمال مورد نیاز برنامه نویسان محاسبات میباشد ، مانند پشتیبانی مستقیم از نوع داده مرکب و اعمال تعریف شده برای بینهایت و NAN’S (این خصوصیات در استاندارد C99 اضافه شد ولی در ++C نه) بخش تجزیه لغوی و تجزیه نحوی D از یکدیگر در نهایت مجزا هستند و همچنین از تجزیهگر معنایی. این بدین معناست که نوشتن ابزارهای ساده برای اداره کردن کد منبع D بر سطح عالی آسان است بدون اینکه مجبور به ساختن یک کامپایلر کامل باشیم . همچنین بدین معناست که کد منبع ، قابل انتقال به فرم tokenها است برای کاربردهای خاص. saghy31-10-2004, 03:32 AMزبان برنامه سازی D تحت لینوکس (بخش دوم) D برای چه کسانی مناسب است؟ برنامه نویسانی که به طور مداوم از ابزارهای تجزیه و تحلیل کد استفاده میکنند تا خطاها را حتی قبل از کامپایل شدن ازبین ببرند. افرادی که عمل کامپایل را با بالاترین سطح هشدارها انجام میدهند یا از کامپایلر میخواهند که هشدارها را به منزله خطا تلقی کند. مدیران برنامهنویسی که مجبورند به راهنماییهای سبک برنامهنویسی برای اجتناب از اشکالات معمول C اعتماد کنند. افرادی که براین باورند که وعدههای سبک شیءگرای C++ به خاطر پیچیدهگیهایش برآورده نمیشود. برنامهنویسانی که از قدرت بیانگر C++ لذت میبرند اما به خاطر نیاز به صرف تلاش زیاد برای اداره حافظه و یافتن اشکالات اشارهگرها ، ناامید شدهاند. پروژههایی که نیاز به تست همراه و تصدیق و تأیید دارند. برنامهنویسانی که فکر می کنند زبان باید دارای خصوصیات کافی باشد . برای رفع نیاز دائمی اداره دستی و مستقیم اشارهگرها. برنامهنویسان محاسبات عددی . D دارای خصوصیات زیادی برای پشتیبانی مستقیم اعمال مورد نیاز برنامه نویسان محاسبات میباشد ، مانند پشتیبانی مستقیم از نوع داده مرکب و اعمال تعریف شده برای بینهایت و NAN’S (این خصوصیات در استاندارد C99 اضافه شد ولی در C++ نه) بخش تجزیه لغوی و تجزیه نحوی D از یکدیگر در نهایت مجزا هستند و همچنین از تجزیهگر معنایی. این بدین معناست که نوشتن ابزارهای ساده برای اداره کردن کد منبع D بر سطح عالی آسان است بدون اینکه مجبور به ساختن یک کامپایلر کامل باشیم . همچنین بدین معناست که کد منبع ، قابل انتقال به فرم tokenها است برای کاربردهای خاص. D برای چه کسانی مناسب نیست؟ به طور واقع بینانه ، هیچکس قصد تبدیل میلیونها خط که از C++/C به D ندارد و از آنجا که D کد منبع اصلاح نشده C++/C را کامپایل نمیکند D برای apps اشاره مناسب نیست. (به هرحال D ، CAPF های ارث را به خوبی پشتیبانی میکند). برنامه های خیلی کوچک ـ یک زبان اسکریپتی یا دارای مفسر مانند Perl , Dmdscript , Python احتمالاً مناسبتر است. به عنوان زبان برنامهنویسی برای شروع ـ برای مبتدیها basivc یا java مناسبتر است D یک زبان دوم عالی است برای برنامه نویسان متوسط تا پیشرفته . زبان به کاربرد کلمات صحیح وسواس دارد. D یک زبان عملی است و هر خصیصه از آن ترجیحاً قابل مقایسه و ارزیابی در همان حداست تا در حد ایدهآل . به طور مثال D ساختارها و مفاهیمی دارد که به طور مجازی نیاز به اشارهگرها را برای امور پیشپا افتاده ازبین میبرد. به طور مشابه تغییر نوعها هنوز وجود دارد برای آن جایی که سیستم نوع نیاز به نادیده گرفتن دارد. خصوصیات اصلی D این قسمت برخی خصوصیات جالبتر C را در دستههای مختلف طبقهبندی میکند. برنامهنویسی شیءگرا کلاسها : طبیعت شیءگرای D از کلاسها آغاز میشود. مدل وراثت ، وراثت یگانه است که با روابط تقویت میشود. شیء کلاس در ریشهی شجره وراثت می نشیند. بنابراین تمام کلاسها یک مجموعه متداول تابعی را اجرا میکنند. کلاسها به وسیله ارجاع معرفی میشوند و چنان که پیچیدهای برای آنکه پساز استثناها پاک شود نیاز نیست. تعریف مجدد عملگرها: میتوان کلاس را برآن واداشت که با استفاده از عملگرهای موجود ، سیستم نوع را برای پشتیبانی نوعهای جدید گسترش دهند. مثلاً ایجاد کلاس اعداد بزرگ و سپس تعریف مجدد عملگرهای (/,*,_,+) برای توانایی استفاده از آنها در املای عبارات جبری معمولی. خاصیت فراوری Productivity پیمانهها : فایلهای منبع دارای ارتباطی یکبهیک با پیمانهها هستند. به جای #include نمودن یک فایل از اعلان ها فقط پیمانه را import مینماییم. هیچ نگرانی در مورد importهای متعدد از همان پیمانه نیست همچنین نیازی به پوشاندن فایلهای header با #ifndef یا #endif یا #pragma once و از این قبیل نیست. اعلان در برابر تعریف ++C معمولاً نیاز دارد که توابع و کلاسها دوبار اعلان شوند یک اعلان که در فایلهای header صورت میگیرد و تعریف که در فایل منبع با پسوند “C.” . این یک روند مستعد خطا و کسل کننده است . به طور واضح برنامهنویس فقط نیاز دارد که یک بار آن را بنویسید و سپس کامپایلر باید دادههای اعلان را بسط دهد و برای وارد کردن نمادین در دسترس قرار دهد. دقیقاً آن گونه که D میکند: مثال: دیگر نیاز به تعریف جدای توابع عضو، اعضای استاتیک ، externها یا املاهایی مانند زیر نیست: تذکر : البته در ++C توابع جزیی مانند {return 7;} به صورت inline هم نوشته میشوند اما توابع پیچیده نه. علاوه برآن اگر یک ارجاع بعدی موجود باشد تابع نیاز به الگو دارد که از قبل موجود باشد مثال زیر در C++ کار نمی کند. اما کد همارز در D کار می کند: اینکه یک تابع D به صورت inline است یا نه توسط تنظیمات بهینهساز قابل کنترل است . قالبها قالبهای D روشی واضح برای پشتیبانی برنامهسازی عمومی همراه با قدرت اختصاصیسازی به صورت قسمت به قسمت ، پیشنهاد میکند. آرایههای شرکتپذیر آرایههای شرکتپذیر آرایههایی هستند با یک نوع داده قراردادی (اختیاری) به عنوان ایندکس به جای آنکه به یک ایندکس از نوع اعداد صحیح محدود باشند. در اصل آرایههای شرکتپذیر جدولهای hash هستند. این آرایهها ساختن سریع ، کارا و خالی از اشکال جدولهای سمبل را آسان مینماید. تعریف نوعهای واقعی تعریف نوعهای C و C++ در حقیقت نام مستعار نوع هستند طوریکه هیچ نوع جدیدی به طور واقعی مطرح نمیشود. D ، تعریف نوعهای واقعی پیادهسازی میکند جایی که: type def int handle; به طور واقعی یک نوع جدید به نام handle ایجاد میکند . بر کنترل نوع تأکید شده است و تعریف نوعها در تعریف مجدد توابع شریک میشوند. برای مثال : int foo (int I ); int foo (handle h); نوع bit نوع داده پایه بیت است و D یک نوع داده با نام bit دارد . این امر بیش از همه در ساخت آرایههایی از بیتها مفید است: bit [ ] foo; توابع D توقع پشتیبانی از توابع معمول از جمله توابع عمومی ، توابع مجدد تعریف شده ، توابع inline ، توابع عضو ، توابع مجازی ، اشارهگرها به توابع و … را داشته است علاوه برآن : توابع تودرتو توابع میتوانند درون توابع دیگر قرار گیرند. این امر در ساخت کد ، خاصیت locality و تکنیکهای بستهبندی توابع بسیار مفید است. لفظهای توابع Fune tionliterals توابع بینام میتوانند به طور مستقیم در یک عبارت جای داده شوند. وکالت دینامیک توابع محصور شده و توابع عضو کلاس بوسیله وکالتها میتوانند ارجاع داده شوند (delegates) که این باعث آسانتر شدن برنامهسازی عمومی و type safe میشود. پارامترهای ورودی، خروجی ، ورودی خروجی این خصوصیسازی نه تنها کمک میکند که توابع خود مستندتر شوند بلکه بسیاری از موارد لزوم اشارهگرها را حذف میکند بدون قربانی کردن هیچ چیز و این امکاناتی را برای کمک بیشتر کامپایلر دریافتن مسائل کد فراهم میکند. بدیت ترتیب برای D ممکن میشود که مستقیماً با یک بازه وسیعتری از APIهای بیگانه ارتباط برقرار کند. و هیچ نیازی برای کارهای جانبی مانند زبانهای تعریف ارتباطات وجود ندارد. آرایهها آرایههای C اشتباهات متعددی دارند که میتوانند تصحیح شوند: اطلاعات بعد با آرایه همراه نیست و بنابراین باید ذخیرهشده و جداگانه ارسال شود . مثال کلاسیک این مورد پارامترهای argc و argr هستند که به main فرستاده میشوند. Main (int argc , char*argr[ ]) آرایهها اشیاء سطح اول نیستند. وقتی یک آرایه به عنوان پارامتر به یک تابع فرستاده میشود به یک اشارهگر برگردانده میشود حتی با اینکه الگوی تابع به طور گیج کنندهای می گوید که این آرایه است. وقتی این برگرداندن انجام میشود تمام اطلاعات نوع آرایه گم میشود. آرایههای C قابل تغییر اندازه نیستند . این بدان معنی است که حتی چیزهای ساده انبوه و متراکم میگردد مانند یک پشته که نیازدارد به عنوان یک کلاس پیچیده ساخته شود. مرز یک آرایه C قابل کنترل نیست چون اصلاً مرز آرایه مشخص نیست. آرایهها با علامت [ ] پس از شناساننده اعلان میشوند . این به یک املای بیخود و گیج کننده در اعلان اشیایی مانند اشارهگر به یک آرایه میانجامد : int (*array ) [3]; در D علامت [ ] در سمت چپ قرار میگیرد که فهم آن بسیار سادهتر است. اعلان یک اشارهگر به یک آرایه سهتایی از اعداد صحیح int [3] * array ; اعلان یک تابع که آرایهای از longها را برمیگرداند. Long [ ] func (int x); آرایههای D در چهار نوع میآیند : اشارهگرها بر آرایههای استاتیک ، آرایههای دینامیک و آرایههای شرکتپذیر ،قسمت آرایهها را ببنید ! رشتهها پردازش رشتهها آن قدر متداول است و آن قدر در C و ++C زمخت و بدترکیب که در زبان نیازمند پشتیبانی مستقیم است. زبانهای مدرن ، الحاق رشتهها ، کپی کردن و … را در دست میگیرند و D نیز رشتهها رهاورد مستقیم در دست گیری بهینه شده آرایهها هستند saghy31-10-2004, 03:33 AMکنترل منابع (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 ( ) {.} توابع همزمان شده ( سنکرون شده ) در هر زمان فقط به یک رشته اجازه می دهند که آن تابع را اجرا کند . عبارت synchronixze در اطراف قطعه ای از عبارات احاطه می کند و دسترسی به وسیله شیئی یا به صورت عمومی را کنترل می کند . پشتیبانی تکنیکهای قدرتمند آرایه های دینامیک به جای اشاره گر ها متغییرهای ارجاعی به جای اشاره گر ها اشیای ارجاعی به جای اشاره گرها جمع آوری زباله به جای کنترل واضح و دستی حافظه مبانی موجود برای همزمانی رشته ها عدم وجود ماکرویی که به طور غیر عمدی به کد آسیب بزند . توابع inline به جای ماکروها کاهش وسیع نیاز به اشاره گرها سایز انواع مرکب واضح و مشخص است عدم شک در مورد علامت دار بودن کاراکتر ها عدم نیاز به دوبار اعلان در کد منبع و فایلهای header پشتیبانی واضح از تجزیه و تحلیل برای افزودن کد اشکال زدایی hyriand01-11-2004, 01:55 AMممنون ساقي جان . واقعا مطالب تازه و مفيدي بود . يعني حداقل براي من. مرسي saghy01-11-2004, 03:15 AMآشنایی با زبان D (بخش چهارم) کنترل های زمان کامپایل کنترل نوع قوی تر • انتساب مقادیر به صورت واضح مورد نیاز است • مجاز نبودن متغییرهای محلی به کار نرفته • عدم ؛ خالی در سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 979]
-
گوناگون
پربازدیدترینها