کلام اول:

لطفا حق نشر مطلب را رعایت کنید.

این آموزش بر اساس دانش و تجربه شخصی خودم (شخص حقیر GreatMAK) هست و از جایی رونوشت برداری نشده.

اگر احساس کردید که جایی از آموزش غلط داره خواهشمندم که گزارش بدید.

باتشکر.


 

مقدمه:

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

حال سوالی که پیش می اید آن است که ایا توسعه دهندگان این گونه نرم افزار ها از ابتدا اقدام به نوشتن یک زبان برنامه نویسی بر پایه زبان ماشین می کنند؟.

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

ولی آنان که در محیط کاربری نرم افزار خود به برنامه نویسی نیاز پیدا می کنند چه؟

در چنین مواقعی دو  راه عمده وجود دارد:

اول آنکه در یک زبان برنامه نویسی آماده توابع خود را بنویسیم و در نهایت به صورت کتابخانه هایی در آوریم تا کاربر با استفاده از این کتابخانه ها و توابع بتواند با نرم افزار توسعه یافته شده ارتباط برقرار کند. به عنوان مثلا در انجین بازی سازی unity3d از زبان های #C و JavaScript برای نوشتن توابع و کلاس ها استفاده شده است.  در این آموزش به این روش پرداخته نمی شود.

ولی راه دوم آن است که ما می خواهیم در این سری آموزش بیان کنیم. در این روش برنامه نویسان با استفاده از یک زبان برنامه نویسی ترجیها قدرتمند اقدام به ساخت زبانی متکی ولی با ظاهری متفاوت می کنند.

به عنوان مثال در زبان C با استفاده از کتابخانه stdio.h و تابع printf می توانیم کارکتر ها را در محیط کنسول چاپ کنیم. در زبان pythone با استفاده از تابع print, در php با استفاده از echo و در ++C با استفاده از کلاس cout از کتابخانه iostream. حال اگر بخواهیم در زبان خود تابع پیشفرض چاپ کارکتر ها را تعریف کنیم باید آن را به صورت یک دستورالعمل و با الگویی خاص تنظیم کنیم.

مثلا:

showMe "Hello World";

showMe 0123 + 1;

در مثال بالا با استفاده از دستور showMe به رایانه می فهمانیم که قصد چاپ چیزی را در کنسول داریم. برای این کار نیاز به یک واسطه میان زبان خود و زبان اصلی برنامه نویسی داریم که بتواند کد ما را به آن ترجمه کند. دقیقا همانطور که کامپایلر های سایر زبان های برنامه نویسی کد نوشته شده را به زبان ماشین ترجمه می کنند. از سوی دیگر بر اساس الگویی که تعریف شده است کامپایلری که نوشته ایم توقع آن را دارد که پس از دستور showMe یک متغیر یا یک رشته یا هرچیز دیگری که قابل چاپ باشد را دریافت کند در غیر اینصورت با کمک خطایاب یا Debuger ای که طراحی کرده ایم باید به کاربر پیغام خطا بدهد و او را از ادامه کار باز دارد. کامپایلری که می نویسیم باید بتواند نوع متغیر دریافتی را با استفاده از معیار هایی خاص تشخیص داده و چاپ کند. به عنوان مثال علامت " " در اکثر زبان های برنامه نویسی آغاز و پایان یک رشته را مشخص می کند. پس از دریافت رشته, با استفاده از علامت ; به کامپایلر می فهامانیم که کد ما در این مقطع به اتمام رسیده است و پس از نمایش Hello World باید به سراغ دستور بعدی یعنی نمایش عدد 124 برود و در این میان با تشخیص آنکه دریافتی نه یک رشته ثابت است و نه یک متغیر باید آن را با شیوه ای خاص به صورت یک ثابت عددی در آورده و با حذف صفر از اول آن 123 را با مقدار 1 جمع ببندد.

 

مثال بالا معادل کد زیر در زبان ++C است:

std::cout << "Hello World!";

std::cout << 0123 + 1;

 

پس به طور ساده و کلی نمودار زیر مطرح است:


منبع: cppdev.blog.ir

این مطلب توسط GreatMAK  نوشته شده است و منبع آن وبلاگ cppdev.blog.ir می باشد.

شاید ادامه دارد ...