ترجمه دودویی
در محاسبات ، ترجمه باینری نوعی ترکیب مجدد باینری است که در آن توالی دستورالعمل ها از یک مجموعه دستورالعمل "منبع" به مجموعه دستورالعمل های "هدف" ترجمه می شوند. در برخی موارد مانند شبیه سازی مجموعه دستورالعمل ها ، مجموعه دستورالعمل های هدف ممکن است همان مجموعه دستورالعمل های منبع باشد ، ویژگی های تست و اشکال زدایی مانند ردیابی دستورالعمل ها ، نقاط وقفه شرطی و تشخیص نقاط hotspot را ارائه می دهد.
ترجمه باینری دارای دو دسته بندی استاتیک و پویا میباشد. ترجمه را می توان در سخت افزار یا در نرم‌افزار انجام داد.
هدف ترجمه باینری عدم وجود باینری برای یک پلتفرم هدف ، کمبود کد منبع برای کامپایل برای سیستم عامل هدف یا در غیر این صورت مشکل در تهیه منبع برای سیستم عامل هدف میباشد.
باینری هایی که بصورت ایستا مجدداً کامپایل شده اند، به دلیل اینکه سربار تقلید از بین می رود بالقوه سریعتر از باینرهای شبیه سازی شده مربوطه اجرا می شوند. این شبیه تفاوت عملکرد بین برنامه های تفسیر شده و کامپایل شده به طور کلی است.
یک مترجم با استفاده از ترجمه باینری ایستا قصد دارد تمام کدهای یک فایل اجرایی را به کدی تبدیل کند که بر روی معماری هدف اجرا می شود بدون اینکه لازم باشد ابتدا کد را اجرا کند ، همانطور که در ترجمه باینری پویا انجام می شود. انجام این کار بسیار دشوار است ، زیرا همه کدها توسط مترجم کشف نمی‌شوند. به عنوان مثال ، بعضی از قسمتهای اجرایی فقط از طریق شاخه های غیرمستقیم قابل دسترسی هستند که ارزش آنها فقط در زمان اجرا مشخص است.
یک مترجم باینری استاتیک از superoptimizer روزنه تکنولوژی جهانی (توسعه یافته توسط Sorav Bansal ، و الکس آیکن از دانشگاه استنفورد ) برای انجام یک ترجمه کارآمد بین احتمالاً بسیاری از منابع جفت مبدأ و مقصد، با هزینه های توسعه، بطور قابل توجهی کم و کارایی بالا از باینری هدف استفاده میکند. در آزمایش های ترجمه PowerPC به x86 ، برخی از باینری ها حتی از نسخه های بومی عملکرد بهتری دارند اما به طور متوسط با دو سوم سرعت بومی کار می کنند.
هانیول برنامه ای تحت عنوان Liberator را برای سری 200 رایانه هانیول ارائه داد. این برنامه می تواند برنامه هایی را برای سری کامپیوترهای IBM 1400 به برنامه های سری Honeywell 200 ترجمه کند.
در سال 2014 ، یک نسخه معماری ARM از بازی ویدیویی "StarCraft" 1998 با تلفیق ایستا و مهندسی معکوس اضافی نسخه اصلی x86 تولید شد . جامعه دستی پاندورا قادر بود ابزارهای مورد نیاز به تنهایی توسعه دهد و چندین بار با موفقیت به چنین ترجمه هایی دست یابد.
به عنوان مثال ، یک ترکیب مجدد استاتیک x86 به x64 موفقیت آمیز برای ژنراتور رویه ای بازی ویدیویی "Cube World" در سال 2014 تولید شد.
مثال دیگر ، نسخه کاملاً آماری NES -to- x86 از بازی ویدیویی "Super Mario Bros است" که با استفاده از LLVM در سال 2013 تولید شده است.
در سال 2004 اسکات الیوت و فیلیپ آر. هاچینسون در نینتندو ابزاری را برای تولید کد "C" از باینری Game Boy تولید کردند که می تواند برای یک پلتفرم جدید کامپیوتر شود و با استفاده از کتابخانه سخت افزاری برای استفاده در سیستم های سرگرمی خطوط هوایی پیوند یابد.
در سال 1995 نورمن رمزی در تحقیقات ارتباطات بل و مری اف. فرناندز در گروه علوم کامپیوتر ، دانشگاه پرینستون "جعبه ابزار ماشین-کد نیوجرسی را ایجاد کرد" که دارای ابزارهای اساسی برای ترجمه استاتیک مونتاژ بود.
ترجمه باینری پویا (DBT) توالی کوتاهی از کد را مشاهده می کند - که معمولاً به ترتیب یک بلوک اساسی است - سپس آن را ترجمه کرده و توالی حاصل را در حافظه پنهان می کند. کد فقط در صورت کشف و در صورت امکان ترجمه می شود و دستورالعمل های شاخه برای اشاره به کد ترجمه شده و ذخیره شده ( یادداشت سازی ) ساخته می شوند.
ترجمه باینری پویا با شبیه سازی ساده (حذف حلقه اصلی خواندن-رمزگشایی-اجرا-شبیه ساز - یک گلوگاه اصلی عملکرد) متفاوت است ، هزینه های این کار را با هزینه زیاد در طول زمان ترجمه پرداخت می کند.
مترجمان پویاتر پیشرفته از ترکیب مجدد پویا استفاده می کنند که کد ترجمه شده برای استفاده از تعداد زیادی بار اجرا شده و این قسمت ها به صورت تهاجمی بهینه می شوند. این تکنیک یادآور کامپایلر JIT و در واقع چنین کامپایلرهایی است (به عنوان مثال از فناوری HotSpot Sun می توان به عنوان مترجم های پویا از یک مجموعه دستورالعمل مجازی ( کد بایت ) به یک دستورالعمل واقعی دیدن کرد.