SWIG - SWIG

TRAGO
Autor (es) original (es) David M. Beazley
Desarrollador (es) Desarrolladores SWIG
Versión inicial Febrero de 1996 ; Hace 25 años ( 1996-02 )
Lanzamiento estable
4.0.2 / 8 de junio de 2020 ; Hace 14 meses ( 08-06-2020 )
Repositorio Edita esto en Wikidata
Escrito en C , C ++
Licencia GPLv3
Sitio web trago .org

El Simplified Wrapper and Interface Generator ( SWIG ) es una herramienta de software de código abierto que se utiliza para conectar programas de computadora o bibliotecas escritas en C o C ++ con lenguajes de scripting como Lua , Perl , PHP , Python , R , Ruby , Tcl y otros lenguajes. 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 (que fueron escritas en C o C ++) por otros lenguajes de programación, pasando tipos de datos complejos a esas funciones, evitando que la memoria se libere de manera inapropiada, heredando clases de objetos entre lenguajes, etc. El programador escribe un archivo de interfaz que contiene una lista de funciones C / C ++ para que un intérprete pueda verlas. SWIG compilará el archivo de interfaz y generará código en C / C ++ normal y el lenguaje de programación de destino. SWIG generará código de conversión para funciones con argumentos simples; El programador debe escribir el código de conversión para tipos complejos de argumentos. La herramienta SWIG crea código fuente que proporciona el enlace entre C / C ++ y el idioma de destino. Dependiendo del idioma, este pegamento se presenta en dos formas:

  • una biblioteca compartida a la que un intérprete existente puede vincularse como algún tipo de módulo de extensión, o
  • una biblioteca compartida que se puede vincular a otros programas compilados en el idioma de destino (por ejemplo, utilizando Java Native Interface (JNI) en Java).

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

Ejemplo

SWIG envuelve declaraciones simples de C creando una interfaz que se asemeja mucho a la forma en que las declaraciones se usarían en un programa C. Por ejemplo, considere el siguiente archivo de interfaz:

%module example

%inline %{
extern double sin(double x);
extern int strcmp(const char *, const char *);
extern int Foo;
%}
#define STATUS 50
#define VERSION "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:

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

Objetivo

Hay dos razones principales para incrustar un motor de secuencias de comandos en un programa C / C ++ existente:

  • Luego, el programa se puede personalizar mucho más rápido, a través de un lenguaje de secuencias de comandos en lugar de C / C ++ . El motor de secuencias de comandos puede incluso exponerse al usuario final, para que puedan automatizar tareas comunes escribiendo secuencias de comandos.
  • Incluso si el producto final no debe contener el motor de secuencias de comandos, puede ser muy útil para escribir secuencias de comandos de prueba.

Hay varias razones para crear bibliotecas dinámicas que se pueden cargar en los intérpretes existentes, que incluyen:

  • Proporcione acceso a una biblioteca C / C ++ que no tiene equivalente en el lenguaje de programación.
  • Primero escriba todo el programa en el lenguaje de secuencias de comandos y, después de la creación de perfiles , vuelva a escribir el código crítico para el rendimiento en C o C ++.

Historia

SWIG está escrito en C y C ++ y ha estado disponible públicamente desde febrero de 1996. El autor inicial y desarrollador principal fue David M. Beazley, quien desarrolló SWIG mientras trabajaba como estudiante graduado en el Laboratorio Nacional de Los Alamos y la Universidad de Utah y mientras estaba en el facultad de la Universidad de Chicago . Actualmente, el desarrollo cuenta con el apoyo de un grupo activo de voluntarios dirigido por William Fulton. SWIG ha sido lanzado bajo una Licencia Pública General GNU .

Verano de código de Google

SWIG fue un participante exitoso de Google Summer of Code en 2008, 2009, 2012. En 2008, SWIG obtuvo cuatro espacios. Haoyu Bai pasó sus veranos en Python 3.0 Backend de SWIG, Jan Jezabek trabajó en Soporte para generar envoltorios COM , Cheryl Foil pasó su tiempo en Comment 'Translator' 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 Scilab . Matevz Jekovec dedicó tiempo a las funciones de C ++ 0x . Ashish Sharma pasó su verano en un módulo de Objective-C , Miklos Vajna dedicó su tiempo a los directores de PHP.

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

Alternativas

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

Proyectos que utilizan SWIG

Ver también

Referencias

Otras lecturas

enlaces externos