SWIG (englanninkielisestä yksinkertaistetusta kääreestä ja käyttöliittymägeneraattorista ) on avoimen lähdekoodin ohjelmistotyökalu , jonka avulla C / C ++: lla kirjoitetut ohjelmistot tai ohjelmistokirjastot voidaan liittää komentosarjakieliin , kuten: Tcl , Perl , Python , Ruby , PHP , Lua tai muihin ohjelmointikielet, kuten Java , C # , Scheme ja OCaml . Lähdöt voidaan tehdä myös XML- tai Lisp S-lausekemuodossa .
Tavoitteena on pystyä kutsumaan natiivifunktioita (kirjoitettu C- tai C ++ -muodoilla) muilla ohjelmointikielillä, välittämään monimutkaisia tietoja näille toiminnoille, suojaamaan muistia sopimattomilta julkaisuilta, perimään esineitä kielien välisistä luokista jne. Ohjelmoija kirjoittaa liitäntätiedoston, joka sisältää luettelon tulkeille näkyvistä C / C ++ -toiminnoista. SWIG kokoaa käyttöliittymätiedoston ja luo koodin C / C ++: lla ja kohdeprogrammi kielellä. SWIG luo muunnoskoodin funktioille yksinkertaisilla argumenteilla; Ohjelmoijan on kirjoitettava monimutkaisia argumentteja sisältävä muuntokoodi. SWIG-työkalu tarjoaa linkin C / C ++: n ja muun kohdekielen välillä. Kielestä riippuen linkki on kahdessa muodossa:
SWIG: tä ei käytetä alkuperäisen koodin tulkitsemien toimintojen kutsumiseen, ohjelmoijan on toteutettava tämä manuaalisesti.
SWIG kääri yksinkertaiset C-ilmoitukset luomalla käyttöliittymän, joka vastaa ilmoitusten käyttöä C-ohjelmassa. Esimerkiksi seuraava käyttöliittymätiedosto:
%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"Tässä tiedostossa on kaksi toimintoa sin() ja strcmp()globaali muuttuja Foosekä kaksi vakiota STATUS ja VERSION. Kun SWIG luo laajennusmoduulin, nämä ilmoitukset ovat käytettävissä komentosarjan funktioina, muuttujina ja vakioina. Pythonissa:
>>> example.sin(3) 0.141120008 >>> example.strcmp('Dave','Mike') -1 >>> print example.cvar.Foo 42 >>> print example.STATUS 50 >>> print example.VERSION 1.1