Введение

Библиотека программного обеспечения, позволяющая использовать другую библиотеку, написанную на другом языке программирования.

В программировании и разработке программного обеспечения, привязка (binding) — это интерфейс прикладного программирования (API), предоставляющий вспомогательный код, специально разработанный для того, чтобы язык программирования мог использовать стороннюю библиотеку или службу операционной системы (не предназначенную для этого языка).

Характеристики

Связывание обычно относится к сопоставлению одной вещи с другой. В контексте программных библиотек, связывания – это оберточные библиотеки, которые обеспечивают взаимодействие между двумя языками программирования, позволяя использовать библиотеку, написанную для одного языка, в другом. Многие программные библиотеки написаны на системных языках программирования, таких как C или C++. Чтобы использовать такие библиотеки из другого языка, как правило, более высокого уровня, например Java, Common Lisp, Scheme, Python или Lua, необходимо создать связывание для этой библиотеки на целевом языке, что в некоторых случаях может потребовать перекомпиляции кода, в зависимости от объема необходимых изменений. Однако большинство языков предоставляют интерфейс для работы с функциями, написанными на других языках, такие как ctypes в Python и OCaml, а также cffi и uffi в Embeddable Common Lisp. Например, связывания для Python используются, когда существующая библиотека на C, разработанная для определенной цели, должна быть использована в Python. Другой пример – libsvn, написанная на C для предоставления API для доступа к репозиторию программного обеспечения Subversion. Для доступа к Subversion из кода Java можно использовать libsvnjavahl, которая требует установленной libsvn и выступает в качестве моста между языком Java и libsvn, предоставляя API, который вызывает функции libsvn для выполнения операций. Основные причины создания связываний библиотек включают повторное использование программного обеспечения, снижение необходимости повторной реализации библиотеки на нескольких языках и сложность эффективной реализации некоторых алгоритмов на языках высокого уровня.