کامپایلر زبان C چیست و چرا به آن نیاز داریم؟
توضیحات کوتاهی درباره کامپایلر زبان C
آیا اطلاعاتی درباره کامپایلر زبان C دارید و میدانید دقیقا کاربرد کامپایلرها چیست و چرا اصلا ما به آنان در زبان برنامهنویسی نیاز داریم؟! برای پاسخ به این سوالات با ما تا آخر مقاله کامپایلر زبان C همراه باشید.
کامپایلر چیست؟
حال اجازه دهید قبل از اینکه وارد مبحث کامپایلرهای زبان برنامه نویسی C شویم ابتدا کمی درباره کامپایلرها سخن بگوییم.
به طور کلی اگر بخواهیم کامپایلر را توضیح دهیم باید بگوییم که کامپایلر یک برنامه خاص است که عبارات نوشته شده در یک زبان برنامه نویسی خاص را پردازش کرده و آنها را به زبان ماشین یا “کد” تبدیل میکند که پردازنده رایانه میتواند از آن استفاده میکند.
به طور معمول، برنامهنویس با استفاده از ویرایشگر، جملات زبان را به زبانی مانند پاسکال یا C به صورت خطی مینویسد. فایلی که از این خطها ایجاد میشود شامل مواردی است که گفتههای منبع را بازگو میکند. سپس برنامهنویس کامپایلر زبان مناسب را انتخاب و اجرا میکند، با این کار نام فایلی را که حاوی عبارات منبع است مشخص میشود.
هنگام اجرای (در حال اجرا)، کامپایلر ابتدا تمام عبارات زبان را به صورت نحوی یکی پس از دیگری تجزیه و تحلیل میکند و سپس، در یک یا چند مرحله متوالی یا “عبور”، کد خروجی را میسازد، و مطمئن میشود که عباراتی که به سایر عبارات در کد نهایی هستند به درستی ارجاع شدهاند.
ماژول شی
خروجی که از این مجموعه خارج میشود را کد شی یا بعضی اوقات ماژول شی (object-oriented) مینامند. (توجه داشته باشید که اصطلاح “شی” در اینجا مربوط به برنامهنویسی شیگرا نیست.) کد شی کد ماشین است که پردازنده توانایی این را دارد که همزمان چند دستورالعمل را با یکدیگر اجرا کند.
زبان برنامهنویسی جاوا، زبانی که در برنامهنویسی شی گرا بسیار مورد استفاده قرار میگیرد، امکان کامپایل خروجی (که بایت کد نامیده میشود) را معرفی میکند که میتواند روی هر پلتفرم سیستم رایانهای اجرا شود که یک ماشین مجازی جاوا یا مفسر بایت کد برای آن در نظر گرفته است تا بایت کد را به دستورالعمل تبدیل کند.
تفاوت کامپایلر کننده و اسمبلر کننده
فرق کامپایلر کننده و اسمبلر کننده این است که کامپایلر با زبانهایی که گاهی ۳GL و زبانهای سطح بالاتر نامیده میشوند کار میکند. اما یک اسمبلر روی برنامههایی که با استفاده از زبان اسمبل پردازنده نوشته شدهاند کار میکند.
کامپایلر زبان C
اگر بخواهیم با یک مثال ساده کامپایلر را تعریف کنیم به این صورت است که مثلا شما به یک کشور خارج از کشور میروید که زبان مردم آن کشور را شما متوجه نمیشود آیا به مترجم نیاز خواهید داشت؟! البته که مترجم میتواند کار شما را راحت تر کند و زبان شما را برای افراد دیگری که زبان متفاوتی دارند، ترجمه کند تا آنان راحت تر بتوانند با شما ارتباط برقرار کند.
به همین ترتیب، کامپایلرها نیز مانند مترجمان ما برای رایانهها عمل میکنند ما کد دلخواه خود را به رایانه منتقل میکنیم و کامپایلرها با دستورالعملهای خودشان (کدهای مورد نظر) را برای رایانه ترجمه میکنند. کامپایلرهای زیادی در زبان برنامه نویسی C وجود دارند مانند: BDS, Clang, GCC, Interactive C, Lattice, Portable C Compiler, Visual Express و … .
آشنایی با بهترین کامپایلر زبان C
در این بخش شما را با بهترین کامپایلرهای زبان برنامه نویسی C آشنا میکنیم که عبارتند از:
کامپایلر Borland Turbo C
Turbo C یکی از کامپایلرهای اساسی و محبوب زبان برنامه نویسی C است. این کامپایلر اولین بار در سال ۱۹۸۷ معرفی شد. به دلیل اندازه کوچک، سرعت تدوین و قیمت پایین محبوب بود. بعد از اینکه ++Turbo C در سال ۱۹۹۰ منتشر شد دیگر تمام کامپایلرها با یکدیگر ادغام شدند و کامپایلر Turbo C متوقف شد. اما در سال ۲۰۰۶ شرکت Embarcadero Technologies ،Turbo C را مجدداً به عنوان نرم افزار رایگان عرضه کرد.
کامپایلر Tiny C
کامپایلر Tiny C برای کار بر روی کامپیوترهای کند با فضای کم دیسک طراحی شده است. این کامپایلر یک کامپایلر پردازنده ARM است. کامپایلر Tiny C از سال ۲۰۰۵ شروع به پشتیبانی از ویندوز کرد که برخی ویژگیهای این کامپایلر عبارتند از:
- اندازه و حجم پروندههای این کامپایلر بسیار کم است و طبق گفته صاحب این کامپایلر (Fabrice Bellard). این کامپایلر حدود نه برابر سریعتر از GCC است. تدوین، مونتاژ و پیوند دادن کد ویژگیهای اصلی برای اندازهگیری سرعت کامپایلر در نظر گرفته شده بود.
- ویژگیهای خاصی که این کامپایلر دارد مانند تقویت حافظه اختیاری، جستجوگر قوی و پایداری کد باعث چند برابر شدن محبوبیت آن گردیده است.
- این کامپایلر امکان اجرای خودکار برنامهها را در طول زمان کامپایل فقط با استفاده از آرگومانهای (arguments) خط فرمان را فراهم میکند. به این ترتیب، برنامهها تحت UNIX و با استفاده از اسکریپتهای پوسته اجرا میشوند که البته آخرین نسخه در دسامبر ۲۰۱۷ منتشر شد.
کامپایلر Portable C
کامپایلر قابل حمل C (PCC) تقریبا یک کامپایلر اولیه بهحساب میآید که تاسیس آن حدودا به زمان تاسیس زبان برنامه نویسی C در سال ۱۹۷۰ باز میگردد. میتوان گفت عمر کامپایلر Portable C به شکل قابل توجهی طولانی بوده است به طوری که اکثریت نرم افزارها با استفاده از این کامپایلر ایجاد شدهاند.
مزایای PCC به قابلیتها و پیشبینیهای احتمالی آن بستگی دارد. کامپایلر PCC به گونهای ساخته شد که فایلهای منبع، نه همه بلکه فقط تعداد کمی از آنها را به کدهای ماشینی وابسته کند. این ویژگی باعث میشود که خطاهای نحوی به راحتی تشخیص داده شوند و بررسی اعتبار داده کاملا صورت گردد. نسخه جدید PCC در ۱۰ دسامبر ۲۰۱۴ منتشر شد.
کامپایلر GCC
مجموعه کامپایلر GNU کامپایلر تولید شده توسط پروژه GNU است. این کامپایلر از بسیاری از زبانهای برنامهنویسی پشتیبانی میکند و یک بنیاد نرم افزار رایگان تحت مجوز عمومی و جهانی است. این کامپایلر برای اولین بار در سال ۱۹۸۷ منتشر شد و در ابتدا فقط از زبان برنامه نویسی C پشتیبانی میکرد. اما با گذشت زمان و به آرامی توانست از زبانهای برنامهنویسی C++ ،Java ،Android و IOS نیز پشتیبانی کند.
همانطور که میدانید اکثریت کامپایلرها ویژگیهای مختلفی دارند و تمامی آنان نیز از ساختار داخلی مشترکی بهره میبرند. هنگامی که یک زبان سطح بالا نوشته میشود، کامپایلر کد موجود در آن زبان را تجزیه میکند و یک درخت نحوی انتزاعی ایجاد میشود. GCC از تجزیه کنندههای LALR استفاده میکند، اما به آرامی در سال ۲۰۰۶ به تجزیه کنندههای نزول بازگشتی تبدیل شود.
تعدادی از بهینهسازیهای انجام شده توسط GCC عبارتند از:
- میتواند قطعات Dead Code را از بین ببرد.
- میتواند افزونگی را در سطح کد از بین ببرد.
- جایگزینی مصالح با توجه به سطح اسکالر.
- میتواند بهینهسازی را با آرایه ها انجام دهد
نسخه فعلی GCC 9.2 است که در ۱۲ آگوست ۲۰۱۹ منتشر شد.
کامپایلر Clang
کامپایلر Clang علاوه بر اینکه از زبان برنامهنویسی C به خوبی پشتیبانی میکند بلکه میتواند از زبانهای برنامهنویسی دیگر مانند زبانهای برنامه نویسی C++ ،Objective-C و ++Object-C نیز پشتیبانی کند. این کامپایلر از LLVM برای گردآوریهای مربوط به کد انتهایی استفاده میکند در بعضی مواقع این کامپایلر میتواند جایگزین مناسبی برای کامپایلر GCC باشد.
Clang همکاران زیادی از جمله اپل، مایکروسافت، گوگل، سونی و اینتل دارد. Clang یک نرم افزار منبع باز است. یکی از اهداف اصلی Clang ارائه معماری مبتنی بر کتابخانه است. این کامپایلر طراحی شده است تا اطلاعات بیشتری را در طول مراحل تدوین نسبت به GCC نگه دارد. این امر همچنین به حفظ شکل کلی کد اصلی کمک میکند.
هدف Clang همیشه کاهش استفاده بیش از حد از فضای حافظه و افزایش سرعت تدوین در مقایسه با GCC بوده است و با توجه به این ویژگیها و در یک بازه زمانی مشخص، این کامپایلر توانسته جای خود را در دل کاربران باز کند.
کلام آخر
به آخر این نوشتار رسیدهایم و این بود از بهترین کامپایلرهای زبان برنامهنویسی C (کامپایلر زبان C). حال فهمیدیم که چرا به آنان نیاز داریم (مثال مترجم) و چرا اینقدر در زبانهای برنامهنویسی کامپایلرها نقش اساسی دارند.