[Powered by Google Translate] راب BOWDEN: اجازه دهید بحث در مورد کامپایلرها. تا این مرحله، شما فقط تایپ کد منبع خود را به بعضی از فایل ها، آنها را از طریق این جعبه بزرگ سیاه و سفید است که فرستاده می شود صدای جرنگ جرنگ، و از فایل اجرایی خود را که می کند می آید دقیقا همان چیزی است که شما را در کد منبع خود را نوشت. به عنوان جادویی که بوده است، ما در حال رفتن به نزدیک تر نگاهی به آنچه در واقع اتفاق می افتد هنگامی که یک فایل را کامپایل کنید. پس چه معنی چیزی به کامپایل؟ خب، در کلی ترین مفهوم، آن را به حالت فقط بدان معناست تبدیل کد در یک نوشته شده است زبان های برنامه نویسی خود را به دیگری. اما معمولا هنگامی که مردم می گویند چیزی که کامپایل، آنها آنها آن را از یک برنامه نویسی سطح بالاتر زبان به یک زبان سطح پایین برنامه نویسی. این ممکن است به را مانند شرایط بسیار ذهنی به نظر می رسد. به عنوان مثال، شما احتمالا از C فکر می کنم نه به عنوان یک بالا سطح زبان برنامه نویسی است، اما شما آن را کامپایل. اما همه اینها نسبی است. همانطور که خواهیم دید، کد مونتاژ و در نهایت ماشین کد که ما کامپایل به پایین غیر قابل انکار یک سطح پایین تر است از C. اگر چه ما می شود با استفاده از صدای جرنگ جرنگ در تظاهرات امروز بسیاری از ایده های که در اینجا حمل را به کامپایلر دیگر. برای صدای جرنگ جرنگ، چهار مرحله اصلی در کلی وجود دارد تلفیقی. این یکی، پردازش انجام شده توسط پیش پردازنده، دو، تدوین انجام شده توسط کامپایلر سه، مونتاژ انجام شده توسط اسمبلر و چهار، ارتباط با لینکر انجام می شود. این ممکن است گیج کننده است که یکی از substeps کلی کامپایلر صدای جرنگ جرنگ کامپایلر نامیده می شود، اما خواهیم به آن را دریافت کنید. ما خواهید بود با استفاده از یک برنامه ساده سلام جهان را به عنوان مثال ما در سراسر این فیلم است. بیایید نگاهی به. اولین مرحله پردازش است. پیش پردازنده چه کاری انجام دهید؟ در تقریبا در هر برنامه C شما تا به حال خوانده ام و یا نوشته شده است، شما با استفاده از خط از کد را که با مخلوط شروع شده است. من آن را مخلوط است، اما شما همچنین ممکن است آن را به پوند، شماره امضاء، و یا تیز. هر خط از این یک دستور پیش پردازنده است. شما احتمالا دیده می شود # تعریف و # قبل شامل، اما وجود دارد چند که پیش پردازنده به رسمیت می شناسد. اجازه دهید اضافه کردن یک # به عنوان مثال جهان خوش آمدید ما را تعریف کنیم. در حال حاضر اجرا فقط پیش پردازنده بر روی این فایل بگذارید. با عبور clage E-پرچم، شما در حال آموزش آن را به اجرا فقط پیش پردازنده. بیایید ببینید که چه اتفاقی می افتد. به نظر می رسد که صدای شیپور فقط تف از همه چیز در خط فرمان. به منظور صرفه جویی در تمام این خروجی را در یک فایل جدید به نام hello2.c، ما می> hello2.c اضافه به فرمان ما. حال اجازه دهید نگاهی به در فایل preprocessed ما. اوه، چه رخ داده است به ما برنامه کوتاه مدت کمی است؟ اگر ما به تمام راه را به پایین از این فایل، ما را مشاهده می کنید برخی از کد است که ما در واقع نوشت. توجه کنید که تعریف # از بین رفته است و همه موارد نام دقیقا همان چیزی است که ما در مشخص جایگزین شده اند # خط را تعریف کنیم. پس چه هستند این همه تعریف نوعهای و اعلامیه های تابع در بالای فایل؟ توجه کنید که تعریف # پیش پردازنده نه تنها بخشنامه که ما مشخص شده است. ما همچنین # stdio.h می باشد. پس همه از خطوط دیوانه در واقع فقط stdio.h کپی و به بالا از این فایل جا به جا شده است. به همین دلیل فایل های هدر هستند بسیار مفید برای تابع آشکار. به جای نیاز به کپی و چسباندن همه تابع اظهارات شما را در بالا فایل های خود را با استفاده از برنامه، پیش پردازنده را کپی کنید و آنها را از هدر فایل برای شما. اکنون که ما در حال انجام پردازش، ما بر روی حرکت تلفیقی. دلیل ما تماس بگیرید این مجموعه گام به گام است به دلیل این است مرحله که در آن صدای جرنگ جرنگ در واقع تدوین آن از C به کد اسمبلی. به منظور داشتن صدای جرنگ جرنگ کامپایل یک فایل را به مونتاژ، اما ادامه نه بیشتر، از آن عبور S-پرچم در خط فرمان. بیایید نگاهی به مجمع فایل بود که خروجی. مثل یک زبان کاملا متفاوت به نظر می رسد. کد اسمبلی بسیار پردازنده خاص است. در این مورد، از آنجا که دستگاه CS50 در حال اجرا است پردازنده های مبتنی بر x86 مجازی، این کد را مونتاژ معماری x86 است. تعداد کمی از مردم ارسال به طور مستقیم در کد اسمبلی این روزها، اما هر برنامه C شما همیشه نوشتن پایین تبدیل می شود به مونتاژ. باز هم، ما به این مرحله کامپایل C به مونتاژ از آنجایی که ما در حال رفتن از یک سطح بالاتر به سطح پایین تر زبان های برنامه نویسی. چه چیزی باعث می شود که سطح مونتاژ پایین تر از C؟ خب، در مجلس، ما در حال در آنچه ما می توانیم انجام دهیم بسیار محدود است. خیر، در حالی که، برای، و یا حلقه ها از هر نوع وجود دارد. اما شما می توانید این کارها را به انجام این است که این کنترل ساختار ارائه می دهیم با استفاده از عملیات های محدود است که مجلس ارائه دهد. اما ببینید که چقدر مجلس سطح پایین واقعا، اجازه دهید به یک گام به جلو در تدوین، مونتاژ. این کار اسمبلر برای تبدیل کد اسمبلی به شی یا کد ماشین. به یاد داشته باشید که اسمبلر مونتاژ خروجی نیست؛ در عوض، آن را در مونتاژ و خروجی کد ماشین طول می کشد. کد ماشین واقعی 1 و 0 است که یک CPU می تواند درک، هر چند که ما هنوز هم کمی از کار باقی مانده است قبل از ما می توانیم برنامه را اجرا می کنیم. بیایید مونتاژ مونتاژ کد خود را با عبور صدای جرنگ جرنگ c-پرچم. حال اجازه دهید ببینیم که چه چیزی در فایل مونتاژ شده. خوب، که به ما کمک نمی کند بسیار است. به یاد داشته باشید که کد دستگاه و صفر است که کامپیوتر شما می تواند درک کند. این بدان معنی نیست که آن را برای ما آسان به درک. پس دقیقا چه سطح پایین مونتاژ است؟ این تقریبا یکسان به کد شیء. رفتن از مونتاژ به کد شیء، بسیار بیشتر از یک ترجمه از یک تحول، که به همین دلیل است ممکن است اسمبلر به نظر نمی انجام هر گردآوری واقعی است. در واقع، آن را بسیار آسان به صورت دستی از ترجمه مونتاژ به کد ماشین. در حال جستجو در مونتاژ برای یک تابع اصلی، که خط اول اتفاق می افتد مربوط به 0x55 هگزادسیمال است. در دودویی، که 1010101 است. خط دوم اتفاق می افتد، به مطابقت 0x895 هگزادسیمال است. و بعد، 0x56. با توجه به جدول نسبتا ساده است، شما می توانید ترجمه مونتاژ به کد که ماشین بیش از حد می تواند درک. بنابراین یک گام باقی مانده در آن وجود دارد تلفیقی است که ارتباط. لینک ترکیبی از یک دسته از فایل های جسم را به یک فایل بزرگ که شما در واقع می تواند اجرا کند. لینک بسیار سیستم وابسته است. بنابراین ساده ترین راه برای به دست آوردن صدای جرنگ جرنگ فقط Object لینک فایل ها با یکدیگر است، صدای جرنگ جرنگ بر روی تمام فایل هایی که به تماس شما می خواهید به پیوند با یکدیگر. اگر شما را مشخص کنید. فایل های O، پس آن را نمی خواهد نیاز به پردازش مجدد، تدوین و جمع آوری تمام از کد منبع خود را. بیایید پرتاب یک تابع ریاضی را به فایل ما، بنابراین ما باید چیزی به لینک شوید. حالا آن را کامپایل به کد شیء اجازه بدهید و تماس صدای جرنگ جرنگ بر روی آن است. متأسفم. از آنجا که ما یک تابع ریاضی، ما نیاز به پیوند را در کتابخانه ریاضی با LM. اگر ما می خواستیم به پیوند با یکدیگر دسته از فایل های O که ما نوشت: در خود ما، ما فقط می خواهم همه آنها را در تعیین خط فرمان. محدودیت این است که تنها از این فایل باید در واقع عملکرد اصلی، مشخص و یا دیگری در نتیجه اجرایی نمی دانم از کجا شروع کد خود را در حال اجرا است. چه تفاوت بین تعیین یک فایل به لینک موجود در با-L و فقط تعیین یک فایل به طور مستقیم؟ هیچ چیز. این فقط اتفاق می افتد که صدای جرنگ جرنگ فایل دقیقا همان چیزی است که می دانم چیزی شبیه به LM اتفاق می افتد به مراجعه به. اگر شما می دانستید که فایل خود را، شما می توانید آن را مشخص کنید به صراحت. درست است که همه L پرچم در پایان به یاد داشته باشید از تقاضای مشتری شما. و آن همه به آن وجود دارد. زمانی که شما فقط در بعضی از فایل ها اجرا صدای جرنگ جرنگ، این همان چیزی است که آن را در واقع انجام می دهند. نام من راب Bowden، و این CS50.