کامپایل پویا

از ویکی‌پدیا، دانشنامهٔ آزاد

کامپایل پویا فرایندی است که توسط برخی از زبان‌های برنامه‌نویسی برای عملکرد بهتر، در حین اجرای برنامه استفاده می‌شود. جاوا مشهورترین زبان برنامه‌نویسی است که از این شیوه استفاده می‌کند. از آنجا که کامپایلر پویا کد ماشین را در حین اجرای برنامه تولید کرده و بهبود می‌بخشد، استفاده از کامپایل پویا بهینه‌سازی‌هایی را فراهم می‌کنند که در برنامه‌های کامپایل شده در دسترس نیست.[۱]

محیط‌های زمان اجرایی که از کامپایلر پویا استفاده می‌کنند، به‌طور معمول شامل برنامه‌هایی هستند که برای چند دقیقهٔ اولیه به آرامی اجرا می‌شوند و پس از کامپایل شدن قسمت‌های مختلف برنامه، سریعاً اجرا می‌شوند. با توجه به این تأخیر در عملکرد اولیه، کامپایل پویا در مواردی خاص نامطلوب است. در اکثر پیاده‌سازی‌های کامپایلرهای پویا، برخی از بهینه‌سازی‌هایی که می‌توانند در زمان کامپایل اولیه انجام شوند تا کامپایل زمان اجرا به تأخیر می‌افتند که اجرای برنامه را کند می‌کند. کامپایل درجا نوعی از کامپایل پویا است.

در زبان‌هایی مثل اچ تی ام ال (HTML) یا سی اس اس (زبان‌های نشانه گذاری متن) (CSS) نیز که کامپایل وجود ندارد می‌توان هنگامی که کد در حال اجراست آن را ویرایش کرد.

کامپایل افزایشی[ویرایش]

کامپایل افزایشی یک شیوه مرتبط با کامپایل پویا است. به عنوان مثال کامپایلر افزایشی در POP-2 ،POP-11 ،Forth و برخی از نسخه‌های زبان لیسپ استفاده شده‌است. Maclisp و حداقل یک نسخه از زبان برنامه‌نویسی ام‌ال از کامپایل افزایشی استفاده کرده‌اند. این امر به کامپایلری نیاز دارد که زبان برنامه‌نویسی بخشی از سیستم زمان اجرا باشد. در نتیجه، کد منبع می‌تواند در هر زمان از ترمینال، از یک فایل، یا احتمالاً از یک داده ساختار ساخته شده توسط برنامه در حال اجرا، خوانده شود و به یک بلوک کد یا تابع تبدیل شود (ممکن است با تابع قبلی مشابه، به همین نام جایگزین شود)؛ که پس از آن بلافاصله برای استفاده توسط برنامه در دسترس خواهد بود. به دلیل نیاز به سرعت کامپایل در محیط‌های تعاملی، کد کامپایل شده به احتمال زیاد به اندازه کد تولید شده توسط یک «کامپایلر دسته ای» استاندارد که کد منبع راه خوانده و فایلهای شیء را تولید می‌کند، بهینه نشده‌است. با این حال، یک برنامه کامپایل شده افزایشی معمولاً بسیار سریعتر از نسخه تفسیر شده از همان برنامه اجرا می‌شود؛ بنابراین، کامپایل پویا تلفیقی از فواید زبانهای تفسیر شده و کامپایل شده را ارائه می‌دهد. برای اینکه کامپایلر افزایشی مستقل از سکو باشد، به‌طور کلی مطلوب است که کامپایلر افزایشی شامل دو مرحله باشد؛ به این صورت که ابتدا کد را به برخی زبان‌های مستقل از سکو تبدیل کند و سپس آن را به کد مقصد تبدیل کند. در این صورت فقط نیاز به تغییر کامپایلر، بخش دوم کامپایلر است. برخلاف کامپایل پویا، کامپایل افزایشی پس از اجرای قسمت اولین برنامه، در قسمت دوم، امکان بهینه‌سازی‌های بیشتری را فراهم نمی‌کند.

جستارهای وابسته[ویرایش]

پیوند به بیرون[ویرایش]

منابع[ویرایش]

  1. Peter L. Deutsch and Alan Schiffman. "Efficient Implementation of the Smalltalk-80 System", 11th Annual Symposium on Principles of Programming Languages, Jan 1984, pp. 297-302