امروز میخوام درباره یه چیز خیلی باحال به نام Self Hosting Compilers (کامپایلر های خود میزبان :/) صحبت کنم.
در این مورد قبلا پست تو تلگرامم نوشته بودم یه چن تایی ولی دلم نیومد اینجا هم نزارمش. خودم که خیلی دوستش دارم :)
قبل از اینکه بپردازم به اینکه این نوع کامپایلر ها چی هستن یه توضیح مختصری درباره کامپایلر میدم که اصلا چی هست!(برای کسانی که نمیدونن).
**کامپایلر ها نرم افزار هایی هستند که مثل مترجم عمل میکنن و کد زبان مبدا رو به کد زبان مقصد(که عمدتا اسمبلی یا ماشین کد هستش) ترجمه میکنن! هر زبانی (زبان های کامپایلری) برای خودشون یه کامپایلر دارن چون تو وقتی با یه زبان (فرض میگیریم C) کد مینویسی اون کد رو فقط خودت میفهمی و کامپیوتر درکی ازش نداره. برای اجرا شدن کدت باید اون رو کامپایل کنی به ماشین کد!
پس کامپایلر شد یه نرم افزار که کد ما رو ترجمه میکنه!
اگه بگم ما زبان هایی داریم که کامپایلرشون با زبان خودشون نوشته چی میگی؟
ینی مثلا یه کامپایلر C رو در نظر بگیر که با خود C نوشته شده!! 😐
چطور ممکنه وقتی C هنوز کامپایلری نداره, کامپایلرش با C نوشته و کامپایل شده 😐😐😐
(به اون داستان معروف اول مرغ بوده یا تخم مرغ مراجعه کنید)
داستان از این قراره که میومدن اول یه کامپایلر خیلی پایه ای و ابتدایی(اصولا هسته کامپایلر) رو با یه زبان دیگه (مثلا اسمبلی) میساختن و کد کامپایلر اصلی رو با همون زبان(که C در نظر گرفتیم) مینوشتن و با کامپایلر اولیه که ساخته بودن کامپایل میکردن.
اینجوری کامپایلر اولیه کد کامپایلر اصلی زبان رو به زبان ماشین کامپایل میکنه و حالا شما یه کامپایلر جدید داری که با خود زبانتون نوشته شده!
کامپایلر زبان هایی مثل GO, Rust, C اینجوری هستن!
فکت: شما این متن رو دوبار میخونید!🙂