سیستمهای زمان اجرا و ماشینهای مجازی
سیستمهای زمان اجرا و ماشینهای مجازی، محیط اجرایی را برای برنامهها فراهم میکنند، کد میانی را تفسیر یا کامپایل کرده و سرویسهای مورد نیاز یک برنامه در حال اجرا را مدیریت میکنند.
Definition
سیستم زمان اجرا، محیط نرمافزاری است که اجرای یک برنامه را فراتر از کد خودش پشتیبانی میکند، و یک ماشین مجازی یک موتور اجرایی انتزاعی است که یک مجموعه دستورالعمل قابل حمل را تفسیر یا کامپایل میکند و قابلیت حمل و سرویسهای زمان اجرا را فراهم میآورد.
Scope
این موضوع لایه بین کد کامپایلشده و سختافزار را پوشش میدهد: مفسرهای بایتکد و ماشینهای انتزاعی، کامپایل در لحظه (JIT)، ارسال پویا و جستجوی متد، قراردادهای فراخوانی و مدیریت پشته، و سرویسهای زمان اجرا مانند مدیریت استثنا و بازتاب. این موضوع به طراحی ماشینهای مجازی قابل حمل و تکنیکهایی که زبانهای مدیریتشده را کارآمد میسازند، میپردازد.
Core questions
- ماشینهای مجازی چگونه قابلیت حمل را در سراسر سختافزار فراهم میکنند؟
- کامپایل در لحظه (just-in-time) چگونه تفسیر و کد بومی را ترکیب میکند؟
- ارسال پویا و جستجوی متد چگونه کارآمد میشوند؟
- چه سرویسهای زمان اجرایی باید از یک زبان مدیریتشده پشتیبانی کنند؟
Key theories
- معماری ماشین مجازی قابل حمل
- مشخصات ماشین مجازی جاوا یک بایتکد و مدل اجرایی قابل حمل و قابل تأیید را تعریف میکند، که نشان میدهد چگونه یک ماشین مجازی یک زبان را از سختافزار خاص جدا میکند.
- کامپایل در لحظه (Just-in-time compilation)
- آیکاک تکنیکهایی را بررسی میکند که توسط آنها زماناجراها کد را در طول اجرا به فرم بومی کامپایل میکنند، و تعادل بین راهاندازی مفسر و توان عملیاتی کد کامپایلشده را با استفاده از اطلاعات زمان اجرا برقرار میسازند.
- کشسازی درونخطی برای ارسال پویا
- پیادهسازی Smalltalk توسط دویچ و شیفمن، کشسازی درونخطی و ترجمه پویا را معرفی کرد، که تکنیکهای کلیدی برای سریع کردن جستجوی متد در زبانهای با ارسال پویا هستند.
Clinical relevance
ماشینهای مجازی و زماناجراهای مدیریتشده، پلتفرمهای پرکاربرد برای جاوا، داتنت، جاوااسکریپت و پایتون را قدرت میبخشند و قابلیت حمل، ایمنی و بهینهسازی تطبیقی را فراهم میکنند. کامپایل JIT و کشسازی درونخطی دلایلی هستند که زبانهای سطح بالا و پویا میتوانند به عملکرد رقابتی دست یابند.
History
ماشینهای انتزاعی به سیستمهای قابل حمل اولیه و Smalltalk بازمیگردند، که پیادهسازی آن در سال 1984 پیشگام ترجمه پویا و کشهای درونخطی بود. ماشین مجازی جاوا بایتکد قابل حمل را در اواسط دهه 1990 محبوب کرد، و کامپایلرهای JIT تطبیقی مانند HotSpot و بعدها موتورهای جاوااسکریپت، بهینهسازی تهاجمی زمان اجرا را به زبانهای مدیریتشده اصلی آوردند.
Debates
- تفسیر در مقابل کامپایل در لحظه
- طراحان زمان اجرا، مفسرهای ساده با راهاندازی سریع و مصرف حافظه کم را در مقابل کامپایلرهای JIT که به اوج عملکرد بالاتری دست مییابند، با هزینه زمان گرم شدن و پیچیدگی پیادهسازی، میسنجند و اغلب این دو را در سیستمهای چندلایه ترکیب میکنند.
Key figures
- Peter Deutsch
- John Aycock
- James Gosling
- Gilad Bracha
Related topics
Seminal works
- lindholm2014
- aycock2003
- deutsch1984
Frequently asked questions
- ماشین مجازی در این زمینه چیست؟
- در اینجا یک ماشین مجازی یک موتور اجرایی نرمافزاری است که یک مجموعه دستورالعمل قابل حمل (مانند بایتکد) را اجرا میکند، و با انتزاع سختافزار زیرین و ارائه سرویسهای زمان اجرا، به جای شبیهسازی یک کامپیوتر کامل عمل میکند.
- کامپایل در لحظه (just-in-time) چگونه به عملکرد کمک میکند؟
- یک کامپایلر JIT بخشهای پرکاربرد یک برنامه را در زمان اجرا به کد بومی ترجمه میکند، با استفاده از اطلاعات پروفایلسازی که یک کامپایلر پیشاز-زمان فاقد آن است، بنابراین کد داغ با سرعتی نزدیک به سرعت بومی اجرا میشود.