blob: a1a998718df59baf4ebda0e1546eb68432848762 [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 and
C++ with scripting languages such as Perl, Python, Ruby, and Tcl. It
works by taking the declarations found in C/C++ header files and using
them to generate the wrapper code that scripting languages need to
access the underlying C/C++ code. In addition, SWIG provides a
variety of customization features that let you tailor the wrapping
process to suit your application.
<p>
John Ousterhout (creator of Tcl) has written a
<a href="http://home.pacbell.net/ouster/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>SWIG is used in a number of ways:
<ul>
<li><p><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 the application. This adds
quite a lot of flexibility and makes the program "programmable." That
is, the scripting interface allows users and developers to easily
modifiy the behavior of the program without having to modify low-level
C/C++ code. The benefits of this are numerous. In fact think of all
of the large software packages that you use every day---nearly all of
them include special a macro language, configuration language, or even
a scripting engine that allows users to make customizations.
<li><p><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/C++ code, it can be used even if the final product does not rely upon scripting.
<li><p><b>Systems integration</b>. Scripting languages work fairly well
for controlling and gluing loosely-coupled 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.
<li><p><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. Of course, you will still want to make
sure that no-one else has already created a module before doing this.
</ul>
SWIG is sometimes compared to interface definition language (IDL)
compilers such as those you 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 add an extra layer of IDL specifications
to your application. If anything, it's much more of a rapid
application development and prototyping tool. Specifically:
<ul>
<li><p><b>ANSI C/C++ syntax</b>. SWIG parses ANSI C++ 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. This particular approach is especially useful when the
underlying C/C++ program undergoes frequent modification.
<li><p><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 client/server code as you do with RPC-like systems.
<li><p><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. Nor is it a specialized runtime library
or alternative scripting language API. SWIG is merely a code generator
that provides the glue necessary to hook C/C++ to other languages.
<li><p><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.
<li><p><b>Extensibility</b>. SWIG provides a variety of customization options that
allow you to blow your whole leg off if that's what you want to do.
SWIG is not here to enforce programming morality.
</ul>
Finally, it is worth noting that even though SWIG is occasionally compared
to other more specialized scripting language extension building tools
(e.g., Perl XS, Python bgen, etc.), its primary audience is C/C++
programmers who want to add a scripting language component to their
applications. Because of this, SWIG tends to have a slightly
different focus than tools designed to build small modules for
widespread use in a scripting language distribution. applications.
<p>
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, or check out how other people are using SWIG
in their <a href="projects.html">projects</a>.
<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 875 people subscribe
to the <a href="mail.html">swig</a> mailing list and a public CVS
repository is available at SourceForge. Versions of
SWIG can now be found in most Linux distributions (however, you'll almost
certainly want to get the latest version here).