Интерфейс внешних функций
Интерфейс внешних функций (англ. Foreign Function Interface, FFI) — это механизм, с помощью которого программа, написанная на одном языке программирования, может вызывать подпрограммы или использовать услуги, написанные или скомпилированные на другом языке. FFI часто используется в контекстах, где производятся вызовы из бинарной динамическую библиотеку.
Термин происходит из спецификации для Common Lisp, которая явно ссылается на функцию языка программирования, позволяющую производить вызовы между языками как таковую[источник не указан 24 дня]; этот термин также часто официально используется в документации интерпретатора и компилятора Haskell[1], Rust[2], Python, OCaml[3] и LuaJIT (Lua)[4]. Другие языки используют другую терминологию: в документации по языку программирования Ада говорится о «привязках к языку», в то время как Java называет свой интерфейс Java Native Interface или Java Native Access (JNA)ruen. Интерфейс внешней функции стал общим термином для механизмов, предоставляющих такие услуги.
Связывание одного программного языка с другим является непростой задачей. Язык, для которого создаётся интерфейс к другому языку, должен разбираться в соглашениях вызова, системе типов, структурах данных, механизмах выделения памяти и методов линковки языка-цели для корректной работы. Требуется тщательно согласовать семантику обоих языков, чтобы они могли корректно понимать передаваемые между ними данные.[5]
Кроме того, добавление FFI к типобезопасному языку потенциально расширяет набор операций, которые могут нарушить безопасность тонкими и сложными для обнаружения способами.[6]
ПримечанияПравить
- ↑ FFI Introduction (неопр.). HaskellWiki. Дата обращения: 19 июня 2015.
- ↑ std::ffi - Rust (неопр.). Дата обращения: 1 апреля 2021.
- ↑ Foreign Function Interface (неопр.). OCamlverse.
- ↑ Heintz, Joachim. Ways Ahead : Proceedings of the First International Csound Conference.. — Newcastle upon Tyne : Cambridge Scholars Publishing, 2013. — ISBN 978-1-4438-5122-0.
- ↑ Real World Haskell, 2008.
- ↑ Furr, Michael; Foster, Jeffrey S. (2005). “Checking type safety of foreign function calls”. SIGPLAN Not. Association for Computing Machinery. 40 (6): 62—72. DOI:10.1145/1064978.1065019. ISSN 0362-1340.
ЛитератураПравить
- Bryan O'Sullivan, John Goerzen, Donald Bruce Stewart. Chapter 17. Interfacing with C: The FFI // Real World Haskell (англ.). — O'Reilly Media, Inc., 2008. — ISBN 9780596514983.