Welcome to ccscript, yet another, and highly specialized embedded
scripting engine for creating "extensible" applications.  This system is
a C++ class library which allows one to derive application specific
dialects of the core language as needed through subclassing.

ccscript is used in Bayonne (the telephony server of the GNU project) and
in the TOSI (the FreeBSD pbx integration servers).  ccscript is derived
from Common C++ (which is now a GNU package), and in fact requires Common
C++ to be installed before building ccscript itself.  Originally ccscript
was part of a set of software made available in the "extras" package for
Common C++ which included other software not yet integrated in Common C++
proper.  It is now available as a seperate package.

ccscript differs from other embedded scripting engines (such as libguile,
libperl, tcl, etc) in one key respect; ccscript is meant to step execute
from a callback service thread.  That is, rather than invoke a function
which then parses an interpreter, one executes a single "step" statement.
This is useful when a callback service thread is monitoring multiple
devices; each device can have a ccscript interpreter instance, and a
single thread can dispatch events upon demand.

This model suggests ccscript is best used in scripting embedded
applications.  In fact, it is specifically designed for scripting
"state-event" systems, and for doing so where execution deadlines are
short. 

ccscript is also meant to script systems without downtime.  This has one
curious effect; when ccscript is started, a core script is converted into
an "image" object.  When an interpreter instance is connected to process
script requests, it attaches a reference.  If an active script is modified
and reloaded, a new "image" is created, and new requests are then given
this new image.  When the last reference against an old script image is
terminated, the image is also purged.  This allows one to compile and
rebuild scripts on the fly and load them into memory even while active
interpreter instances are running.

ccscript is not meant to solve the problems of traditional scripting
engines (tcl, guile, etc).  However, if you need several hundred instances
of an interpreter running concurrently, if you are builing state-event
systems, or if you need near real-time response through a script system,
the ccscript may be the answer for you.

David Sugar
Common C++ GNU Maintainer


