Хотя я более или менее понимаю, что такое языковая привязка, я изо всех сил пытаюсь понять, как они работают. Может ли кто-нибудь объяснить, как сделать привязку Java для WinAPI, например?
Как вы привязываете язык?
Ответ 1
Вы найдете гораздо лучшие результаты, если будете искать Интерфейс внешних функций или FFI. FFI - это то, что позволяет вам называть функции, написанные на другом языке, то есть в иностранных. Различные языки и время автономной работы имеют совершенно разные FFI, и вам придется изучать каждый из них по отдельности. Изучение FFI также заставляет вас знать немного больше о внутренних языках вашего языка и его времени исполнения, чем обычно используется. Некоторые FFI заставляют вас писать код на целевом языке, например Haskell (где код FFI должен быть написан в Haskell), а другие заставляют вас писать код на исходном языке, например Python (где код FFI должен быть написан на C).
Некоторые языки не используют термин FFI (хотя было бы неплохо, если бы они это сделали). Для Java он называется Java Native Interface, или JNI.
Ответ 2
Языки (обычно) имеют синтаксис для вызова "родного" кода. Поэтому, если у вас есть библиотека, которая экспортирует метод foo()
, создание ставки означает, что вы создадите в своем примере Java-класс с методом foo()
. Таким образом, вы можете вызывать MyBinding.foo()
из остальной части кода, не имеет значения, был ли он чистым Java-методом или скомпилированным C-кодом.
Снова для Java вы, вероятно, захотите посмотреть JNI документацию. Другие языки имеют схожие механизмы. Существуют такие инструменты, как SIP, которые будут содержать кучу файлов заголовков C (++) и создавать для него привязки Python. Я думаю, что другие языки могут иметь похожие инструменты.