Libffi - Википедия - libffi
Разработчики) | Энтони Грин |
---|---|
изначальный выпуск | 7 октября 1996 г. |
Стабильный выпуск | 3.3 / 23 ноября 2019 г. |
Репозиторий | |
Написано в | C, язык ассемблера |
Операционная система | Unix-подобный, Майкрософт Виндоус, OS X, iOS, BareMetal OS |
Тип | Библиотека времени исполнения |
Лицензия | Лицензия MIT[1] |
Интернет сайт | исходное ПО |
libffi это интерфейс внешней функции библиотека. Он обеспечивает Язык программирования C интерфейс для вызова скомпилированного в собственном коде функции дана информация о цели функция в время выполнения вместо время компиляции. Он также реализует противоположную функциональность: libffi может создавать указатель на функцию, которая может принимать и декодировать любую комбинацию аргументов, определенных во время выполнения.
libffi чаще всего используется как связующая технология между составлен и интерпретированный языковые реализации. libffi также может использоваться для реализации плагины, где сигнатуры функций плагина неизвестны на момент создания хост-приложения.
Известные пользователи включают Python, Haskell, Дальвик, F-скрипт, PyPy, PyObjC, Рубин какао, JRuby, Рубиниус, MacRuby, gcj, GNU Smalltalk, Чай со льдом, Cycript, Пешка, Писк, Собственный доступ Java, Common Lisp (через CFFI), Ракетка,[2] Встраиваемый Common Lisp и Mozilla.[3]
На Mac OS X, libffi обычно используется с МостПоддержка, который обеспечивает язык программирования нейтральные описания рамки интерфейсы и Nu который связывает прямые Цель-C доступ из Лисп.
libffi широко портирован и выпущен под Лицензия MIT.
История
libffi, изначально разработанный Энтони Грином, был вдохновлен библиотекой Gencall от Силиконовая Графика. Gencall был разработан Джанни Мариани, затем работал в SGI, с целью разрешения вызовов функций по адресу и создания кадра вызова для конкретного соглашения о вызовах. Энтони Грин усовершенствовал идею и распространил ее на другие архитектуры и соглашения о вызовах, а также на libffi с открытым исходным кодом.
Принятие
Библиотека libffi полезна для построения моста между интерпретируемым и скомпилированным в собственном коде кодом. Некоторые известные пользователи включают:
D
F-скрипт
- F-скрипт
- Динамически генерирует классы Какао, написанные на F-Script.
Хитрость
- GNU Guile
- libffi используется в Guile 1.9.8 и новее
Haskell
- GHC
- libffi используется для большинства FFI, выполняемых GHC с конца 2009 года.
Ява
- OpenJDK
- Реализация Java Platform Standard Edition с открытым исходным кодом использует libffi для моста между интерпретатором и собственным кодом для порта Zero-Assembly.
- Собственный доступ Java (JNA)
- Способ вызова машинного кода из Java без использования JNI.
- gcj
- Библиотека времени выполнения для компилятора GNU для языка программирования Java использует libffi для обработки вызовов между интерпретируемым и скомпилированным в собственном коде кодом. gcj является частью GCC, Коллекция компиляторов GNU.
JavaScript
- АО какао
- Вызов кода Objective-C из javascript в Mac OS X и iPhone (через порт libffi-iphone).
Лисп
- cffi-libffi
- Стандартная библиотека интерфейса внешних функций для Common Lisp CFFI включает систему cffi-libffi для поддержки передачи и возврата аргументов структуры по значению.
Perl
- FFI :: Raw
- Тонкая обертка вокруг libffi.
- FFI :: Утконос
- Более новая и удобная оболочка для libffi.
Python
- CPython
- По умолчанию, наиболее широко используемая реализация языка программирования Python использует libffi в стандартной библиотеке ctypes.
- PyObjC
- Вызов кода Objective-C из Python в Mac OS X.
Ракетка
- Ракетка
- Вызов кода C из этой популярной реализации Scheme (также используемой в качестве платформы реализации для нового Lisp Пола Грэма, Arc).
Рубин
- Скрипка
- Оболочка libffi в стандартной библиотеке Ruby
- Рубин-FFI
- Расширение интерфейса внешних функций для Ruby.
- Рубин какао
- Вызов кода Objective-C из Ruby в Mac OS X.