در برنامه نویسی پیاده سازی زبان برنامه نویسی یک سیستمی برای اجرای برنامه های کامپیوتر هست.
به طور کلی دو راه برای پیاده سازی زبان برنامه نویسی هست:
interpretation : برنامه ما به طور مستقیم توسط یک مفسر خوانده میشود و برنامه را اجرا میکند.
compilation : برنامه توسط یک کامپایلر خوانده میشود که ان برنامه را به زبان دیگری ترجمه میکند مانند بایت کد یا کد ماشین.
کد برنامه ای که ترجمه شده است یا به طور مستقیم توسط سخت افزار اجرا میشد یا به عنوان ورودی برای یک مفسر یاکامپایلر دیگر استفاده میشود.
یک مفسر از دو قسمت تشکیل شده هست: یک تجزیه کننده و یک ارزیاب.
بعد از اینکه یک برنامه توسط یک مفسر خوانده شود توسط تجزیه کننده پردازش میشود. تجزیه کننده برنامه را به عناصر متفاوت ان زبان تجزیه میکند و ان را به فرم یک نمودار درختی تجزیه تبدیل میکند.
ارزیاب از این نمودار درختی تجزیه استفاده میکند تا برنامه را اجرا کند.
یک ماشین مجازی نوع خاصی از مفسر هست که بایت کد را تفسیر میکند.
بایت کد یک کد سطح پایین قابل حمل است که مشابه کد ماشین هست که اکثرا به جای ماشین فیزیکی روی یک ماشین مجازی اجرا میشود.
برای استفاده بهتر اکثر زبان های برنامه نویسی مانند جاوا، پایتون و سی شارپ قبل از تفسیر به بایت کد ترجمه میشود .
برخی از ماشین های مجازی شامل یک کامپایلر آنی(JIT) هستند برای اینکه اجرای بایت کد ها بهبود یابد. درهنگامی که بایت کد توسط ماشین مجازی اجرا میشود اگر کامپایلر آنی متوجه تکرار قسمتی از بایت کد شود ان قسمت را به کد ماشین ترجمه میکند. کامپایلر آنی کد ماشین را در حافظه دخیره میکند که ماشین مجازی بتواند از ان استفاده کند.
کامپایلر های آنی در تلاشند که بین زمان زیاد ترجمه شدن کد و زمان اجرای سریع کد تعادل ایجاد کنند.
یک کامپایلر برنامهای را که به زبانی نوشته شده است را به زبان دیگری ترجمه میکند. بیشتر کامپایلرها به سه مرحله تقسیم میشوند: فرانت اند، بهینهسازی و بک اند. فرانت اند مسئول درک برنامه است. این اطمینان حاصل میکند که برنامه معتبر است و آن را به یک نمایش میانی، یک ساختار دادهای که توسط کامپایلر برای نمایش برنامه استفاده میشود، تبدیل میکند. بهینهسازی نماینده میانی بهبود میبخشد تا سرعت افزایش یابد یا اندازه فایل اجرایی کمتر شود که در نهایت توسط کامپایلر تولید میشود. بک اند نمایش میانی بهبود یافته را به زبان خروجی کامپایلر تبدیل میکند.
اگر یک کامپایلر برای یک زبان برنامهنویسی سطح بالا زبان سطح بالای دیگری تولید کند ، آن را ترانسپایلر مینامند. ترانسپایلرها میتوانند برای گسترش زبانهای موجود یا سادهتر کردن توسعه کامپایلر با استفاده از اجراهای قابل حمل و بهینهسازی شده دیگر زبانها (مانند C) استفاده شوند.
ترکیبهای مختلفی از تفسیر و کامپایل ممکن است و در بسیاری از پیادهسازیهای زبانهای برنامهنویسی مدرن، عناصری از هر دو وجود دارد. به عنوان مثال، زبان برنامهنویسی Smalltalk به طور سنتی با کامپایل به bytecode پیادهسازی میشود، که سپس توسط یک ماشین مجازی تفسیر یا کامپایل میشود. از آنجایی که bytecode Smalltalk در یک ماشین مجازی اجرا میشود، قابل حمل بر روی پلتفرمهای سختافزاری مختلف است.
زبان های برنامه نویسی میتوانند چندین روش پیاده سازی داشته باشند.
پیاده سازی های متفاوت میتوانند با زبان های متفاوت نوشته شده باشند و هرکدام راه های متفاوت خود را برای تفسیر یا ترجمه کد داشته باشند. به طور مثال پیاده سازی پایتون شامل:
Ranta, Aarne (February 6, 2012). Implementing Programming Languages (PDF). College Publications. pp. 16–18. ISBN 9781848900646. Archived (PDF) from the original on Nov 7, 2020. Retrieved 22 March 2020.
Baker, Greg. "Language Implementations". Computing Science - Simon Fraser University. Archived from the original on Mar 8, 2019. Retrieved 22 March 2020.
Evans, David (19 August 2011). Introduction to Computing (PDF). University of Virginia. p. 211. Retrieved 22 March 2020.
Sridhar, Jay (Aug 29, 2017). "Why the Java Virtual Machine Helps Your Code Run Better". MakeUseOf. Retrieved 22 March 2020.
Bennett, James (April 23, 2018). "An introduction to Python bytecode". Opensource.com. Retrieved 22 March 2020.
Ali, Mirza Farrukh (Oct 12, 2017). "Common Language Runtime(CLR) DotNet". Medium. Retrieved 22 March 2020.
Cooper, Keith; Torczon, Linda (7 February 2011). Engineering a Compiler (2nd ed.). Morgan Kaufmann. pp. 6-9. ISBN 9780120884780.
Lewis, Simon (May 11, 1995). The Art and Science of Smalltalk (PDF). Prentice Hall. pp. 20–21. ISBN 9780133713459. Retrieved 23 March 2020.
"Alternative Python Implementations". Python.org. Retrieved 23 March 2020.
پروندههای رسانهای مربوط به Compiling and linking در ویکیانبار