اطلاعیه

Collapse
No announcement yet.

کامپایلر چیست؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کامپایلر چیست؟

    همگردان یا کامپایلر برنامه یا مجموعهآ‌ای از برنامهآ‌های کامپیوتری است که متنی از زبان برنامه نویسی سطح بالا (زبان مبدا) را به زبانی سطح پایین (زبان مقصد)، مثل اسمبلی یا زبان سطح ماشین، تبدیل میآ‌کند. خروجی این برنامه ممکن است برای پردازش شدن توسط برنامه دیگری مثل پیوند دهنده مناسب باشد یا فایل متنی باشد که انسان نیز بتواند آنرا بخواند.

    مهمآ‌ترین علت استفاده از ترجمه کد مبدا، ایجاد برنامه اجرایی می باشد. برعکس برنامهآ‌ای که زبان سطح پایین را به بالاتر تبدیل می کند را decompiler گوییم.

    کامپیوترهای اولیه از کامپایلر استفاده نمی کردند، چرا که این کامپیوتر ها حافظه کوچکی و برنامهآ‌های کوتاهی داشتند. کاربران مجبور بودند کد باینری یا دسیمال برنامهآ‌ها را به طور مستقیم و با کمک نوار های مغناطیسی به سیستم وارد کنند. اما برنامه نویس ها زیاد این وضعیت را تحمل نکردند و به فکر تولید برنامهآ‌ای افتادند که نویسه های الفبایی (واژه های اختصاری) را به تعدادی دستور که قابل اجرا توسط ماشین باشد تبدیل کند. در این وضعیت بود که زبان های اسمبلی و کامپایلر های اولیه با نام اسمبلر به وجود آمد.

    در اواخر دهه ۱۹۵۰ میلادی ماشین های دارای زبانهای برنامه نویسی رواج یافتند و کامپایلرهای آزمایشی ایجاد شدند. زبان فرترن به سرپرستی جان باکوس در شرکت آیآ‌بیآ‌ام به عنوان اولین کامپایلر کامل در سال ۱۹۵۷ تولید شد. کوبول اولین زبان کامپایلی با معماری چندگانه در سال ۱۹۶۰ تولید شد. در طی دهه ۶۰ کامپایلر های زیادی تولید شد اما بر روی کیفیت کامپایلر ها کمتر فکر می شد. همآ‌زمان با تکامل زبان های برنامه سازی و افزایش قدرت کامپیوتر ها، کامپایلرها هرچه بیشتر پیچیده می شدند.

    یک کامپایلر خود برنامه ای است که توسط زبان پیاده ساز تولید شده است. اولین کامپایلر خود محور که می توانست کد خود را کامپایل کند برای زبان Lisp و توسط Hart و Levin در سال 1962 و در دانشگاه MIT ایجاد شد. در دهه 70 از زبانهای سطح بالایی مثل پاسکال و سی جهت نوشتن کامپایلر ها استفاده شد. ساخت کامپایلر های خود محور دارای مشکل راه اندازی است، چونکه هر کامپایلری باید توسط کامپایلر نوشته شده ای به زبان دیگر کامپایل شود یا برای این مشکل دست به دامن مفسری بشود.

    ساختار کامپایلر ها و کامپایلر بهینه ساز امروزه بخشی از برنامه درسی دانشجویان کامپیوتر است. برخی کامپایلر ها به منظور آموزشی برای زبان های برنامه نویسی تولید می گردد. مثلاً کامپایلر PL/0 توسط Niklaus Wirth برای آموزش در دهه 1970 به کار رفت. به علت سادگی و دلایل زیر هنوز برای آموزش مورد استفاده قرار می گیرد:

    * توسعه گام به گام برنامه
    * به کار گیری پارسر های بازگشتی
    * استفاده از EBNF جهت تعریف نحو زبان
    * استفاده از P-Code در جریان تولید کد خروجی قابل حمل
    * نمایش T-diagram جهت تعارف رسمی

    در تاریخچه کامپایلر سه دوره میآ‌توان در نظر گرفت:

    از 1945تا1960:تولید کد


    در این دوره ,زبانها به تدریج به وجود آمدند و ماشینها چندان متعارف نبودند . مسئله این بود که چگونه باید کدی را برای یک ماشین تولید کرد . با توجه به اینکه برنامه نویسی به زبان اسمبلی رواج داشت , این مسئله وخیمتر شد. استفاده از کامپایلر , برنامه نویسی خودکار نامیده شد . طرفداران زبانهای سطح بالا میآ‌ترسیدند که کد تولید شده نسبت به زبان اسمبلی کارایی چندان نداشته باشد. اولین کامپایلر فرترن(شریدان 1959) به خوبی بهینه سازی شد


    از 1960تا1975 :تجزیه کردن


    در دههآ‌های 1960و1970 زبانهای برنامهآ‌سازی جدید به وجود آمدند و طراحان زبان معتقد بودند که طراحی سریع کامپایلر برای زبان جدید , مهمآ‌تر از وجود کامپایلری با کد کارآمد است .بدین ترتیب , در ساخت کامپایلر به پردازشگر جلویی تاکید شده است . در همین زمان , مطالعه زبانهای رسمی , تکنیکهای قدرتمندی را برای ساخت پردازشگر جلوی , بخصوص تولید تجزیه کننده به وجود آورد


    از 1975 تاکنون :تولید کد و بهینه سازی کد


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

    راه های مختلفی جهت دسته بندی کامپایلر ها وجود دارد مثلاً می توان آنها را با توجه به ورودی، خروجی، ساختار داخلی و یا رفتار زمان اجرای آن تقسیم بندی کرد.
    کامپایلرهای Native و cross

    اکثر کامپایلرها به دو دسته Native و Cross تقسیم می شوند. کامپایلرهایی که به منظور اجرای برنامه ها کدهای باینری را تولید می کنند، کامپایلر هایی با کد محلی یا Native گوییم چرا که تنها در کامپیوترهای یک نوع با سیستم عامل های یکسان قابل به کارگیری است. از طرف دیگر ممکن است کامپایلرها کدهای باینری را تولید کنند که در سیستم های مختلف قابل اجرا باشد. به این دسته از کامپایلر ها که وابستگی به سخت افزار ندارند، کامپایلر های عبوری یا Cross گوییم. برای این نوع کاپایلر ها تنها کافی است برای بار اول سخت افزار را به آن معرفی نمود. بنابراین می توان نتیجه گرفت که کامپایلرهای عبوری مفیدتر هستند. این تقسیم بندی برای مفسرها به کار نمی رود جونکه آنها از نمایش دودویی برای اجرای کد خود استفاده نمی کنند. ماشین های مجازی در هیچ یک از این دسته بندی ها نمی گنجد. هر گاه در ماشین های مجازی یکسان قابل اجرا باشد می توان آنرا Native و هرگاه کامپایلر قادر به تولید خروجی برای پلت فورم های مختلف باشد آنرا Cross گوییم.
    wikipedia
لطفا صبر کنید...
X