کد:
557935
پرسش
با سلام
فکر کنم بازم سوالاتم تو در تو باشه
...کامپایلر چیست ؟
...چگونه می توان فایلهای با فرمت SIS را در گوشیهای سونی اریکسون اجرا کرد ؟
پاسخ
با سلام
دوست عزیز، در مورد کامپایلر باید عرض کنم که كامپایلر برنامه یا مجموعهای از برنامههای كامپیوتری است كه متنی از زبان برنامه نویسی سطح بالا (زبان مبدا) را به زبانی سطح پایین (زبان مقصد)، مثل اسمبلی یا زبان سطح ماشین، تبدیل میكند. خروجی این برنامه ممكن است برای پردازش شدن توسط برنامه دیگری مثل پیوند دهنده مناسب باشد یا فایل متنی باشد كه انسان نیز بتواند آنرا بخواند.
مهمترین علت استفاده از ترجمه كد مبدا، ایجاد برنامه اجرایی می باشد.
برعكس به برنامهای كه زبان سطح پایین را به بالاتر تبدیل می كند 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 گوییم.
كامپایلرهای تك فاز و چند فاز
فاز بندی كامپایلر ها كه در پشت زمینه به محدودیت های منابع سخت افزاری وابسته است. در نتیجه كامپایلر ها به مجموعه برنامه های كوچكتر تقسیم می شوند هر یك بخشی از عمل ترجمه یا آنالیز را برعهده می گیرند. كامپایل تك فازی به نظر مفید می آید، چرا كه سریعتر است. زبان پاسكال از این امكان استفاده می كند. اما مشكل اینجا است كه اگر اعلان جلوتر از دستور به كارگیری باشد، چه كار باید كرد؟ برای حل این مشكل می توان در فاز اول اعلان ها را مشخص كرد و در فاز بعد عمل ترجمه را انجام داد. عیب دیگر كامپایلر تك فازی دشواری بهینه سازی كدهای زبان سطح بالا می باشد. همگردان یکگذره (One-Pass Compiler) کامپایلری است که برای تولید کد ماشین، تنها یک مرتبه متن برنامه را میخواند. دستور برخی زبانها به گونهای است که تولید همگردان یکگذره برای آنها غیر ممکن است. مجموعه همگردان های گنو یا Gnu complier colection یا به صورت مخفف GCC مجموعه ای از همگردان های آزاد برای زبان های برنامه نویسی است. تقسم بندی كامپایلر ها به برنامه های كوچكتر تكنیكی است كه همچنان مورد بحث محققان است. در این نوع دسته بندی كامپایلر ها، انواع دیگری نیز وجود دارد:
* كامپایلر مبدا به مبدا كه كدی با زبان سطح بالا را دریافت می كند و خروجی آن نیز زبان سطح بالا می باشد. مثلاً موازی سازی خودكار كامپایلر در مواردی كه به طور تكراری در برنامه ورودی وجود دارد و سپس تغییر شكل دادن كد و نوشتن كد یا ساختار زبانی موازی(برابر)با آن.(همچون دستور DOALL در فورترن) .
* كامپایلر Stage كه به زبان اسمبلی برای ماشین نظری ترجمه می كند. مثلاً در Prolog
o ماشین پرولوگ معمولاً ماشین انتزائی (WAM) خوانده می شود. بایت كدهای جاوا و Python زیر مجموعه ای از این دسته اند.
* كامپایلر زمان اجرا، برای سیستم های Smalltalk ، Java و زبان های میانه(CIL) در محصولات NET. استفاده می شود.
زبانهای تفسیری و كامپایلی
بسیاری از افراد زبانهای سطح بالا را به دو دسته تفسیری و كامپایلی تقسیم می كنند. كامپایلر ها و مفسر ها روی زبان ها عمل می كنند نه زبانها روی آنها! مثلاً این تصور وجود دارد كه الزاما BASIC تفسیر می شود و C كامپایل. اما ممكن است نمونه هایی از BASIC یا C ارائه شود كه به ترتیب كامپایلری و تفسیری باشد. البته استثناهایی نیز وجود دارد، مثلاً برخی زبانها در خصوصیات خود این تقسیم بندی را مشخص كرده اند(C كامپایلری است یا SNOBOL4 و اكثر زبانهای اسكریپتی كه كد منبع زمان اجرا دارند تفسیری می باشد).
طراحی كامپایلر ها
تقسیم بندی پروسه های كامپایل به مجموعه ای از فاز ها مورد حمایت پروژه كامپایلری (( تولید كامپایلرهای باكیفیت)) (PQCC) از دانشگاه Carnegie Mellon قرار گرفت. در این پروژه اصطلاحات جلو بندی، میان بندی (امروزه به ندرت به كار می رود) و عقب بندی معرفی شد. اكثر كامپایلرهای امروزی بیش از دو فاز دارند. جلوبندی معمولاً با پردازش املایی و معنایی شرح داده می شود. عقب بندی شامل تبدیل نوع و بهینه سازی های مختلف می باشد. سپس كد برای آن كامپیوتر خاص تولید می شود. استفاده از جلوبندی و عقب بندی این را ممكن می كند كه جلوبندی های مختلفی برای زبانهای مختلف وجود داشته باشد و عقب بندی های مختلفی نیز برای CPU های مختلف.
-----------------------------------------------------------------------------------------------
برای اجرای فایل های SIS در گوشی های سونی اریکسون باید گوشی ای داشته باشید که سیستم عامل سیمبین داشته باشد، در غیر اینصورت قادر به اجرای فایل های SIS نخواهید بود.
موفق باشید
مشاور :
فرشید فلاحی
| پرسش :
چهارشنبه 17/7/1387
| پاسخ :
شنبه 20/7/1387
|
|
فوق ديپلم
|
20
سال
|
رايانه
| تعداد مشاهده:
239 بار