موضوع مقاله: روش هایی برای قابلیت همکاری | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # روش هایی برای قابلیت همکاری | مقدمه: قابلیت همکاری زبان توانایی دو زبان برنامه نویسی مختلف برای تعامل بومی به عنوان بخشی از یک سیستم و عملکرد بر روی یک نوع ساختار داده است. | ## بخش 1: روش هایی برای قابلیت همکاری | روش هایی برای قابلیت همکاری مدل های شی مدل‌های آبجکت مدل‌های استاندارد شده‌ای هستند که به اشیاء اجازه می‌دهند به شیوه‌ای زبان شناسانه نمایش داده شوند، به طوری که می‌توان از همان اشیاء در بین برنامه‌ها و زبان‌ها استفاده کرد. ماشین مجازی (VM) یک زبان میانی تخصصی است که چندین زبان مختلف به آن کامپایل می‌شوند. زبان‌هایی که از یک ماشین مجازی استفاده می‌کنند، می‌توانند با هم کار کنند، زیرا یک مدل حافظه و کامپایلر مشترک دارند و بنابراین کتابخانه‌های یک زبان می‌توانند برای دیگران در همان VM دوباره استفاده شوند. ماشین‌های مجازی می‌توانند سیستم‌های نوع را برای اطمینان از صحت زبان‌های شرکت‌کننده ترکیب کنند و به زبان‌ها زمینه مشترکی برای اطلاعات نوعشان بدهند. استفاده از زبان میانی در حین تالیف یا تفسیر می تواند فرصت های بیشتری برای بهینه سازی فراهم کند. رابط های تابع خارجی رابط های تابع خارجی (FFI) به برنامه های نوشته شده در یک زبان اجازه می دهد تا توابع نوشته شده به زبان دیگر را فراخوانی کنند. غالباً ملاحظاتی وجود دارد که از تلقی توابع خارجی به عنوان توابع نوشته شده در زبان میزبان جلوگیری می کند، مانند تفاوت در انواع و مدل اجرا. | ## بخش 2: روش هایی برای قابلیت همکاری | رابط‌های تابع خارجی ساخت کتابخانه‌های پوششی را قادر می‌سازند که عملکردی را از یک کتابخانه از زبان دیگری در زبان میزبان ارائه می‌دهند، اغلب به سبکی که برای زبان اصطلاحی‌تر است. چالش ها تفاوت مدل شی زبان های شی گرا سعی می کنند محفظه های داده را با کد جفت کنند، اما نحوه انتخاب هر زبان ممکن است کمی متفاوت باشد. به عنوان مثال، کلاس هایی که از وراثت چندگانه از زبانی استفاده می کنند که به آن اجازه می دهد، به خوبی به زبانی که اجازه وراثت چندگانه را نمی دهد، ترجمه نمی شود. یک رویکرد رایج برای این موضوع، تعریف زیرمجموعه ای از یک زبان است که با ویژگی های زبان دیگر سازگار است. این رویکرد به این معنی است که برای اینکه کدی که از ویژگی‌های خارج از زیر مجموعه استفاده می‌کند برای تعامل با یکدیگر، باید برخی از اینترفیس‌های خود را در کلاس‌هایی قرار دهد که برای زیرمجموعه قابل درک باشد. مدل های حافظه تفاوت در نحوه مدیریت عدم تخصیص حافظه توسط زبان های برنامه نویسی یکی دیگر از مسائلی است که در تلاش برای ایجاد قابلیت همکاری است. زبان‌های دارای تخصیص خودکار به خوبی با زبان‌هایی که عدم تخصیص دستی دارند کار نمی‌کنند و زبان‌هایی که تخریب قطعی دارند با زبان‌هایی که تخریب غیر قطعی دارند ناسازگار خواهند بود. | ## بخش 3: روش هایی برای قابلیت همکاری | بر اساس محدودیت های زبان، استراتژی های مختلفی برای پل زدن رفتارهای مختلف وجود دارد. به عنوان مثال: برنامه های C++ که معمولاً از تخصیص دستی استفاده می کنند، می توانند با تغییر رفتار عدم تخصیص برای حذف شیء، اما نه بازیابی حافظه، با یک جمع کننده زباله سبک جاوا تعامل داشته باشند. این امر مستلزم آن است که هر شی باید به صورت دستی تخصیص داده شود تا جمع کننده زباله بتواند حافظه را به طور ایمن آزاد کند. تغییرپذیری تغییرپذیری در هنگام تلاش برای ایجاد قابلیت همکاری بین زبان های کاربردی و رویه ای خالص به یک مسئله تبدیل می شود. زبان‌هایی مانند Haskell هیچ نوع قابل تغییری ندارند، در حالی که C++ چنین تضمین‌های دقیقی را ارائه نمی‌کند. | ## جمع‌بندی | بسیاری از انواع تابعی که به زبان های شی گرا متصل می شوند، نمی توانند تضمین کنند که اشیاء زیربنایی تغییر نخواهند کرد.