Jump to content

либффи

либффи
Разработчик(и) Энтони Грин
Первоначальный выпуск 7 октября 1996 г .; 27 лет назад ( 10.10.1996 )
Стабильная версия
3.4.6 [1]  Отредактируйте это в Викиданных / 18 февраля 2024 г .; 5 месяцев назад ( 18 февраля 2024 г. )
Репозиторий
Написано в С , язык ассемблера
Операционная система Unix-подобный , Microsoft Windows , OS X , iOS , «голое железо»
Тип Библиотека времени выполнения
Лицензия МОЯ лицензия [2]
Веб-сайт исходное программное обеспечение .org /libffi /  Edit this on Wikidata

libffi — это библиотека интерфейса внешних функций . Он предоставляет интерфейс языка программирования C для вызова функций, скомпилированных в собственном коде, с учетом информации о целевой функции во время выполнения, а не во время компиляции . Он также реализует противоположную функциональность: libffi может создавать указатель на функцию, которая может принимать и декодировать любую комбинацию аргументов, определенных во время выполнения.

libffi чаще всего используется как связующая технология между скомпилированными и интерпретируемыми языковыми реализациями. libffi также может использоваться для реализации плагинов , где сигнатуры функций плагина неизвестны на момент создания главного приложения.

Известные пользователи включают Python , Haskell , Dalvik , F-Script , PyPy , PyObjC , RubyCocoa , JRuby , Rubinius , MacRuby , gcj , GNU Smalltalk , IcedTea , Cycript , Pawn , Java Native Access , Common Lisp (через CFFI), Racket , [3] Встраиваемый Common Lisp и Mozilla . [4]

В Mac OS X libffi обычно используется с BridgeSupport , который предоставляет нейтральные к языку программирования описания интерфейсов платформы , и Nu , который связывает прямой Objective-C доступ из Lisp .

libffi широко портирована и выпускается под лицензией MIT .

Хотя язык программирования C широко распространен на всех платформах, способы реализации вызовов функций в машинном коде ( соглашение о вызовах ) различаются. Если кто-то хочет динамически загружать подпрограмму во время выполнения, необходимо знание этих соглашений.

libffi знает соглашение о вызовах на многих платформах (комбинациях процессора и ОС). Его C API , который используется во всех сборках libffi независимо от платформы, абстрагируется от сложности загрузки кода на разных платформах. Помимо обычных функций, он также поддерживает вариативные функции в стиле C.

Соглашение о вызовах C используется не только языком C: из-за большого количества существующего кода, написанного на C, большинство новых компилируемых языков также позволяют писать и вызывать функции в таком соглашении. В результате libffi может взаимодействовать и с некоторыми функциями, написанными на этих языках.

libffi, изначально разработанная Энтони Грином, была вдохновлена ​​библиотекой Gencall от Silicon Graphics . Gencall был разработан Джанни Мариани, который тогда работал в SGI , с целью разрешить вызовы функций по адресу и создать фрейм вызова для конкретного соглашения о вызовах ( MIPS O32). Энтони Грин усовершенствовал эту идею и распространил ее на другие архитектуры, соглашения о вызовах и libffi с открытым исходным кодом.

Принятие

[ редактировать ]

Библиотека libffi полезна для построения моста между интерпретируемым и скомпилированным кодом. Некоторые известные пользователи включают:

libffi-d
Привязки к библиотеке libffi для D. В основном используется для MCI (инфраструктура управляемого компилятора).
F-скрипт
Динамически генерирует классы Cocoa, написанные на F-Script.

Коварство

[ редактировать ]
GNU Коварство
libffi используется в Guile 1.9.8 и более поздних версиях.
ГХК
libffi используется для большинства FFI, выполняемых GHC с конца 2009 года.
OpenJDK
Реализация Java Platform Standard Edition с открытым исходным кодом использует libffi для моста между интерпретатором и собственным кодом для порта Zero-Assembly.
Далвик
Dalvik — это виртуальная машина, на которой работает платформа Java на Android мобильных устройствах . libffi используется в портах Android, для которых не был написан специальный код моста.
Собственный доступ к Java (JNA)
Способ вызова машинного кода Java без JNI.
ГКЖ
Библиотека времени выполнения компилятора GNU для языка программирования Java использует libffi для обработки вызовов туда и обратно между интерпретируемым и скомпилированным кодом. gcj был частью GCC, коллекции компиляторов GNU .
АОКакао
Вызовите код Objective-C из javascript в Mac OS X и iPhone (через порт libffi-iphone).
Мозилла
libffi используется в библиотеке js-ctypes (ранее известной как ctypes.jsm) для вызова функций C внутри кода JavaScript (доступно в XULRunner приложениях , расширениях Firefox и т. д.). [5]
узел-ffi
Дополнение Node.js для загрузки и вызова динамических библиотек из JavaScript.
cffi-libffi
Стандартная библиотека интерфейса внешних функций для Common Lisp CFFI включает систему cffi-libffi, включающую поддержку передачи и возврата аргументов структуры по значению.
пикси
pixie ( диалект Lisp, вдохновленный Clojure ) использует libffi в качестве механизма интерфейса внешних функций по умолчанию.
ФФИ::Сырье
Тонкая оболочка вокруг libffi.
FFI::Утконос
Новая, более удобная оболочка libffi.
CPython
По умолчанию, наиболее широко используемая реализация языка программирования Python использует libffi в стандартной библиотеке ctypes.
PyObjC
Вызов кода Objective-C из Python в Mac OS X.
Ракетка
Вызов кода C из этой популярной реализации Scheme.
скрипка
Обертка libffi в стандартной библиотеке Ruby.
Руби-FFI
Расширение интерфейса внешних функций для Ruby.
РубинКакао
Вызов кода Objective-C из Ruby в Mac OS X.
  1. ^ «Выпуск 3.4.6» . 18 февраля 2024 г. Проверено 20 февраля 2024 г.
  2. ^ «Статус» . Гитхаб . 25 апреля 2022 г.
  3. ^ «Архивная копия» (PDF) . Архивировано из оригинала (PDF) 2 сентября 2009 г. Проверено 2 августа 2009 г. {{cite web}}: CS1 maint: архивная копия в заголовке ( ссылка )
  4. ^ «Манифест файлов Mozilla-central @ 2dc00d4b379a» .
  5. ^ https://developer.mozilla.org/en/js-ctypes , ссылка на js-ctypes.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d814c79201e5f6471d9f22bcdd4205a8__1720560240
URL1:https://arc.ask3.ru/arc/aa/d8/a8/d814c79201e5f6471d9f22bcdd4205a8.html
Заголовок, (Title) документа по адресу, URL1:
libffi - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)