git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@4626 626c5289-ae23-0410-ae9c-e8d60b6d4f22
119 lines
5.4 KiB
Text
119 lines
5.4 KiB
Text
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><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.
|
|
|
|
<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/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 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.
|
|
|
|
<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. 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:
|
|
|
|
<p>
|
|
<ul>
|
|
<li><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.
|
|
|
|
<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 client/server 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. 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.
|
|
|
|
<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 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 SWIG mailing list (swig@cs.uchicago.edu) and a public CVS
|
|
repository is available at the University of Chicago. Versions of
|
|
SWIG can now be found in most Linux distributions (however, you'll almost
|
|
certainly want to get the latest version here).
|
|
|
|
|