You can edit almost every page by Creating an account. Otherwise, see the FAQ.

خرد کردن نام

از EverybodyWiki Bios & Wiki
پرش به:ناوبری، جستجو

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

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

نیاز به چنین روشی زمانی به چشم می‌آید که در زبان برنامه‌نویسی،‌ امکان تعریف موجودیت‌های مختلف با شناسه‌ی یکسان تا زمانی که فضای نام و یا امضاء‌های متفاوتی دارند (مانند بار اضافی توابع) فراهم باشد.

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

مثال ها[ویرایش]

C[ویرایش]

با وجود این که خرد‌ کردن نام معمولا در زبان‌هایی که از بار اضافی توابع پشتیبانی نمی‌کنند (مانند C و calssic Pascal) نیاز نمی‌شود، از آن‌ها در برخی کاربردها برای ارائه‌ی اطلاعات بیشتر در مورد توابع استفاده می‌شود. به عنوان مثال کامپایلر‌هایی که هدفشان اجرا شدن برنامه در پلتفرم‌های مایکروسافت ویندوز است، از قرارداد‌های فراخوانی مختلفی پشتیبانی می‌کنند که شیوه‌ی ارسال پارامتر‌ها به زیرروال‌ها و دریافت نتایج برگردانده شده را مشخص می‌کنند. از آنجا که این قراردادهای فراخوانی با هم سازگاری ندارند، کامپایلر‌ها از خرد کردن استفاده می‌‌کنند تا بفهمند برای صدا کردن یک زیرروال از کدام قرارداد باید استفاده شود.

روش خرد کردن توسط مایکروسافت ایجاد شد و پس از آن به صورت غیر رسمی توسط کامپایلر‌های دیگری مانند Digital Mars، Borland و GNU GCC در هنگام کامپایل کردن کد برای پلتفرم‌های ویندوز استفاده شد. حتی بعدها در زبان‌های دیگری مانند Pascal، D، Delphi، Fortran و C# به کار رفت. این موضوع به زیرروال‌های نوشته شده در زبان‌های مذکور این امکان را می‌دهد که توسط کتابخانه‌های ویندوز و با استفاده از قرارداد فراخوانی متفاوتی نسبت به پیش‌فرض خودشان صدا زده شوند.

هنگام کامپایل کردن مثال‌های زیر که به زبان C هستند:

int _cdecl  f (int x) { return 0; }
int _stdcall g (int y) { return 0; }
int _fastcall h (int z) { return 0; }

کامپایلرهای 32 بیتی به ترتیب موارد زیر را خروجی می‌دهند:

_f
_g@4
@h@4

در

​stdcall​

و

​fastcall​

که روش‌هایی برای خرد‌ کردن نام هستند، به ترتیب تابع به صورت _name@X و @name@X رمز‌گذاری می‌شود که X تعداد‌ بایت‌های ورودی‌(ها) در لیست پارامتر‌ها (شامل آن‌هایی که در

​fastcall​

در ثبات‌‌ها پاس داده می‌شوند)‌ در مبنای ۱۰ است. در حالت

​cdecl​

صرفا یک زیرین‌خط ابتدای اسم تابع قرار می‌دهیم.

قرارداد ۶۴ بیتی در ویندوز، در ابتدای اسم زیرین‌خط ندارد. این تفاوت باعث می‌شود که در برخی مواقع خاص در هنگام تبدیل کردن کد به نسخه‌ی ۶۴ بیتی، تعدادی ارجاع حل نشده باقی بماند.

C++[ویرایش]

همچنین ببینید[ویرایش]

منابع[ویرایش]

لینک های خارجی[ویرایش]


This article "خرد کردن نام" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:خرد کردن نام. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.



Read or create/edit this page in another language[ویرایش]