stringtranslate.com

TRAGO

El generador de interfaces y envoltorios simplificados ( SWIG ) es una herramienta de software de código abierto que se utiliza para conectar programas informáticos o bibliotecas escritos en C o C++ con lenguajes de programación como Lua , Perl , PHP , Python , R , Ruby , Tcl y otras implementaciones de lenguaje como C# , Java , JavaScript , Go , D , OCaml , Octave , Scilab y Scheme . La salida también puede estar en forma de XML .

Función

El objetivo es permitir la llamada de funciones nativas (escritas en C o C++) por parte de otros lenguajes de programación, pasando tipos de datos complejos a esas funciones, evitando que se libere memoria de forma inapropiada, heredando clases de objetos entre lenguajes, etc. El programador escribe un archivo de interfaz que contiene una lista de funciones de C/C++ que se harán visibles para un intérprete. SWIG compilará el archivo de interfaz y generará código en C/C++ normal y en el lenguaje de programación de destino. SWIG generará código de conversión para funciones con argumentos simples; el código de conversión para tipos complejos de argumentos debe ser escrito por el programador. La herramienta SWIG crea código fuente que proporciona el pegamento entre C/C++ y el lenguaje de destino. Dependiendo del lenguaje, este pegamento viene en dos formas:

SWIG no se utiliza para llamar a funciones interpretadas por código nativo; esto debe hacerlo el programador manualmente.

Ejemplo

SWIG envuelve declaraciones C simples creando una interfaz que coincide estrechamente con la forma en que se utilizarían las declaraciones en un programa C. Por ejemplo, considere el siguiente archivo de interfaz: [3]

Ejemplo de %module %inline % { externo double sin ( doble x ); externo int strcmp ( const char * , const char * ); externo int Foo ; % } #define ESTADO 50 #define VERSIÓN "1.1"             

En este archivo, hay dos funciones sin()y strcmp(), una variable global Fooy dos constantes STATUSy VERSION. Cuando SWIG crea un módulo de extensión, estas declaraciones son accesibles como funciones, variables y constantes del lenguaje de programación respectivamente. En Python:

>>> ejemplo . sin ( 3 ) 0.141120008 >>> ejemplo . strcmp ( 'Dave' , 'Mike' ) -1 >>> print ( ejemplo . cvar . foo ) 42 >>> print ( ejemplo . STATUS ) 50 >>> print ( ejemplo . VERSION ) 1.1

Objetivo

Hay dos razones principales para integrar un motor de scripting en un programa C/C++ existente:

Existen varias razones para crear bibliotecas dinámicas que puedan cargarse en intérpretes existentes, entre ellas:

Historia

SWIG está escrito en C y C++ y está disponible públicamente desde febrero de 1996. El autor inicial y desarrollador principal fue David M. Beazley, quien desarrolló SWIG mientras trabajaba como estudiante de posgrado en el Laboratorio Nacional de Los Álamos y la Universidad de Utah y mientras era profesor en la Universidad de Chicago . El desarrollo cuenta actualmente con el apoyo de un grupo activo de voluntarios dirigido por William Fulton. SWIG se ha publicado bajo una Licencia Pública General GNU .

Verano de código de Google

SWIG participó con éxito en Google Summer of Code en 2008, 2009 y 2012. En 2008, SWIG obtuvo cuatro plazas. Haoyu Bai pasó sus veranos en el backend Python 3.0 de SWIG, Jan Jezabek trabajó en el soporte para generar contenedores COM , Cheryl Foil pasó su tiempo en el "traductor" de comentarios para SWIG y Maciej Drwal trabajó en un backend C. En 2009, SWIG volvió a participar en Google Summer of Code. Esta vez participaron cuatro estudiantes. Baozeng Ding trabajó en un módulo de Scilab . Matevz Jekovec pasó su tiempo en las características de C++0x . Ashish Sharma pasó su verano en un módulo de Objective-C , Miklos Vajna pasó su tiempo en directores de PHP.

En 2012, SWIG participó en Google Summer of Code. Esta vez, cuatro de los cinco estudiantes completaron el proyecto con éxito. Leif Middelschulte trabajó en un módulo de lenguaje de destino C. Swati Sharma mejoró el módulo Objective-C. Neha Narang agregó el nuevo módulo sobre JavaScript. Dmitry Kabak trabajó en la documentación del código fuente y los comentarios de Doxygen .

Alternativas

Para Python, SIP , Pybind11 y la biblioteca Boost.python de Boost ofrecen una funcionalidad similar .

Proyectos que utilizan SWIG

Véase también

Referencias

  1. ^ "Historia de SWIG".
  2. ^ "Versión v4.2.1".
  3. ^ "Conceptos básicos de SWIG".
  4. ^ Müller, Marcus. "Registro de cambios de GNU Radio 3.9.0.0". GitHub .

Lectura adicional

Enlaces externos