کامپایلر یکی از اساسیترین اجزای برنامهنویسی است که به شما کمک میکند کدهای نوشته شده را به زبان سختافزار خود تفسیر کنید. در واقع با افزودن یک سری علائم خاص به رشته کدهایی که توسط ...
آموزش طراحی کامپایلر
یادگیری مفاهیم درس کامپایلر
کمک به دانشجویان رشته مهندسی کامپیوتر
آموزش رایگان اصول طراحی کامپایلر
کامپایلر یکی از اساسیترین اجزای برنامهنویسی است که به شما کمک میکند کدهای نوشته شده را به زبان سختافزار خود تفسیر کنید. در واقع با افزودن یک سری علائم خاص به رشته کدهایی که توسط برنامهنویس نوشته شده است، به سختافزار تفهیم میشود که دقیقاً چه پردازشی باید انجام شود. البته که این کار شاید در نگاه اول مسئلهای روتین به نظر بیاید اما در حقیقت، مسئله عمیقتر از این حرفها است. چراکه هر چه کامپایلر بتواند سریعتر دستورات را بین cpu و برنامهنویس رد و بدل کند، طبیعتاً سرعت اجرا تا حد زیادی افزایش مییابد. ازاینرو یادگیری اصول طراحی کامپایلر میتواند به برنامهنویسان در هر حوزهای کمک کند تا سرعت کار خود را به طرز چشمگیری ارتقاء دهند.
دوره آموزش اصول طراحی کامپایلر یک دوره رایگان برای درس طراحی کامپایلر بوده که از کلاسهای دانشگاه صنعتی شریف در مکتب خونه قرار داده شده است. از طرفی اصول طراحی کامپایلر یکی از دروس اختیاری دوره کارشناسی مهندسی کامپیوتر بهحساب میآید که بسیاری با درک آن مشکل دارند. این دوره آموزشی در مکتبخونه با عنوان اصول طراحی کامپایلر برای همه کسانی که به آن نیاز یا علاقه دارند، هماکنون در دسترس قرار دارد.
هدف کلی از یادگیری اصول طراحی، ایجاد یک فضای کاربردی برای برقراری ارتباط بین زبانهای سطح بالا که توسط برنامهنویس نوشته میشود، و زبان سطح پایین که زبان ماشین است، بهحساب میآید. در واقع شما به دنبال یک مترجم هستید که خواستههای شما را به زبان ماشین درک و به آن منتقل کرده سپس و در مقابل پاسخ ماشین را درک و به شما منتقل کند.
این دوره آموزشی از طراحی اصول کامپایلر در واقع توسط «جناب آقای محمدهادی فروغمند» استادیار دانشکده علوم ریاضی دانشگاه صنعتی شریف ضبط شده است که در کلاسهای درسی خود تدریس میکردند؛ بنابراین اگر دانشجوی مهندسی کامپیوتر هستید و قصد دارید این درس را با موفقیت بیشتری پشت سر بگذارید و یا نیاز دارید یک کامپایلر طراحی کنید، این دوره آموزش اصول طراحی کامپایلر برای شما مناسب خواهد بود. البته علاقهمندان به یادگیری زبانهای سطح پایین بهصورت کاربردی نیز میتوانند از این دوره بهرهمند شوند.
بعد از فراگیری این دوره آموزشی 20 ساعته از طراحی اصول کامپایلر شما درک کاملی از پردازشهای cpu در زمان کامپایل یا به عبارتی تفسیر کدها خواهید داشت. در نتیجه میتوانید کدهای خود را بهینه کرده تا سرعت کامپایل را افزایش دهید. البته بهینهسازی کامپایلر نیز از دیگر مهارتهای کسب شده در پایان این دوره آموزش آموزش اصول طراحی کامپایلر است، یعنی شما میتوانید بهینهسازی دوجانبه انجام داده و سرعت اجرای برنامههای خود را دوبرابر بیشتر کنید.
تمامی دانشجویان رشته کامپیوتر، علاقمندان به زبان برنامه نویسی مانند جاوا اسکریپت و غیره میتوانند در این آموزش اصول طراحی کامپایلر شرکت کنند یا با مشاهده آموزش تصویری و فیلمهای آموزشی دانش خود را ارتقاء دهند. تمامی شرکت کنندگان در دورهها بعد از اتمام دورههای آموزشی قادر به درک کامل از پردازشهایcpu در زمان کامپایل و یا تفسیر کدها و زبان خاص ساخته شده خواهند بود. در نتیجه، شرکت کنندگان مهارت بهینه کردن کدها با هدف افزایش سرعت کامپایل را کسب خواهند کرد.
در این بخش قصد داریم تا فهرستی از سرفصلهای مشترک دورههای آموزشی ارائه دهیم. سرفصلها و رئوس مطالب به شرح زیر است:
1. مقدمه و معرفی کامپایلر
2. تحلیلگر لغوی
3. گرامرها
4. تجزیه بالا به پایین
5. تجزیه کننده پایین به بالا
توجه داشته باشید که جهت یادگیری کامپایلر نیاز به آگاهی از علوم مختلف از جمله علوم زیر دارید:
1. الگوریتمها
2. مهندسی نرم افزارها
3. آشنایی با زبان های برنامه نویسی مثل اسمبلی
4. نظریه زبانها
5. معماری ماشینها و کامپیوترها
6. کار با ویژوال بیسیک
پیشنیاز این دوره آموزش اصول طراحی کامپایلر، دانش کافی از آنالیز الگوریتمها است. ازاینرو پیشنهاد میکنیم قبل از مشاهده و یادگیری و برای درک بهتر مباحث ویدئو آموزشی کامپایلر ابتدا درس "آموزش طراحی الگوریتم" را در مکتبخونه مشاهده فرمایید، زیرا آنالیز و آموزشها بر روی الگوریتمهای زبانهای برنامهنویسی انجام میگیرد و در صورت تمرین و تسلط به این بخش بهراحتی میتوانید از درس کامپایلر بهره ببرید. البته درصورتیکه با طراحی الگوریتم و کار با آنها آشنایی و تسلط کافی دارید، گذراندن این دوره ضروری نیست.
تاریخچه ساخت کامپایلر یا همان مفسر کدهای کامپیوتری برای cpu به اوایل دهه 1950 میلادی برمیگردد. دقیقاً زمانی که ماشینهای برنامهنویسی جای خود را در جهان پیدا کرده بودند. اما اینکه درس کامپایلر در امروزه چیست مسئلهای متفاوت است. امروزه تعریف کامپایلر به کدهای اسمبلی (یا کدهای سطح پایین دیگر که برای ماشین قابلدرک باشد) اشاره دارد. از این رو درس کامپایلر و ساخت کامپایلر به دستوراتی اشاره دارد که زبانهای سطح بالا مثل سی یا پایتون را برای ماشین به زبانی قابلفهم و سطح پایین تبدیل یا تفسیر کند. پس نیاز است که کامپایلر به هر دو زبان تسلط کافی داشته باشد.
کامپایلر که معادل انگلیسی آن Compiler است، مجموعهای از برنامههای کامپیوتری بهحساب میآید که زبان مبدأ یا همان برنامهنویسی سطح بالا را به زبان مقصد و یا زبان سطح پایین تبدیل میکند و خروجی آن برای پردازش توسط دیگر برنامهها مانند پیونددهنده مناسب خواهد بود و انسانها میتوانند بهراحتی آن را بخوانند. به بیانی دیگر و بهطورکلی کامپایلر یک نرمافزار از پیش تعریف شده است که برای تبدیل کد از زبان برنامهنویسی سطح بالا (مانند جاوا) به زبان سطح پایین مورداستفاده قرار میگیرد. زبانهای سطح پایین (زبان ماشین) بهراحتی قابلفهم برای انسان نیستند. به همین دلیل برنامهنویسان زبانهای سطح بالا (مانند Python، C#، Java و Pascal) را توسط کامپایلر، آنالیز و به زبانهای سطح پایین (کد باینری) تبدیل و ترجمه میکنند.
در حقیقت عملکرد کامپایلرها همانند دوبله یک فیلم خارجی است. برای مثال، شما ابتدا کل فیلم را به زبان فارسی ترجمه کرده و سپس در اختیار سایر بینندگان قرار میدهید. برنامه کامپایلر نیز ابتدا زبان برنامهنویسی سطح بالا را به زبان ماشین تبدیل کرده و بر روی کامپیوتر اجرا میکند. کامپایلر از 6 سطح مختلف تشکیلشده است که چهار سطح اول آن یا فرانتاند (frontend) وظیفه بررسی هرگونه خطا در کدها مانند خطای نحوی، دستور زبان یا لغوی را بر عهدهدارند و دو قسمت دیگر که به آن بکاند (backend) میگویند برای پردازش شدن کد به زبان ساده و تولید آن طراحی شدهاند. کامپایلرها از همان ابتدا و بعد از Run شدن برنامه، کدهای خروجی را آنالیز و بررسی میکند. سپس کدها توسط CPU به اجرا در خواهد آمد. در دوره آموزش اصول طراحی کامپایلر قرار است ما با نحوه کار این ابزار مهم در برنامهنویسی آشنا شویم
زمانی که تمام کدها جلوتر از زمان به زبان ماشین تبدیل میشود به آن Ahead Of Time (به معنی جلوتر از زمان) و یا بصورت مخفف کامپایل کردن AOT میگویند. در حقیقت، برنامه قبل از آنکه اجرا شود، کامپایل میشود و کدها در اختیار پلتفرم قرار میگیرد. زبانهای برنامه نویسی زیر نیاز به طراحی اصول کامپایلر دارند:
توجه داشته باشید که قبل از زبان جاوا اسکریپت و سی شارپ، تمام برنامههای کامپیوتری یا با کمک Interpreter تفسیر و یا کامپیل میشدند.
امیدواریم این دوره آموزش اصول طراحی کامپایلر کمک شایانی به شما در راه یادگیری زبان cpu و درک پردازشهای آن به هنگام برنامهنویسی داشته باشد.
اطلاعات بیشتر
از مجموع 10 امتیاز
3 نظرمحمد هادی فروغمند، استادیار دانشکده علوم ریاضی دانشگاه شریف میباشد. زمینههای تحقیقاتی ایشان نظریه گراف و تجزیه و تحلیل شبکههای پیچیده، مدلهای محاسباتی جدید و پیچیده، بیوانفورماتیک، تجزیه و تحلیل توالی ترکیبی و جستجو الگوریتم، الگوریتمها و (ترکیبی) بهینه سازی و فلسفه علوم کامپیوتر است.
ایشان در سال 2001 عضو تیم المپیاد کامپیوتر ایران بودند و در این سال توانستند مدال طلا این مسابقات را کسب کنند و همچنین در سالهای 2005 و 2007 جز سرپرستان تیم بودند که در هر کدام از سالها مجموعا 4 مدال توسط تیم المپیاد کامپیوتر بدست آمده است.
اطلاعات بیشتر