هدف‌گیری مجدد

در مهندسی نرم‌افزار، retargeting یکی از ویژگی‌های ابزارهای توسعه‌دهندهٔ نرم‌افزار است که به‌طور خاص برای تولید کد در بیش از یک پلتفرم محاسباتی ساخته شده‌است.

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

تاریخچهٔ این ایده به سال ۱۹۵۰ برمیگردد وقتی که UNCOL به عنوان زبان میانی جهانی معرفی شد.

کامپایلر Pascal P نمونه‌ای از این کامپایلرها است که به‌طور گسترده استفاده می‌شود.

هزینه تولید یک کامپایلر قابل تنظیم مجدد که کدی با کیفیت مشابه یک کامپایلر غیرقابل بازگردانی تولید می‌کند (یعنی کدی که فقط برای تولید یک کد برای یک پردازنده طراحی شده‌است)، بیشتر است. زیرا در تمامی مراحل کامپایل، استفاده از جزئیات خاص واحدپردازش مرکزی یا cpu امکان‌پذیر نمی‌باشد. از مزایای این نوع کامپایلرها این است که هزینهٔ نهایی آن برای چندین پردازندهٔ مرکزی بسیار کمتر از هزینهٔ ترکیبی بسیاری از کامپایلرهای غیرهدفمند است

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

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

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

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

نمونه‌هایی از کامپایلرهای قابل تنظیم مجدد:
 شورای همکاری خلیج فارس
 ACK
 ال سی سی
 VBCC
 کامپایلر قابل حمل C
 SDCC
 LLVM
 کامپایلر Small-C
 MPG، «مولد ریز برنامه‌های کارآمد مستقل از ماشین»

دی‌کامپایلر 
retdec: یک کامپایل کنندهٔ کد ماشین منبع باز و مبتنی بر LLVM hsj.
 decompiler محدود به هیچ‌یک از اهداف خاص، سیستم عامل یا قالب فایل اجرایی خاص نیست:
 قالب‌های فایل پشتیبانی شده: ELF , PE , Mach-O، COFF , AR (بایگانی)، Intel HEX و کد دستگاه خام.
 معماری‌های پشتیبانی شده (در حال حاضر فقط ۳۲ بیتی): Intel x86، ARM , MIPS , PIC32 و PowerPC.

جمع‌کننده‌ها 
برعکس، اسمبلرها با قابلیت تنظیم مجدد، توانایی تولید پرونده‌های شی در فرمت‌های مختلف را دارند؛ که برای انتقال برنامه‌های زبان اسمبلی به سیستم عامل‌های مختلف که روی معماری پردازنده یکسان (مانند ویندوز و لینوکس بر روی سیستم عامل x86) اجرا می‌شوند، مفید واقع می‌شود. NASM یکی از انواع این اسمبلرها است.

برای اطلاعات بیشتر 
 یک کامپایلر مجدد C: طراحی و پیاده‌سازی ()

منابع

پیوند به بیرون 
 وب سایت کامپایلر LANCE
 وب سایت زیرساخت کامپایلر LLVM
 صفحه منبع باز ACK (منبع آزاد)
 صفحه کامپایلر Nils Weller
کامپایلرها