ترجمه دوگانه

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

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

کامپایلرهای متقابل از کامپایلرهای منبع‌به‌منبع دو ابزار برنامه‌نویسی متمایز هستند. یک کامپایلر متقابل برای توسعه‌ چندپلتفرمی نرم‌افزارهای کد ماشین است، در حالی که یک کامپایلر منبع‌به‌منبع متن کد را از یک زبان برنامه‌نویسی به زبان دیگر ترجمه می‌کند.

## استفاده‌ها
کاربرد اصلی یک کامپایلر متقاطع، جدا کردن محیط ساخت از محیط هدف است. این در چندین موقعیت مفید است:

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

* **تدوین برای چندین ماشین:** به عنوان مثال ممکن است یک شرکت بخواهد چندین نسخه مختلف از یک سیستم‌عامل را پشتیبانی کند یا از چندین سیستم‌عامل مختلف پشتیبانی کند؛ با استفاده از کامپایلر متقابل، می‌توان یک محیط ساخت واحد را برای کامپایل هر یک از این اهداف تنظیم کرد.

* **تدوین در مزرعه سرور:** مشابه کامپایل کردن برای چندین ماشین، ساخت پیچیده ای شامل تعداد بسیاری عملیات کامپایل می تواند در هر دستگاهی که در دسترس است، صرف نظر از سخت‌افزار زیرین یا نسخه سیستم‌عامل، اجرا شود.

* **راه‌اندازی مجدد به یک سیستم‌عامل جدید:** هنگام توسعه نرم‌افزار برای یک سیستم‌عامل جدید یا شبیه‌ساز یک سیستم‌عامل آینده، فرد از یک کامپایلر متقابل برای گردآوری ابزارهای لازم مانند سیستم‌عامل و یک کامپایلر بومی استفاده می‌کند.

* **تدوین کد محلی برای شبیه سازها:**برای سیستم‌عامل های قدیمی‌تر مانند Commodore 64 یا Apple II توسط علاقه‌مندان به استفاده از کامپایلرهای متقاطع که بر روی سیستم‌عامل فعلی اجرا می‌شوند(مانند کامپایلرهای متقابل Aztec C's MS-DOS 6502 که تحت ویندوز XP اجرا می شوند).

استفاده از ماشین‌های مجازی (مانند JVM جاوا) برخی از دلایل توسعه کامپایلرهای متقابل را برطرف می‌کند؛ پارادایم ماشین مجازی اجازه می‌دهد تا از خروجی کامپایلر یکسان در چندین سیستم هدف استفاده شود، اگرچه این همیشه ایده‌آل نیست زیرا ماشین‌های مجازی اغلب کندتر هستند و برنامه کامپایل‌شده را فقط می‌توان روی رایانه‌های دارای آن ماشین مجازی اجرا کرد.

به طور معمول معماری سخت‌افزار متفاوت است (به عنوان مثال تدوین برنامه‌ای که برای معماری MIPS در رایانه x86 تنظیم شده‌است) اما در صورت تفاوت در محیط سیستم‌عامل (مانند تنظیم برنامه FreeBSD تحت لینوکس) یا حتی فقط کتابخانه سیستم (مانند هنگام تدوین برنامه ها با uClibc روی میزبان glibc )

، کامپایل متقابل نیز قابل اجرا است.

## منابع
نسخه ۱۴ سپتامبر ۲۰۲۰ https://en.wikipedia.org/wiki/Cross_compiler
Wikipedia contributors, "[//en.wikipedia.org/w/index.php?title=Cross-compilation&oldid=62506066 Cross-compilation]," Wikipedia, The Free Encyclopedia (نسخهٔ ۱۱ ژوئیهٔ ۲۰۰۶).

فرهنگ‌نامهٔ انجمن انفورماتیک ایران

رده:کامپایلرهای چندگانه
رده:برنامه‌نویسی
رده:کامپایلرها