SWIG - SWIG

LAMPÉE
Auteur(s) original(aux) David M. Beazley
Développeur(s) Développeurs SWIG
Première version février 1996 ; il y a 25 ans ( 1996-02 )
Version stable
4.0.2 / 8 juin 2020 ; il y a 14 mois ( 2020-06-08 )
Dépôt Modifiez ceci sur Wikidata
Écrit en C , C++
Licence GPLv3
Site Internet rasade .org

Le Simplified Wrapper and Interface Generator ( SWIG ) est un outil logiciel open source utilisé pour connecter des programmes informatiques ou des bibliothèques écrits en C ou C++ avec des langages de script tels que Lua , Perl , PHP , Python , R , Ruby , Tcl et d'autres langages comme C# , Java , JavaScript , Go , D , OCaml , Octave , Scilab et Scheme . La sortie peut également être sous la forme de XML .

Fonction

L'objectif est de permettre l'appel de fonctions natives (qui ont été écrites en C ou C++) par d'autres langages de programmation, en passant des types de données complexes à ces fonctions, en empêchant la mémoire d'être libérée de manière inappropriée, en héritant de classes d'objets à travers les langages, etc. Le programmeur écrit un fichier d'interface contenant une liste de fonctions C/C++ à rendre visible à un interpréteur. SWIG compilera le fichier d'interface et générera le code en C/C++ standard et le langage de programmation cible. SWIG générera du code de conversion pour les fonctions avec des arguments simples ; le code de conversion pour les types complexes d'arguments doit être écrit par le programmeur. L'outil SWIG crée un code source qui fournit le lien entre C/C++ et le langage cible. Selon la langue, cette colle se présente sous deux formes :

  • une bibliothèque partagée à laquelle un interpréteur existant peut se lier en tant que forme de module d'extension, ou
  • une bibliothèque partagée qui peut être liée à d'autres programmes compilés dans le langage cible (par exemple, en utilisant Java Native Interface (JNI) en Java).

SWIG n'est pas utilisé pour appeler des fonctions interprétées par du code natif ; cela doit être fait manuellement par le programmeur.

Exemple

SWIG enveloppe des déclarations C simples en créant une interface qui correspond étroitement à la manière dont les déclarations seraient utilisées dans un programme C. Par exemple, considérons le fichier d'interface suivant :

%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"

Dans ce fichier, il y a deux fonctions sin()et strcmp(), une variable globale Fooet deux constantes STATUSet VERSION. Lorsque SWIG crée un module d'extension, ces déclarations sont accessibles en tant que fonctions de langage de script, variables et constantes respectivement. 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

But

Il y a deux raisons principales pour intégrer un moteur de script dans un programme C/C++ existant :

  • Le programme peut alors être personnalisé beaucoup plus rapidement, via un langage de script au lieu de C/C++ . Le moteur de script peut même être exposé à l'utilisateur final, afin qu'il puisse automatiser les tâches courantes en écrivant des scripts.
  • Même si le produit final ne doit pas contenir le moteur de script, il peut néanmoins être très utile pour écrire des scripts de test.

Il existe plusieurs raisons de créer des bibliothèques dynamiques pouvant être chargées dans des interpréteurs existants, notamment :

  • Donner accès à une bibliothèque C/C++ qui n'a pas d'équivalent dans le langage de script.
  • Écrivez d'abord l'ensemble du programme dans le langage de script, et après le profilage , réécrivez le code critique pour les performances en C ou C++.

Histoire

SWIG est écrit en C et C ++ et a été publiquement disponible depuis Février 1996. L'auteur initial et développeur principal était David M. Beazley qui a développé SWIG tout en travaillant comme un étudiant diplômé au Laboratoire national de Los Alamos et l' Université de l' Utah et pendant la professeur à l' Université de Chicago . Le développement est actuellement soutenu par un groupe actif de bénévoles dirigé par William Fulton. SWIG a été publié sous une licence publique générale GNU .

Google Summer of Code

SWIG a participé avec succès au Google Summer of Code en 2008, 2009, 2012. En 2008, SWIG a obtenu quatre emplacements. Haoyu Bai a passé ses étés sur le backend Python 3.0 de SWIG, Jan Jezabek a travaillé sur le support pour générer des wrappers COM , Cheryl Foil a passé son temps sur Comment 'Translator' pour SWIG et Maciej Drwal a travaillé sur un backend C. En 2009, SWIG a de nouveau participé au Google Summer of Code. Cette fois, quatre étudiants ont participé. Baozeng Ding a travaillé sur un module Scilab . Matevz Jekovec a passé du temps sur les fonctionnalités C++0x . Ashish Sharma a passé son été sur un module Objective-C , Miklos Vajna a passé son temps sur les réalisateurs PHP.

En 2012, SWIG a participé au Google Summer of Code. Cette fois, quatre étudiants sur cinq ont terminé avec succès le projet. Leif Middelschulte a travaillé sur un module en langage cible C. Swati Sharma a amélioré le module Objective-C. Neha Narang a ajouté le nouveau module sur JavaScript. Dmitry Kabak a travaillé sur la documentation du code source et les commentaires de Doxygen .

Alternatives

Pour Python, des fonctionnalités similaires sont proposées par SIP et la bibliothèque Boost.python de Boost .

Projets utilisant SWIG

Voir également

Les références

Lectures complémentaires

Liens externes