ترجمه دودویی

در محاسبات، **ترجمه باینری** نوعی ترکیب مجدد باینری است که در آن توالی دستورالعمل‌ها از یک مجموعه دستورالعمل *منبع* به مجموعه دستورالعمل‌های *هدف* ترجمه می‌شوند. در برخی موارد مانند شبیه‌سازی مجموعه دستورالعمل‌ها، مجموعه دستورالعمل‌های هدف ممکن است همان مجموعه دستورالعمل‌های منبع باشد، ویژگی‌های تست و اشکال زدایی مانند ردیابی دستورالعمل‌ها، نقاط وقفه شرطی و تشخیص نقاط hotspot را ارائه می‌دهد.

ترجمه باینری دارای دو دسته‌بندی استاتیک و پویا می‌باشد. ترجمه را می‌توان در سخت‌افزار یا در نرم‌افزار انجام داد.

## انگیزه
هدف ترجمه باینری عدم وجود باینری برای یک پلتفرم هدف، کمبود کد منبع برای کامپایل برای سیستم عامل هدف یا در غیر این صورت مشکل در تهیه منبع برای سیستم عامل هدف می‌باشد.

باینری‌هایی که به صورت ایستا مجدداً کامپایل شده‌اند، به دلیل اینکه سربار تقلید از بین می‌رود بالقوه سریعتر از باینرهای شبیه‌سازی شده مربوطه اجرا می‌شوند. این شبیه تفاوت عملکرد بین برنامه‌های تفسیر شده و کامپایل شده به‌طور کلی است.

## ترجمه باینری استاتیک
یک مترجم با استفاده از ترجمه باینری ایستا قصد دارد تمام کدهای یک فایل اجرایی را به کدی تبدیل کند که بر روی معماری هدف اجرا می‌شود بدون اینکه لازم باشد ابتدا کد را اجرا کند، همان‌طور که در ترجمه باینری پویا انجام می‌شود. انجام این کار بسیار دشوار است، زیرا همه کدها توسط مترجم کشف نمی‌شوند. به عنوان مثال، بعضی از قسمتهای اجرایی فقط از طریق شاخه‌های غیرمستقیم قابل دسترسی هستند که ارزش آنها فقط در زمان اجرا مشخص است.

یک مترجم باینری استاتیک از superoptimizer روزنه تکنولوژی جهانی (توسعه یافته توسط Sorav Bansal، و الکس آیکن از دانشگاه استنفورد) برای انجام یک ترجمه کارآمد بین احتمالاً بسیاری از منابع جفت مبدأ و مقصد، با هزینه‌های توسعه، به‌طور قابل توجهی کم و کارایی بالا از باینری هدف استفاده می‌کند. در آزمایش‌های ترجمه PowerPC به x86، برخی از باینری‌ها حتی از نسخه‌های بومی عملکرد بهتری دارند اما به‌طور متوسط با دو سوم سرعت بومی کار می‌کنند.

### نمونه‌هایی برای ترجمه‌های باینری استاتیک
هانیول برنامه ای تحت عنوان Liberator را برای سری ۲۰۰ رایانه هانیول ارائه داد. این برنامه می‌تواند برنامه‌هایی را برای سری کامپیوترهای IBM 1400 به برنامه‌های سری Honeywell 200 ترجمه کند.

در سال ۲۰۱۴، یک نسخه معماری ARM از بازی ویدیویی *[[استارکرافت (بازی ویدئویی)|*'استارکرافت**]]'' 1998 با تلفیق ایستا و [[مهندسی معکوس]] اضافی نسخه اصلی [[اکس۸۶|x86 تولید شد]]. جامعه دستی پاندورا قادر بود ابزارهای مورد نیاز به تنهایی توسعه دهد و چندین بار با موفقیت به چنین ترجمه‌هایی دست یابد.

به عنوان مثال، یک ترکیب مجدد استاتیک x86 به [[X86-64|x64]] موفقیت‌آمیز برای ژنراتور رویه ای بازی ویدیویی ***[[دنیای مکعب]]*** در سال ۲۰۱۴ تولید شد.

مثال دیگر، [[سیستم سرگرمی نینتندو|نسخه]] کاملاً آماری [[سیستم سرگرمی نینتندو|NES]] -to- [[اکس۸۶|x86]] از بازی ویدیویی ***[[برادران سوپر ماریو]]*** است که با استفاده از **ال‌ال‌وی‌ام** در سال ۲۰۱۳ تولید شده‌است.

در سال ۲۰۰۴ اسکات الیوت و فیلیپ آر. هاچینسون در [[نینتندو]] ابزاری را برای [[تولید کد]] "C" از باینری **گیم بوی** تولید می‌کردند که می‌تواند برای یک پلتفرم جدید کامپیوتر شود و با استفاده از کتابخانه سخت‌افزاری برای استفاده در سیستم‌های سرگرمی خطوط هوایی پیوند یابد.

در سال ۱۹۹۵ نورمن رمزی در تحقیقات ارتباطات بل و مری اف. فرناندز در گروه علوم کامپیوتر، [[دانشگاه پرینستون]] ''جعبه ابزار ماشین-کد نیوجرسی را ایجاد کرد'' که دارای ابزارهای اساسی برای ترجمه استاتیک مونتاژ بود.

== ترجمه باینری پویا ==
ترجمه باینری پویا (DBT) توالی کوتاهی از کد را مشاهده می‌کند - که معمولاً به ترتیب یک [[بلوک پایه|بلوک اساسی است -]] سپس آن را ترجمه کرده و توالی حاصل را در [[حافظه نهان|حافظه پنهان]] می‌کند. کد فقط در صورت کشف و در صورت امکان ترجمه می‌شود و دستورالعمل‌های شاخه برای اشاره به کد ترجمه شده و ذخیره شده ([[مموایز کردن|یادداشت سازی]]) ساخته می‌شوند.

ترجمه باینری پویا با شبیه‌سازی ساده (حذف حلقه اصلی خواندن-رمزگشایی-اجرا-شبیه‌ساز - یک گلوگاه اصلی عملکرد) متفاوت است، هزینه‌های این کار را با هزینه زیاد در طول زمان ترجمه پرداخت می‌کند.

مترجمان پویاتر پیشرفته از [[کامپایل مجدد پویا|ترکیب مجدد پویا]] استفاده می‌کنند که کد ترجمه شده برای استفاده از تعداد زیادی بار اجرا شده و این قسمت‌ها به صورت تهاجمی [[کامپایلر بهینه‌ساز|بهینه می]] شوند. این تکنیک یادآور [[کامپایل درجا|کامپایلر JIT]] و در واقع چنین کامپایلرهایی است (به عنوان مثال [[سان مایکروسیستمز|از]] فناوری [[هات‌اسپات|HotSpot]] [[سان مایکروسیستمز|Sun]] می‌توان به عنوان مترجم‌های پویا از یک مجموعه دستورالعمل مجازی ([[بایت‌کد|کد بایت]]) به یک دستورالعمل واقعی دیدن کرد.

=== نمونه‌هایی از ترجمه‌های باینری پویا در نرم‌افزار ===
* [[اپل|اپل کامپیوتر]] یک [[برابرساز|شبیه‌ساز]] ترجمه پویا برای کد M68K را در خط [[پاورپی‌سی|PowerPC]] خود از [[مکینتاش|Macintoshes]]**مکینتاش''' پیاده‌سازی کرد که به سطح بالایی از قابلیت اطمینان، عملکرد و سازگاری دست یافت (به شبیه‌ساز Mac 68K مراجعه کنید). این به اپل این امکان را می‌داد که دستگاه‌ها را فقط با یک سیستم عامل تا حدودی بومی به بازار بیاورد و کاربران نهایی می‌توانند از معماری سریعتر و جدید استفاده کنند بدون اینکه سرمایه‌گذاری خود را در زمینه نرم‌افزار به خطر بیندازند. تا حدودی به این دلیل که شبیه‌ساز بسیار موفق بود، بسیاری از قسمتهای سیستم عامل شبیه‌سازی شدند. انتقال کامل به سیستم عامل بومی (OS) PowerPC تا زمان انتشار Mac OS X (10.0) در سال ۲۰۰۱ انجام نشد. (محیط زمان اجرا " Classic " Mac OS X همچنان این قابلیت شبیه‌سازی را در MacP PowerPC تا Mac OS X 10.5 ارائه می‌دهد)
* Mac OS X 10.4.4 برای مکینتاش مبتنی بر اینتل، لایه ترجمه دینامیک Rosetta را برای سهولت انتقال اپل از سخت‌افزار مبتنی بر PPC به x86 معرفی کرد. نرم‌افزار Rosetta که توسط شرکت Transitive Corporation برای اپل توسعه یافته‌است، پیاده‌سازی راه حل QuickTransit Transitive است.
* QuickTransit در طول عمر محصول خود همچنین از پشتیبانی SPARC → x86، x86 → PowerPC و MIPS IPS Itanium 2 پشتیبانی می‌کند.
* DEC با کمک ابزارهای ترجمه خود به موفقیت مشابهی دست یافت تا به کاربران در مهاجرت از معماری CISC VAX به معماری Alpha RISC کمک کند .
* HP ARIES (ترجمه مجدد خودکار و شبیه‌سازی محیط مجتمع) یک نرم‌افزار سیستم ترجمه باینری پویا است که ترکیبی از تفسیر سریع کد با ترجمه پویا دو فاز برای اجرای شفاف و دقیق برنامه‌های HP 9000 HP-UX در HP-UX 11i برای HPE است سرورهای یکپارچگی مفسر سریع ARIES مجموعه کاملی از دستورالعمل‌های PA-RISC غیرمجاز را بدون دخالت کاربر تقلید می‌کند. در حین تفسیر، الگوی اجرای برنامه را کنترل می‌کند و فقط کدهای اغلب اجرا شده را در زمان اجرا به کد بومی ایتانیوم ترجمه می‌کند. ARIES ترجمه پویا دو فازی را پیاده‌سازی می‌کند، تکنیکی که در آن کد ترجمه شده در مرحله اول اطلاعات پروفایل زمان اجرا را که هنگام ترجمه فاز دوم برای بهینه‌سازی بیشتر کد ترجمه شده استفاده می‌کند، جمع‌آوری می‌کند. ARIES کد ترجمه شده به صورت پویا را در بافر حافظه بنام cache کد ذخیره می‌کند. ارجاعات بیشتر به بلوک‌های اساسی ترجمه شده مستقیماً در حافظه پنهان کد اجرا می‌شوند و نیازی به تفسیر یا ترجمه اضافی ندارند. اهداف بلوک‌های کد ترجمه شده دوباره وصله می‌شوند تا اطمینان حاصل شود که اجرای آن در حافظه پنهان کد بیشتر اوقات انجام می‌شود. در پایان شبیه‌سازی، ARIES تمام کد ترجمه شده را بدون تغییر در برنامه اصلی دور می‌اندازد. موتور شبیه‌سازی ARIES همچنین محیط شبیه‌سازی را اجرا می‌کند که مکالمات سیستمی، تحویل سیگنال، مدیریت استثنا، مدیریت رشته‌ها، شبیه‌سازی HP GDB برای اشکال زدایی و ایجاد پرونده هسته ای برنامه HP 9000 HP-UX را شبیه‌سازی می‌کند.
* DEC مترجم باینری FX! ۳۲ را برای تبدیل برنامه‌های x86 به برنامه‌های آلفا ایجاد کرد.
* نرم‌افزار Sun Microsystems ' Wabi شامل ترجمه پویا از x86 به دستورالعمل‌های SPARC بود.
* در ژانویه ۲۰۰۰، شرکت Transmeta یک طرح پردازنده جدید به نام Crusoe را اعلام کرد. از س FAالات متداول در وب سایت خود ،
* اینتل شرکت توسعه و اجرا IA-32 اجرای لایه - مترجم باینری پویا طراحی شده برای پشتیبانی IA-32 برنامه‌های کاربردی در ایتانیوم سیستم مبتنی بر، که در نظر گرفته شد مایکروسافت ویندوز سرور برای ایتانیوم معماری، و همچنین در چندین طعم لینوکس، از جمله کلاه قرمزی و سوسه. به برنامه‌های IA-32 اجازه می‌داد تا سریعتر از حالت بومی IA-32 در پردازنده‌های Itanium کار کنند.
* Dolphin (شبیه‌ساز GameCube / Wii) مجدداً کامپایل JIT کد PowerPC را به x86 و AArch64 انجام می‌دهد.

### نمونه‌هایی برای ترجمه باینری پویا در سخت‌افزار
* پردازنده‌های x86 اینتل از زمانی که Pentium Pro دستورالعمل‌های پیچیده CISC x86 را به عملکردهای داخلی بیشتر شبیه RISC ترجمه می‌کند.
* Nvidia Tegra K1 Denver دستورالعمل‌های ARM را از طریق رمزگشای سخت‌افزاری کند به دستورالعمل‌های میکرو کد اصلی خود ترجمه می‌کند و از یک مترجم باینری نرم‌افزار برای کد گرم استفاده می‌کند.

## جستارهای وابسته
* بهینه‌سازی دودویی
* ترکیب مجدد دودویی
* تلفیق مجدد پویا
* تدوین به موقع
* شبیه‌ساز مجموعه دستورالعمل‌ها
* شبیه‌ساز
* ماشین مجازی
* مقایسه نرم‌افزار مجازی سازی پلتفرم
* خاطره سایه

## منابع


رده:صفحات با ترجمه بازبینی‌نشده
رده:مفسرها (رایانش)
رده:نرم‌افزار برابرسازی
رده:نرم‌افزارهای مجازی‌سازی