در ساخت کامپایلر، دستکاری نام ( که به آن دکوراسیون نام نیز گفته می شود ) روشی است که در بسیاری از زبان های برنامه نویسی جدید و سطح بالا برای حل مشکلات ناشی از نیاز به تعریف کردن اسامی منحصر به فرد در هنگام ترجمه به زبان سطح پایین تر استفاده می شود. [ ۱]
این روش، راهی را برای کدگذاری اطلاعات اضافی در نام یک متغیر، تابع، ساختار، کلاس یا نوع دادهی دیگر ارائه می دهد تا اطلاعات بیشتری از طرف کامپایلرها به پیونددهنده ها منتقل شود تا بتوانند اسامی مشترک را از یکدیگر تمیز دهند. چرا که این ویژگی در زبان های سطح پایین تر ( مثلاً اسمبلیها ) وجود ندارد و نیاز است که با استفاده از راه دیگری به حل تداخل های به وجود آمده در نام ها پرداخته شود. [ ۲] [ ۱]
نیاز به چنین روشی زمانی به چشم می آید که در یک زبان برنامه نویسی، امکان تعریف موجودیت های مختلف با شناسه ی یکسان فراهم باشد ( تا زمانی که فضای نام یا امضاءهای متفاوتی داشته باشند ) . مثلاً امکان اضافه بار توابع ( به انگلیسی: Function Overloading ) در برخی زبان های برنامه نویسی این اجازه را به برنامه نویس می دهد که برای خوانایی بیشتر برنامه یا راحتی کار خودش، توابع مختلفی با نام یکسان داشته باشد. [ ۱]
هر کد هدفی که توسط کامپایلر تولید شده باشد، معمولاً توسط برنامه ای به نام پیونددهنده به قطعات دیگری از کد هدف ( که ممکن است توسط همین کامپایلر یا کامپایلر دیگری تولید شده باشند ) متصل می شود. پیونددهنده برای این کار نیاز به اطلاعات جامعی از هر موجودیت برنامه دارد. برای مثال برای آن که یک تابع را به درستی به کد اصلی متصل کند، نیاز به نام، تعداد پارامترها و نوع پارامترهایش دارد. [ ۱]
به طور کلی می توان گفت که امروزه تکنیک های دستکاری نام، ۳ هدف اصلی را دنبال می کنند[ ۳] که عبارت اند از:
• کمک به پیونددهنده در تفاوت قائل شدن میان موجودیت هایی از برنامه که نام یکسان ولی عملکرد متفاوتی دارند.
• کمک به پیونددهنده در تشخیص دادن این که توابع و شیءها در تمام ماژول ها به طور یکسانی تعریف شده باشند.
• کمک به پیونددهنده در دادن پیغام خطای مناسب در هنگام مواجهه با تداخل های غیرقابل رفع.
در ابتدا دستکاری نام تنها برای هدف اول ایجاد شد ولی بعدها در کامپایلرها از آن برای اهداف دیگر نیز استفاده شد. به همین دلیل ممکن است برخی کامپایلرها تنها هدف اول را به کمک دستکاری نام انجام دهند و برای انجام دادن دو کار دیگر از روش های دیگری بهره بگیرند. [ ۳]
این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلفاین روش، راهی را برای کدگذاری اطلاعات اضافی در نام یک متغیر، تابع، ساختار، کلاس یا نوع دادهی دیگر ارائه می دهد تا اطلاعات بیشتری از طرف کامپایلرها به پیونددهنده ها منتقل شود تا بتوانند اسامی مشترک را از یکدیگر تمیز دهند. چرا که این ویژگی در زبان های سطح پایین تر ( مثلاً اسمبلیها ) وجود ندارد و نیاز است که با استفاده از راه دیگری به حل تداخل های به وجود آمده در نام ها پرداخته شود. [ ۲] [ ۱]
نیاز به چنین روشی زمانی به چشم می آید که در یک زبان برنامه نویسی، امکان تعریف موجودیت های مختلف با شناسه ی یکسان فراهم باشد ( تا زمانی که فضای نام یا امضاءهای متفاوتی داشته باشند ) . مثلاً امکان اضافه بار توابع ( به انگلیسی: Function Overloading ) در برخی زبان های برنامه نویسی این اجازه را به برنامه نویس می دهد که برای خوانایی بیشتر برنامه یا راحتی کار خودش، توابع مختلفی با نام یکسان داشته باشد. [ ۱]
هر کد هدفی که توسط کامپایلر تولید شده باشد، معمولاً توسط برنامه ای به نام پیونددهنده به قطعات دیگری از کد هدف ( که ممکن است توسط همین کامپایلر یا کامپایلر دیگری تولید شده باشند ) متصل می شود. پیونددهنده برای این کار نیاز به اطلاعات جامعی از هر موجودیت برنامه دارد. برای مثال برای آن که یک تابع را به درستی به کد اصلی متصل کند، نیاز به نام، تعداد پارامترها و نوع پارامترهایش دارد. [ ۱]
به طور کلی می توان گفت که امروزه تکنیک های دستکاری نام، ۳ هدف اصلی را دنبال می کنند[ ۳] که عبارت اند از:
• کمک به پیونددهنده در تفاوت قائل شدن میان موجودیت هایی از برنامه که نام یکسان ولی عملکرد متفاوتی دارند.
• کمک به پیونددهنده در تشخیص دادن این که توابع و شیءها در تمام ماژول ها به طور یکسانی تعریف شده باشند.
• کمک به پیونددهنده در دادن پیغام خطای مناسب در هنگام مواجهه با تداخل های غیرقابل رفع.
در ابتدا دستکاری نام تنها برای هدف اول ایجاد شد ولی بعدها در کامپایلرها از آن برای اهداف دیگر نیز استفاده شد. به همین دلیل ممکن است برخی کامپایلرها تنها هدف اول را به کمک دستکاری نام انجام دهند و برای انجام دادن دو کار دیگر از روش های دیگری بهره بگیرند. [ ۳]

wiki: دستکاری نام