در برنامه‌نویسی و طراحی نرم‌افزار، **binding** یک رابط برنامه‌نویسی برنامه (API) است که کد چسب یا **glue code** ای را به‌طور خاص تهیه می‌کند برای اینکه به یک زبان برنامه‌نویسی اجازه دهد تا از یک کتابخانه خارجی یا سرویس سیستم عامل (که به آن زبان آشنایی کامل ندارد) استفاده کند.

مشخصات
------

binding به‌طور کلی به نقشه‌برداری یک چیز به چیز دیگر اشاره دارد. در زمینه کتابخانه‌های نرم‌افزار، bindingها کتابخانه‌های پیچشی (wrapper libraries) هستند که بین دو زبان برنامه‌نویسی پل می‌شوند تا کتابخانه ای که برای یک زبان نوشته شده‌است بتواند برای زبان دیگری استفاده شود. بسیاری از کتابخانه‌های نرم‌افزار به زبان‌های برنامه‌نویسی سیستم مانند C یا C ++ نوشته شده‌اند. برای استفاده از چنین کتابخانه‌هایی از زبان دیگر، معمولاً از سطح بالاتر، مانند جاوا، Common Lisp به، طرح، پایتون، یا لوا، یک اتصال یا binding به کتابخانه باید در آن زبان ایجاد شود، که احتمالاً بسته به مقدار تغییرات مورد نیاز کامپایل مجدد کد زبان نیاز است با این حال، بسیاری از زبان‌ها رابط تابع خارجی (foreign function interface) ارائه می‌دهند، مانند `ctypes` در پایتون و اوکامی و `cffi` و `uffi` در Embeddable Common Lisp

به عنوان مثال، از binding پایتون زمانی استفاده می‌شود که لازم است از یک کتابخانه خارجی C که برای برخی از اهداف نوشته شده‌است برای پایتون استفاده شود. مثال دیگر `libsvn` است که به زبان C نوشته شده‌است تا یک API برای دسترسی به مخزن نرم‌افزار Subversion فراهم کند. برای دسترسی به Subversion از داخل کد جاوا، می‌توان از `libsvnjavahl` استفاده کرد، که به نصب `libsvn` بستگی دارد و به عنوان پلی بین زبان جاوا و `libsvn` عمل می‌کند؛ بنابراین یک API فراهم می‌کند که توابع را از `libsvn` فراخوانی می‌کند.

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

محیط زمان اجرا
--------------

مدل‌های شی
* معماری کارگزار درخواست مشترک اشیا ((CORBA) - مدل زبان از نوع کراس پلت فرم
* مدل شیon کامپوننت (COM) - فقط مدل کراس زبان Microsoft Windows
	+ مدل شی توزیع شده (DCOM) - پسوند COM را قادر می‌سازد تا از طریق شبکه کار کند
	+ Cross Object Model Component Object (XPCOM) - برنامه‌های چند پلتفرمی برنامه‌های Mozilla
* زیرساخت زبان مشترک -. NET Framework - مدل زبانی بین پلتفرمی
* Freedesktop.org D-Bus - مدل زبان -کراس پلت فرم باز

ماشین‌های مجازی
* مقایسه ماشین‌های مجازی کاربردی یا Comparison of application virtual machines

انتقال
------

* شی قابل حمل - تعریف مدل شی object زبانی از طریق پلت فرم

منابع
-----

1. ↑  "Appendix A. Creating a language binding for cairo". Cairographics.org. Retrieved 2014-04-02.
2. ↑  "Standards, APIs, Interfaces and Bindings". Acm.org. Archived from the original on 2015-01-16. Retrieved 2014-04-02.
3. ↑  "ctypes – A foreign function library for Python". *Python v3.8.3 documentation*. Docs.python.org. Retrieved 2020-06-04.
4. ↑  Hickey, Jason; Madhavapeddy, Anil; Minsky, Yaron (2013). "Real Worl OCaml, Chapter 19. Foreign Function Interface". *realworldocaml.org*. Archived from the original on 18 July 2015. Retrieved 2015-07-19.
5. ↑  "Introduction – CFFI User Manual". Common-lisp.net. Retrieved 2014-04-02.
6. ↑  "Subversion JavaHL FAQ". Subclipse.tigris.org. 2013-06-18. Archived from the original on 27 December 2014. Retrieved 2014-04-02.

پیوند به بیرون
--------------

* JTC1 / SC22 / WG11 - تکنیک‌های اتصال، یک استاندارد ISO برای اتصال زبان
* زبان الزام‌آور چیست؟