ماشین مجازی هیپهاپ (به انگلیسی: HipHop Virtual Machine) یک ماشین مجازی مبتنی بر کامپایل درجا است که بهعنوان موتور اجرایی پیاچپی و زبان برنامهنویسیهک عمل میکند. با استفاده از مفهوم کامپایل درجا کدهای اجراشدهٔ پیاچپی یا هک در ابتدا به بایتکد هیپهاپ تبدیل میشوند که بهصورت پویا به کد ماشین معماری اکس۸۶-۶۴ تبدیل میشود، بهینهسازیشده و بهصورت بومی اجرا میشود. این بر خلاف اجرای تفسیری است که طی آن موتور زند کدهای مبدأ پیاچپی را به آپکد بهعنوان قالبی از کد میانی تبدیل میکند و آپکدها را بهصورت مستقیم در پرداشگرماشین مجازی موتور زند اجرا میکند.[۳]
ماشین مجازی هیپهاپ توسّط فیسبوک به عنوان جانشین هیپهاپ، موتور اجرایی پیاچپی (HPHPc) که آن هم توسّط فیسبوک ساخته شدهبود، و یک مترجم مبدأ به مبدأ از پیاچپی به سیپلاسپلاس بود ساختهشد. فیسبوک براساس تجربهای که از ساخت HPHPc به دست آوردهبود، در سال ۲۰۱۰ تصمیم به ساخت یک ماشین مجازی درجا برای پیاچپی، به منظور حلّ معضلات HPHPc کرد. معصلات و مشکلات HPHPc شامل مواردی مانند مشکلات کارآیی، پشتیبانینکردن کامل از تمام ویژگیهای پیاچپی، و مشکلاتی که برای فرایندهای استفادهکننده از آن در صرف زمان و منابع ایجاد میشد است. در ۲۰۱۳ محصول facebook.com استفاده از HPHPc را متوقّف کرد و استفاده از ماشین مجازی هیپهاپ را شروع کرد.
به پیروی از اصل کامپایل درجا، هیپهاپ ابتدا کد پیاچپی یا هک را به یک بایتکد سطح بالا، HHBC، که به زبان میانی نیز شناخته میشود، تبدیل میکند. HHBC یک فرمت بایتکد است که مخوصاً توسّط هیپهاپ ساختهشده و هم برای استفادهی مفسّرها مناسب است و هم برای استفادهی کامپایلرهای درجا. در قدم بعدی، هیپهاپ به صورت پویا ("درجا") بایتکد HHBC را به کد ماشین x86-64 ترجمه میکند؛ سپس از طریق یک تحلیل پویا چندین بهینهسازی روی آن انجام میدهد و سپس کد ماشین x86-64 را اجرا میکند. در نتیجه هیپهاپ دارای مشابهتهای بهخصوصی با ماشینهای مجازیای که توسّط زبانهای دیگر استفاده میشوند، مانند ماشین مجازی جاوا، دارد،
هیپهاپ مزایای زیادی در مقایسه با HPHPc به ارمغان میآورد، که یکی از آنها پشتیبانی کامل از تمام زبان تعریفشدهی رسمی پیاچپی نسخهی ۵.۴، که شامل تابع ()create_functionو مولّدهای ()eval است. علاوهبر این، هیپهاپ از موتور اجرایی یکسان در محیطهای توسعه و استفرار استفاده میکند و اشکالزادیی موتور اجرایی در هر دو محیط را یکپارچه میکند. هیپهاپ همچنین زمان اجرای طولانیای که توسّط HPHPc ایجاد میشد را از بین میبرد و در نتیجه فرایند توستعه و استقرار را راحتتر میکند.
فیسبوک در کنار هیپهاپ، هک را که یک اشتقاق از پیاچپی است منتشر کرد. هک به برنامهنویسان اجازه میدهد تا هم از نوعهای پویا و هم از نوعهای ایستا استفاده کنند، این مفهوم به عنوان نوع تدریجی نیز شناخته میشود و به نوعهای زبان اجازه میدهد تا براساس ورودی و خروجی توابع و خصوصیات کلاسها معیّن شوند؛ البتّه اجازهی انجام این کار روی متغیّرهای محلّی داده نمیشود. با این حال هک، سازگاری عقبرو را به خاطر نداشتن برخی ویژگیهای پیاچپی مانند دستور goto و نامهای پویا برای متغیّرها پشتیبانی نمیکند.
در سپتامبر ۲۰۱۷، اعلام شد که نسخهی ۳.۲۴، آخرین نسخهی هیپهاپ خواهدبود که به طور رسمی از پیاچپی پشتیبانی میکند و از این به بعد تنها از هک پشتیبانی خواهدکرد.[۵]
کارآیی
هیپهاپ به عنوان یک فرایند ماشین مجازی که محیط اجرا را فراهم میکند، این توانایی را دارد که از اطّلاعات نوع زنده برای تولید کدهای بومی کاراتر استفاده کند، این امر منجر به گذردهی بالاتر وبسرور و کمترشدن تاخیر میشود. در ۲۰۱۲، سرعت اجرای کد مبدأ فیسبوک بر هیپهاپ با سرعت اجرای آن بر HPHPc برابر شد، و در دسامبر همان سال تا حتّی ۱۵٪ از HPHPc سریعتر شد.