SWIG-1.3.12, SWIG 2.0, and Beyond
=================================

With the release of SWIG-1.3.12, I thought I'd take a few moments of
everyone's time to talk about the past, the present, and the future of
SWIG development.  I'm really quite excited about the current release
because I think it represents a huge turning point in SWIG's
development.  Furthermore, it is only the beginning of bigger and
better things to come.  However, we definitely need your help.

To put a little perspective on the discussion, I'd start with a few
development statistics.  In the last 12 months, there have been over
300 entries added to the CHANGES log and over 4000 CVS commits.
Although that may not sound like a lot compared to a huge software
project, it is significant in the context of SWIG.  As a point of
comparison, there has been more SWIG development this year than in any
other year of the project and more than in the previous three years
combined.  This even includes the first few years of development in
which there was also a lot of activity.  Furthermore, many of the
recent changes have been extremely non-trivial (e.g., templates,
namespaces, type system, operators, etc.).  As a result, SWIG is more
capable than I ever imagined possible.

Regrettably, I must admit that I've been a little negligent in
discussing the roadmap for where I thought this flurry of SWIG
development was actually headed.  In part, this is because I've been
buried in work.  However, the real reason is that I didn't really know
where we were going---except that in a time far far far away in the
future, we might arrive at some kind of "stable" release with a
version number other than "1.3.x".  Needless to say, that's not a very
compelling story.

That said, I've spent a lot of time thinking about SWIG and trying to
wrap my brain around it.  Specifically, just what is (or should be)
the primary focus of this project and what are we really trying to do?
That's what the rest of this message is about.

SWIG Prehistory 
---------------
The first version of SWIG was written in 1995.  The original system
was developed to help with some software wrapping problems I
encountered while writing molecular dynamics software at Los
Alamos. Later that year, I became interested in extending the wrapper
generator to support other scripting languages so it was rewritten in
C++ and modified with multiple backends (Tcl, Perl, and Guile).  This
led to a first public release in February, 1996.  Feedback from this
release led to a series of enhancements and the release of SWIG 1.0 in
September 1996.  Throughout this process, my intent was to create a
tool that I would want to use---I never viewed the project as an
CS experiment in programming languages or software engineering.

SWIG 1.1
--------
SWIG-1.1 (June, 1997) represented a series of enhancements that were
added in response to feedback at conferences and from users.  Shadow
classes, exception handling, typemaps, and a number of more useful
features were added.  However, the overall structure of the system was
relatively unchanged from the initial version.  Following the release
of 1.1, a series of minor patch releases were made.  This resulted in
the release of SWIG-1.1p5 in February, 1998.  Unfortunately, this
release would remain the last "stable" release for quite a long
time---in fact, it is still listed as the last "stable" release on the
SWIG web page!

SWIG Hell
---------
Even during the development of SWIG-1.1, it was clear that the whole
design of the system was deeply flawed.  The implementation was a mess
and the C/C++ support was full of holes and nasty corner cases.
Furthermore, there was no unifying principle that tied all of the
different SWIG directives together.  Not only that, fixing these
problems appeared to be nothing short of impossible---requiring a
total ground-up rewrite at best.  The only redeeming quality was that
the system basically worked "well enough," it was extensively
documented, and its flaws mostly known.  People could use it and there
were work-arounds for most common problems.

To deal with the design problem, there were at least four attempts to
completely rewrite SWIG, some of which were attempted in parallel with
the work on SWIG-1.1.  Unfortunately, none of these were ever
completed. The primary problem was a strong "second system" effect and
a desire to make SWIG do everything that one might conceivably want to
do with a wrapper generator (somehow).  Clearly, this was a recipe for
disaster. In fact, all such attempts to rewrite SWIG were eventually
abandoned several years ago.  In hindsight, I think the real problem
was that these rewrite efforts focused far too much attention on
implementation technique rather than principles.  In short, the
failure of these efforts was due to a lack of clarity in understanding
how SWIG ought to work (regardless of how it was actually
implemented).

SWIG Restart (1.3a1-1.3a5)
--------------------------
Having languished for several years, the SWIG1.1p5 release had a
growing pile of maintenance issues. It didn't work for newer versions
of certain language modules and a lot of minor bug reports and feature
requests had been building up.  With a lot of help from Loic Dachary and
Thien-Thi Nguyen, we put together the 1.3a1 release (February,
2000).  This was mostly a bug fix release to 1.1p5 except that the
preprocessor module from SWIG1.2 was added and a lot of minor
enhancements were added.

For the next six months, a massive effort was made to rewrite all of
SWIG's internal data structures (strings, lists, hashes, etc.).  This
work was all going on underneath the covers while we tried to keep
SWIG in an operational state. The primary focus of this work was
really one of cleanup.  Having given up on a total rewrite, perhaps
we could settle with making the implementation incrementally better 
than before.  In addition this, Matthias Koppe jumped on board to 
reimplement the Guile module and to make other improvements to the system.

An important aspect of these releases was that many parts of the
system not directly related to wrapper code generation were removed.
This included the documentation system and Objective-C support.  These
were not removed because they weren't useful.  Instead, the
documentation system was removed because it accounted for nearly half
of the special SWIG directives, yet had no direct bearing on what SWIG
actually did.  Obective-C support was removed because it was tangled
with C++ support in a way that was very difficult to understand and
maintain.  The removal of these features was seen as a way to vastly
simplify cleanup--and to buy some time where we could rethink their
role in a future release.

SWIG Redux (1.3.6-1.3.11)
-------------------------
This work, started in February 2001, is the beginning of the current
SWIG implementation.  With the help of William Fulton, Matthias Koppe,
Lyle Johnson, Luigi Ballabio, Jason Stewart, Richard Palmer, Sam
Liddicot, and others, this work can best be described as the wholesale
destruction of everything remaining from SWIG-1.1.  The language
module API, type system, the parser, numerous SWIG directives, and
SWIG library files---all destroyed or rewritten.  Not only that, we
started introducing significant incompatibilities with
SWIG-1.1---mostly in an effort to correct past wrongs and get
ourselves out of the tangled mess of earlier versions.  A huge number
of long-standing bugs and difficult feature requests have also been
resolved.

The general goal of this development could best be described as an
attempt to reduce SWIG to an easily described set of general "ideas"
about how it should operate.  Special SWIG directives have been
eliminated or combined with others.  Different parts of the system have
been better integrated.  Features not directly related to wrapper code
generation have been removed and the system has become more
focused. Changes in internal data structures and APIs have allowed
SWIG to capture more information from interface files and to resolve
hard corner cases.  More often than not, these are things that you
never notice unless you are an old user and you suddenly realize that
a problem you had several years back has disappeared.

Along with the destruction of old code, this work has quietly
introduced a new core--the most significant features of which are a
new C++ type system and multi-pass compilation.  More importantly,
this work has really tried to provide a more principled foundation for
future SWIG development.  However, just what is this "more principled
foundation?"

Convergence (1.3.12)
--------------------
With the upcoming 1.3.12 release, SWIG is about to take a big leap
forward. Almost all of this is due to one realization---that almost
every hard problem in past SWIG releases has been directly related to
errors and limitations in its type system.  Types are the key to
understanding the structure of C and C++ code.  They are at the heart
of understanding advanced language features like namespaces, nested
classes, and templates.  They are directly related to the data
marshalling that occurs in wrappers.  Not only that, they interact
with nearly every SWIG directive.  A proper type system *is* the
necessary foundation for moving SWIG forward.

To be honest, I don't think that the emphasis on types is entirely
obvious.  In fact, a great deal of work in past SWIG rewrites has
focused on the problem of C++ parsing.  For instance, modifying the
parser to handle more advanced C++ code or representing parse trees as
XML.  Furthermore, if one looks at the SWIG mailing list, you can find
a *lot* of messages related to issues of C++ parsing whereas almost no
one ever talks about types (well, other than typemaps).  Even other
wrapper generation tools seems to spend a lot of time dealing with the
parsing issue. Although parsing is clearly important, I don't think it
has ever been the real problem in SWIG.  This is because even though a
parser can tell you what's in a header file, it doesn't tell you
anything about how the different pieces of the system behave or how
they might interact. To do that, you need to do a lot more than just
parsing--and that's really the whole point.
 
Although earlier 1.3 releases have made big improvements to the type
system, SWIG-1.3.12 is the first release that really tries to tackle
the type-system issue in a major way.  We have patched nearly all
remaining holes in the type system and we have added full support for
C++ namespaces. Not only that, we have completely reimplemented C++
template support in a way that supports templates, member templates,
and template specialization.  Luigi and I are currently using this to
work on proper SWIG library support for parts of the C++ standard
library and the Standard Template Library (STL).  Although some crusty
C programmers (present company excepted), might balk at such apparent
insanity, this work has impacted all parts of SWIG at all levels.
Even a variety of subtle errors in C support have been fixed by this
work.

In addition to the type system work, SWIG-1.3.12 contains continued
reduction in the implementation. Directives have been removed,
refined, renamed, or consolidated.  We're still narrowing the focus of
the system and working towards some kind of convergence.  "Convergence
to what?!?", you ask.

So, what is SWIG?
-----------------
In a nutshell, SWIG is a C/C++ declaration compiler that generates
wrapper code (okay, so you knew that much).  However, to really
understand what SWIG is doing and where SWIG-1.3.x is headed, it is
useful to know that the whole system is essentially being built around
three extensions to the C++ type system:

   -  Typemaps.  Typemaps are rules that define the process by which
      data is converted between languages.   They are fully integrated
      with the C++ type system and they are applied using a type-based
      pattern matching mechanism.  All data conversion SWIG is
      defined by typemaps and is fully reconfigurable.

   -  Declaration annotation. There are special directives that modify
      the wrapping behavior of individual declarations. Declarations
      can be selectively identified and decorated with arbitrary
      attributes that affect wrapper generation.  Like typemaps, 
      declaration matching is fully integrated with the C++ type system. 
      Almost all SWIG customization directives are a form of declaration 
      annotation.   

   -  Class extension.  The ability to extend classes and structures
      with new methods/attributes when building wrappers.  Classes
      are part of the type system so class extension is naturally 
      integrated with the C++ type system as well (big surprise).

And that's it--this is the end-game of SWIG-1.3.x development.  When
stabilized and documented it will become SWIG-2.0.

The Bigger Picture
------------------
I really want to emphasize that all of this work is part of a much
bigger picture.  SWIG is used by a surprising number of people in
industry, government, and academia.  It's used to build systems used
by millions of people every day.  It has even shown up in video games
and other unlikely settings.  Although SWIG doesn't have the same
visibility as many large software projects, over 12000 people have
downloaded SWIG-1.3.11 in the last 4 months.  Clearly someone is using
it for something!  Because of this, I think it is important for us to
work on moving SWIG towards a more solid foundation.  Doing so will
give the system more credibility and long term viability---and it will
be a lot more fun to use!

It's also worth noting that there are some rather interesting CS
connections at work here.  Extensions to the type system and typemaps
have some interesting relations to work in programming languages.  The
SWIG declaration annotation system and class extension feature seem
oddly similar to work in the emerging area of Aspect Oriented
Programming (AOP).  There are undoubtedly connections to other areas
of software engineering and architecture.

The key point is that SWIG isn't going to connect to anything if
no-one can quite describe what it is or how it works.

SWIG-2.0 and the Future
-----------------------
SWIG-1.3.12 still represents work in progress. There are bugs, the
documentation is still incomplete, and there are parts of the
implementation that are rather ugly.  We are also still working out a
few very hard problems like nested classes, callback functions, and
overloading.  A few old features are still missing (Objective-C,
documentation).  However, I believe the end of the 1.3.x series is
near and achievable.

Over the summer, a few more 1.3.x releases may appear but the current
plan is to aim for a SWIG-2.0 release in September.  This release is
really moving towards the design principles described above and will
be a very major enhancement over SWIG-1.1.

As for the future, a number of interesting ideas are on the table.  I
want to add support for contracts/assertions in order to solve some
reliability issues that arise when retrofitting legacy codes with a
scripting interface.  Support for an extension language has been
promoted by David Fletcher and was suggested by someone else on the
mailing list rather recently.  I have a graduate student working on
SWIG support for the Microsoft CLR and .NET languages.  Other work
might include support for alternative parsers, dynamically loadable
language modules, and so forth.  However, none of this is really going
to materialize if we can't get the 2.0 release stablized.  In fact, I
see SWIG-2.0 as a necessary step for moving forward with these ideas.

We need your help! Yes, you.
----------------------------
Nobody gets paid to work on SWIG.  The developers are volunteers who
work in their spare time.  Furthermore, SWIG is not supported by
investors, a large corporation, or research grants.  I work on it
because it's fun, challenging, and useful.  I presume that other
developers do the same.  However, we only have limited resources and
we need your help.

-  If you like SWIG and find it useful, we need you to try new versions.
   We want you to torture test the releases and to break them.  We need
   bug reports. No bug is too obscure or unimportant---we *will* fix it
   if we can.  We also need feedback about things that are annoying or
   compatibility features that might help in going from 1.1 to 2.0.

-  We need help with documentation, examples, testing, libraries, and all
   sorts of other aspects of the release.  Even if you have never
   written a SWIG language module or dived into its implementation,
   there are many ways that you can help.  Consider writing a case study
   about how you wrapped a big library.  Contribute tests that break the
   implementation in horrible ways.  Help with the web page or FAQ.

-  Most of the SWIG-1.3.x work has focused on the SWIG core.  However, as
   the 2.0 release nears, we will be working on a variety of enhancements
   to the language modules.  If there are things you would like to see
   in any of the language modules, you need to let us know.

-  There are SWIG language modules that have not made it into the
   distribution.  Examples that I know about include ITCL, Swig-Eiffel,
   and Swig-Lua.  We would gladly make these part of the standard SWIG
   distribution.  However, we also need help to do it.  Porting from
   SWIG-1.1 is no easy task, but we're more than willing to help.  It's
   not as bad as one might imagine.

-  We are always looking for developers.  Subscribe to
   the swig-dev mailing list, details at http://www.swig.org/mail.html,
   or send me email to get involved.

Acknowledgements
----------------
I'd just like to thank everyone who has submitted feedback, bugs, made
contributions, and put up with my occasional thrashing over the years. 
I welcome any comments about this document and how we can make SWIG even
better.

Dave Beazley (beazley@cs.uchicago.edu)
June 2, 2002

