stringtranslate.com

libfi

libffi es una biblioteca de interfaz de funciones externas . Proporciona una interfaz de lenguaje de programación C para llamar a funciones compiladas de forma nativa , dada información sobre la función de destino en tiempo de ejecución en lugar de en tiempo de compilación . También implementa la funcionalidad opuesta: libffi puede producir un puntero a una función que puede aceptar y decodificar cualquier combinación de argumentos definidos en tiempo de ejecución.

libffi se utiliza con mayor frecuencia como tecnología puente entre implementaciones de lenguajes compilados e interpretados . libffi también se puede utilizar para implementar complementos , donde las firmas de funciones del complemento no se conocen en el momento de crear la aplicación host.

Los usuarios notables incluyen Python , Haskell , Dalvik , F-Script, PyPy , PyObjC , RubyCocoa , JRuby , Rubinius , MacRuby , gcj , GNU Smalltalk , IcedTea , Cycript, Pawn, Java Native Access , Common Lisp (a través de CFFI), Racket , [ 3] Common Lisp y Mozilla integrables . [4]

En Mac OS X , libffi se usa comúnmente con BridgeSupport, que proporciona descripciones neutrales del lenguaje de programación de las interfaces del marco , y Nu , que vincula el acceso directo a Objective-C desde Lisp .

libffi ha sido ampliamente adaptado y se publica bajo una licencia MIT .

Fondo

Aunque el lenguaje de programación C es omnipresente entre las plataformas, las formas en que se implementan las llamadas a funciones en el código de máquina (la convención de llamadas ) varían. Cuando se quiere cargar una subrutina dinámicamente en tiempo de ejecución, se requiere conocimiento de estas convenciones.

libffi tiene conocimiento de la convención de llamada en muchas plataformas (combinaciones de procesador y sistema operativo). Su API C , que se comparte en todas las compilaciones de libffi independientemente de la plataforma, abstrae la complejidad de cargar código en diferentes plataformas. Además de las funciones regulares, también admite funciones variadas de estilo C.

La convención de llamada de C no solo la utiliza el lenguaje C: debido a la cantidad de código existente escrito en C, la mayoría de los lenguajes compilados más nuevos también permiten escribir y llamar funciones en dicha convención. Como resultado, libffi también puede interactuar con algunas funciones escritas en estos lenguajes.

Historia

libffi, desarrollado originalmente por Anthony Green, se inspiró en la biblioteca Gencall de Silicon Graphics . Gencall fue desarrollado por Gianni Mariani, entonces empleado de SGI , con el propósito de permitir llamadas a funciones por dirección y crear un marco de llamada para la convención de llamada particular ( MIPS O32). Anthony Green refinó la idea y la extendió a otras arquitecturas y llamó a convenciones y código abierto libffi.

Adopción

La biblioteca libffi es útil para construir un puente entre el código interpretado y el compilado de forma nativa. Algunos usuarios notables incluyen:

D

libffi-d
Enlaces a la biblioteca libffi para D. Se utiliza principalmente para MCI (Infraestructura de compilador administrada).

Guión F

Guión F
Genera dinámicamente clases Cocoa escritas en F-Script.

Engaño

GNU astucia
libffi se usa en Guile 1.9.8 y posteriores

Haskell

GHC
libffi se ha utilizado para la mayoría de las FFI realizadas por GHC desde finales de 2009.

Java

AbiertoJDK
La implementación de código abierto de Java Platform Standard Edition utiliza libffi como puente entre el intérprete y el código nativo para el puerto Zero-Assembly.
Dalvík
Dalvik es la máquina virtual que ejecuta la plataforma Java en dispositivos móviles Android . libffi se utiliza en puertos de Android para los que no se ha escrito ningún código de puente personalizado.
Acceso nativo de Java (JNA)
La forma sin JNI de llamar código nativo desde Java.
gcj
La biblioteca de tiempo de ejecución del compilador GNU para el lenguaje de programación Java utiliza libffi para manejar llamadas de ida y vuelta entre código interpretado y compilado de forma nativa. gcj era parte de GCC, la Colección de Compiladores GNU .

javascript

JSCocoa
Llame al código Objective-C desde javascript en Mac OS X y iPhone (a través del puerto libffi-iphone).
Mozilla
libffi se usa en la biblioteca js-ctypes (anteriormente conocida como ctypes.jsm) para llamar funciones C dentro del código JavaScript (disponible en aplicaciones XULRunner , extensiones de Firefox , etc.). [5]
nodo-ffi
Un complemento de Node.js para cargar y llamar bibliotecas dinámicas desde JavaScript.

Ceceo

cffi-libffi
La biblioteca de interfaz de función externa estándar para Common Lisp CFFI incluye el sistema cffi-libffi para incluir soporte para pasar y devolver argumentos de estructura por valor.
duendecito
pixie (un dialecto Lisp inspirado en Clojure ) utiliza libffi como mecanismo de interfaz de función externa predeterminado.

perla

FFI::Crudo
Una fina envoltura alrededor de libffi.
FFI::Ornitorrinco
Envoltorio más nuevo y conveniente para libffi.

Pitón

CPython
La implementación predeterminada y más utilizada del lenguaje de programación Python utiliza libffi en la biblioteca estándar ctypes.
PyObjC
Llame al código Objective-C desde Python en Mac OS X.

Raqueta

Raqueta
Llame al código C desde esta popular implementación de Scheme.

Rubí

Violín
Un contenedor libffi en la biblioteca estándar de Ruby
Ruby-FFI
Una extensión de interfaz de función externa para Ruby.
rubícacao
Llame al código Objective-C desde Ruby en Mac OS X.

Referencias

  1. ^ "Versión 3.4.6". 18 de febrero de 2024 . Consultado el 20 de febrero de 2024 .
  2. ^ "Estado". GitHub . 25 de abril de 2022.
  3. ^ "Copia archivada" (PDF) . Archivado desde el original (PDF) el 2 de septiembre de 2009 . Consultado el 2 de agosto de 2009 .{{cite web}}: Mantenimiento CS1: copia archivada como título ( enlace )
  4. ^ "Manifiesto de archivos Mozilla-central @ 2dc00d4b379a".
  5. ^ https://developer.mozilla.org/en/js-ctypes, referencia de js-ctypes

enlaces externos