با تشكر از آقاي حمید نصیبی و دوستان تكنوتكس
آشنایی با زبان برنامه سازی 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ها است برای کاربردهای خاص.