Extensible Software

Extensible Software

A series of articles written for ACCU Overload discussing extensible software. Inspired by the late John Vlissides quote:

"A hallmark - if not the hallmark - of good object oriented design is that you can modify and extend a system by adding code rather than hacking it.... In short, change is additive, not invasive. Additive change is potentially easier, more localized, less error-prone, and ultimately more maintainable than invasive change." John Vlissides, The C++ Report, February 1998

I argue that software extensiblity, and maybe software engineering, is a way of thinking. The third article on the subject takes a look at software development and business strategy - Extendable software and the bigger picture - and the role extensibility can play in keeping software soft.
This series was continued in the building series.

Notes on the example system

  • Thanks to Phil Bass and Thaddaeus Frogley for there help with comments on the writing and code.
  • Of the code I have it compiling under VC++ 6.0 (using .dsp's) and gcc 2.95.3 (akefiles) using Cygwin - sorry, no Linux build.
  • The gcc makefiles are ripped out of another project and I should do some work on them before exposing them to the world - mainly the dependencies (Cygwin doesn't ship makedepend which they where using) and check there are no misleading remnants of their previous life.
  • The example used the Boost Random Number Library so you will need the Boost library to compile this code. In VC++ you will need to go into the project settings and change the path to this. Under Cygwin you can just set BOOST_ROOT in your environment.

Improvements never done

  • Add makedepend type functionality back to the makefiles
  • Review the makefiles, see if I can reduce them some more
  • Create a utils library for the RamdomPrice function - this can wait until there is more code to put in there
  • Try to reintroduce the link-time extension mechanism. What I had didn't work very well so I removed it, thanks to Thad I know have some ideas on making it work properly
  • Add some writing on run time extension with scripting - may be able to link this up with thoughts on configuration (see Accent writings on this subject.)
  • Get a Linux version working : this will need some abstraction of the dynamic libraries loading
  • Make a build on VC++.net, see if we can remove some of the _MSC_VER macros
  • Reintroduce discount contract - probably with link time extension