blob: b91fc2c210335b14209f32dc63c89b22ca3169d1 [file] [log] [blame]
Executive Summary
<p>
<img src="images/exec.png" alt="Executive Summary">
<p>
SWIG is an interface compiler that connects programs written in C,
C++, and Objective-C with scripting languages including <a href="http://www.perl.org">Perl</a>,
<a href="http://www.python.org">Python</a>, and
<a href="http://www.scriptics.com">Tcl/Tk</a>. It works by taking the declarations commonly found in C/C++ header
files and using them to generate the glue code (wrappers) that scripting
languages need to access the underlying C/C++ code.
<p>
John Ousterhout has written a
<a href="http://www.scriptics.com/people/john.ousterhout/scripting.html">paper</a>
that describes the
benefits of scripting languages. SWIG makes it fairly easy to connect scripting
languages with C/C++ code.
<p>You might use SWIG in a number of ways:
<ul>
<li><b>Building more powerful C/C++ programs</b>. Using SWIG, you can replace the main()
function of a C program with a scripting interpreter from which you can control your
application. This adds quite a lot of flexibility and makes it easier to build
extensible programs. When combined with Tk, you can also build graphical user interfaces.
<p>
<li><b>Rapid prototyping and debugging</b>. SWIG allows C/C++ programs to be placed in
a scripting environment that can be used for testing and debugging.
For example, you might test a library with a collection of scripts or use the scripting
interpreter as an interactive debugger. Since SWIG requires no modifications to the
underlying C code, it can be used even if the final product does not rely upon scripting.
<p>
<li><b>Systems integration</b>. Scripting languages work fairly well for controlling and gluing
software components together. With SWIG, different C/C++ programs can be turned into
scripting language extension modules. These modules can then be combined together
to create new and interesting applications.
<p>
<li><b>Construction of scripting language extension modules</b>. SWIG can
be used to turn common C/C++ libraries into components for use in
popular scripting languages. However, before doing this, you might
want to do a search to see if someone else has already made
such a module.
</ul>
SWIG is sometimes compared to interface definition language (IDL)
compilers such as those you would find with systems such as CORBA and
COM. Although there are a few similarities, the whole point of SWIG
is to make it so you don't have to screw around with that stuff. If
anything, it's much more of a rapid application development and
prototyping tool. Specifically:
<p>
<ul>
<li><b>ANSI C/C++ syntax</b>. SWIG parses a form of ANSI C
syntax that has been extended with a number of special directives.
As a result, interfaces are usually built by grabbing a header file
and tweaking it a little bit.
<p>
<li><b>SWIG is not a stub generator</b>. SWIG produces code that you
simply compile and run. You don't have to fill in any stubs or write
special code as you do with RPC-like systems.
<p>
<li><b>SWIG does not define a protocol nor is it a component
framework.</b> SWIG does not define mechanisms or enforce rules
regarding the way in which software components are supposed to
interact with each other. All it does is provide the glue needed to
hook C code to other languages.
<p>
<li><b>Designed to work with existing C/C++ code</b>. SWIG requires little, if any, modifications
to existing code. For the most part, it encourages you to keep a clean separation between
C/C++ and its scripting interface.
<p>
<li><b>Extensibility</b>. SWIG provides a variety of customization options that
allow you to blow your whole leg off. SWIG does not enforce any rules related to programming
morality.
</ul>
A number of <a href="doc.html">papers and tutorials</a> describing SWIG are available.
You can also view a simple <a href="tutorial.html">tutorial</a> to see an
example of SWIG in action.
<p>
SWIG has been freely available in various forms since February, 1996
and a large number of developers have made contributions. Today, SWIG
remains an all-volunteer effort. Approximately 560 people subscribe
to the SWIG mailing list (swig@cs.uchicago.edu) and a public CVS
repository is available at the University of Chicago.