کامپایلر چیست و چگونه کار می کند؟
آنچه خواهید دید :
Toggleکامپایلر (Compiler) چیست؟
زبان های برنامه نویسی، زبان هایی هستند که ما متوجه آن ها می شویم و اگر بخواهم ساده تر بگویم به زبان انسان نزدیکتر هستند مثل پایتون (Python)، به این نوع زبان ها، زبان های سطح بالا گفته میشود اما شما برای اجرای کد های خود باید آنها را برای ماشین تعریف کنید که بتواند آن ها را بخواند و اجرا کند. مشکلی که هست ماشین فقط زبان باینری (0 و 1) را متوجه می شود، اما کدهای ما به زبان های سطح بالا هستند و کاری که ما باید انجام دهیم تبدیل آنها به 0 و 1 است تا ماشین ان ها را متوجه شود.
به این تبدیل کامپایل کردن گفته و به ابزار هایی که این تبدیل را برای ما انجام میدهد کامپایلر گفته می شود.
کامپایل کردن (Compilation) چیست؟
به همان عملیات تبدیل کامپایل کردن (Compilation) گفته می شود. پس به ابزاری که تبدیل را انجام میدهد کامپایلر و به آن فرایند تبدیل کامپایل کردن گفته می شود.
انواع کامپایلر ها
- (Ahead Of Time) AOT: در اینجا جلوتر از زمان، به منظور زمانی است که داریم نرم افزار را اجرا میکنیم. قبل از اجرای نرم افزار کل کد ها را ترجمه میکند و بعد در اختیار سی پی یو قرار میدهد. به دلیل اینکه جلو تر از زمان اجرا، ترجمه صورت گرفته بهش میگن جلو تر از زمان.
زبان هایی مثل C++, C, Pascal از این نوع استفاده می کنند. - (Just In Time) JIT : دقیقا زمانی که نرم افزار در حال اجرا شدن است در همان لحظه کامپایل هم میشود، کامپایلر های JIT ترکیبی از aot و مفسر (interpreter) هستند. ترکیب این 2 با هم کامپایلر های JIT را به وجود آورده یعنی کل کد ها را میگیرد و به یک زبان میانه تبدیل میکند و بعد این کد ها را تیکه تیکه میاد اجرا میکند.
زبان هایی مثل #JAVA, c از این نوع استفاده می کنند.
اگر بخواهم یک توضح کوتاه درباره مفسر ها بگم، مفسر ها میان خط به خط کد ها را می خوانند و اجرا میکنند. در واقع اینطوری نیستند که کل کد را بگیرد و بعد اجرا کند.
-
زبان های میانه
زبان میانه زبان ماشین نیست به همین دلیل برای تبدیل کد ها به زبان سطح پایین نیازمند استفاده از ابزاری مثل JVM (Java Virtual Machine) است.
JVM یک برنامه است که کامپیوتر را مستقل از سیستم عاملی که روی آن نصب است، قادر میسازد تا برنامههای جاوا و همچنین برنامههای نوشته شده به زبانهای دیگر را که در بایتکد جاوا نیز کامپایل شدهاند، اجرا کند.
تفاوت های کامپایلر و مفسر
-
تفاوت مفسر و کامپایلر در پیاده سازی برنامه چیست؟
پیادهسازی برنامه در زبانهای کامپایلری، به صورت جدا از کامپایل آن انجام میشود. همچنین، پیادهسازی فقط پس از کامپایل شدن کل برنامه باید انجام شود. در برنامههای مفسری، پیادهسازی برنامه بخشی از تفسیر برنامه به حساب میآید، بنابراین به صورت خط به خط انجام میشود.
-
تفاوت کامپایلر و مفسر در نیاز به حافظه
برنامههای کامپایلری به طور مستقیم و یکجا پیادهسازی میشوند و در رویکرد آنها نیازی به ذخیره برنامه نوشته شده کامپایلر در حافظه سیستم وجود ندارد. اما، در برنامهای که با مفسر ترجمه میشود، هنگام تفسیر آن به صورت خط به خط، از حافظه سیستم استفاده خواهد شد
-
تفاوت مفسر و کامپایلر در میزان محبوبیتشان برای برنامه نویسی
کدهای فایل کامپایلر فقط در ماشین هدف خاص خود استفاده میشوند و قابل انتقال نیستند. زبانهای برنامه نویسی C و ++C محبوبترین و پرکاربردترین زبانهایی هستند که از کامپایلر استفاده میکنند. اما، مفسر برای محیطهای تحت وب و جایی مناسب است که زمان بارگذاری در آنها اهمیت دارد. به طور کلی میتوان گفت که کامپایلرها زمان نسبتاً بیشتری برای کامپایل کردن کدهای کوچک صرف میکنند که ممکن است چندین بار اجرا شوند. به همین دلیل برای پیادهسازی کدهای کوچک و کوتاه استفاده از برنامههای مفسری بهتر است.
مراحل کامپایلر
-
Scanning – اسکن کردن
در این مرحله خط به خط تمامی کارکتر های ما را اسکن می کند، که مشکل نداشته باشند، کارکتر غیر مجازی وجود نداشته باشد و نکته حایز اهمیت هم این است که یادش می ماند که این کارکتر در کجا و در کدام خط بوده.
-
Lexial – تحلیل واژهای
در این مرحله کارکتر ها را به هم میچسباند که به اصطلاح به آنها توکن گفته میشود و سپس آن ها را بررسی می کند که توکن غیر مجازی وجود نداشته باشد. { در مرحله اول حرف حرف جدا می کرد اما در این مرحله حرف ها را بر می دارد و کلمه های آن ها را بررسی میکند }
-
Syntactic – تحلیل نحوی
در این مرحله میاد سینتکس را بررسی میکند، بیشتر به ساختار آن توجه میکند، یعنی بررسی میکند که آیا کدی که شما نوشتید از لحاظ سینتکسی درست است یا خیر، دقت داشته باشید که هنوز معنی براش مهم نیست، اگر بخواهم که ساده بیانش کنم مهم این است که فعل و فاعل درست قرار گرفته باشد.
-
Semantic – تحلیل معناشناسی
در این مرحله میاد و به معنی آن توجه میکند، آیا معنی سینتکس درست است و یا خیر؟ مثلا به جمله “ساعت پنج شنبه است” دقت داشته باشید که جمله از لحاظ ساختاری درست است اما معنی نمیدهد، پس در نتیجه کامپایل صورت نمیگیرد و اروری زیبا مشاهده میکنید.
مزایای کامپایلر
- به مستقل شدن کد از پلتفرم کمک میکند.
- کد را از یک زبان به زبان دیگر ترجمه میکند.
- بهبود کیفیت کد.
- دسترسی آسان: با استفاده از کامپایلر انلاین، نیازی به نصب نرمافزارهای کامپایلر و یا IDE نیست و شما میتوانید به راحتی از هر دستگاهی با اینترنت به آن دسترسی داشته باشید.
- صرفهجویی در زمان: با استفاده از کامپایلر آنلاین، نیازی به نصب و تنظیم کامپایلر نیست.
- تست سریع: با استفاده از کامپایلر آنلاین، میتوانید کد خود را به صورت سریع تست کنید.
زبان های کامپایلری
- C
- C++
- Java
- C#
- Swift
- Fortran
- Ada
- Rust
- Go
- Pascal
زبان های مفسری
- Python
- Ruby
- JavaScript
- PHP
- Perl
- Lua
- Shell Scripting languages (مثل Bash)
- MATLAB
- R
توجه داشته باشید که برخی از زبانها ممکن است همزمان امکانات کامپایل و مفسر را داشته باشند (مانند Python که میتواند به صورت تفسیری یا با استفاده از ماژولهای کامپایلی مانند Cython کار کند).
حرف اخر
در این مقاله سعی بر این شد که با کامپایلر ها و مراحل اجرایی آن ها نیز اشنا شویم و در ادامه، تفاوت آن ها را با مفسر را بررسی کردیم، از کاربرد های هر کدام صحبت شد و درباره زبان هایی که از این ها استفاده می کنند صحبت کردیم. امیدواریم که این مقاله برای شما مفید بوده باشد.
با سپاس 😉
خیلی جالب و عالی بود. اینکه بدونیم با زبان هایی که کار می کنیم در واقع دارن چیکار میکنن و چجوری اجرا میشن میتونه تو خیلی از موارد جلوی بعضی از مشکلات مارو بگیره. دمت گرم عالی بود
کامل بود فرهاد جون
چه مرتب و جامع و سازماندهی شده نوشتی .خیلی خوب بود 🌹 اگر مثلا زبان های مفسری و کامپایلری رو به میتونستید به صورت تصویری هم بذارید جذاب تر میشد.
خیلی ممنون مرسی از اینکه مطالب رو با دقت خوندی و دیدگاهت رو گفتی
چه مرتب و جامع و سازماندهی شده نوشتی . خیلی خوب بود 🌹 اگر مثلا زبان های مفسری و کامپایلری رو به میتونستید به صورت تصویری هم بذارید جذاب تر میشد.
عالی آقای احمدی 🌹
مرسی خیلی ممنون
خیلی کامل و تمیز بود
عالی فرهاد
مرسی ممنون
بسیار عالی و مفید
ممنون ☺️
خواهش میکنم خیلی ممنون