STELLA - Lisp-style Symbolic Programming
with Delivery in Common-Lisp, C++ and Java
Developers of intelligent applications face a problem today, since
none of the currently ``healthy'' languages such as C++ or Java
provide adequate environments to support symbolic programming tasks.
While Common-Lisp would probably still be the best language choice for
many of these tasks, its dwindling vendor support and user base make
it more and more difficult to justify its use.
When we embarked on the task of developing PowerLoom® which had
to be delivered in C++, we were faced with exactly this problem. Our
response was to invent a new programming language, called STELLA, that
incorporates those aspects of Common Lisp that we deemed essential
into a language that can still be translated into efficient, conventional
and readable C++ and Java code.
STELLA is a strongly typed, object-oriented, Lisp-like language,
designed to facilitate symbolic programming tasks in artificial
intelligence applications. STELLA preserves those features of Common
Lisp deemed essential for symbolic programming such as built-in
support for dynamic data structures, heterogeneous collections,
first-class symbols, powerful iteration constructs, name spaces, an
object-oriented type system with a meta-object protocol, exception
handling, and language extensibility through macros, but without
compromising execution speed, interoperability with non-STELLA
programs, and platform independence. STELLA programs are translated
into a target language such as C++, Common Lisp, or Java, and then
compiled with the native target language compiler to generate
executable code. The language constructs of STELLA are restricted to
those that can be translated directly into native constructs of the
intended target languages, thus enabling the generation of highly
efficient as well as readable code.
As of Fall 2000, we have programmed approximately 100,000 lines of
STELLA code - about 50% for the STELLA kernel itself and the other 50%
for the PowerLoom knowledge representation system and related systems.
Our subjective experience has been that it is only slightly more
difficult to write and debug a STELLA program than a Lisp program, and
that the inconvenience of having to supply some type information is
much outweighed by the benefits such as catching many errors during
compile time instead of at run time.
The biggest benefit, however, seems to be that we can still leverage
all the incremental code development benefits of Lisp, since we
use the Common Lisp-based version of STELLA for prototyping. This
allows us to incrementally define and redefine functions,
methods and classes and to inspect, debug and fix incorrect code on
the fly. Even the most sophisticated C++ or Java IDE's don't yet seem
to support this fully incremental development style, i.e., a change in
a class (every change in Java is a change to a class) still requires
recompilation and restart of the application, and it is the restart
that can be the most time consuming if one debugs a complex
application that takes a significant time to reach a certain state.
A first version of a STELLA manual is now available. The language
definition section is still incomplete, but there should be enough
information to get you started (especially, if you are willing to read
some source code).
The STELLA manual is available in the following formats:
For other formats such as the Emacs info format look in the
sources/stella/doc directory of the STELLA release.
Example Code Below are links to some real STELLA files to give you
a flavor of what STELLA code looks like in real life. These files are taken
from a recent version of STELLA and are all in production use. Also check out
the PowerLoom sources for
an example of a large system programmed in STELLA.
- primal.ste contains
functions that are on the border between STELLA code and code
in the individual native languages. About 95% of STELLA is
written in STELLA itself, the remaining 5% or so is
implemented by calls to native functions.
- conses.ste implements
STELLA's version of Lisp conses. In Lisp, we actually use
Common-Lisp conses as their native data type for efficiency.
contains most of the kernel classes used by STELLA. These are
all in one file for historic reasons, but they don't really
need to be.
- classes.ste contains
code that builds and maintains STELLA's meta objects for
classes and slots.
- defclass.ste contains
various code related to class definition.
- macros.ste contains
a variety of commonly used STELLA macros.
Since October 2001 STELLA is available free-of-charge under a triple
disjunctive open-source licensing scheme that allows you to pick the
Public License v. 1.1 (MPL), the GNU
General Public License v. 2.0 (GPL) or the the GNU
Lesser Public License v. 2.1 (LGPL) to fit your needs. This
scheme is similar to what's used for the
Mozilla web browser and
should give people maximum flexibility to use STELLA even for
commercial development while still retaining the advantages of
The release contains
- the complete STELLA sources
- two alternative Common Lisp translations (CLOS or struct objects)
- C++ translation
- Java translation, compiled class files and
stella.jar JAR file
- Python API to interact and integrate with the C++ version of STELLA
See the STELLA manual for
system requirements and
installation instructions .
You don't necessarily need Lisp to develop STELLA code, but it
will give you the highest productivity if you do use the Lisp-based
version of STELLA for code development. We use Allegro CL but the latest version
of the freely available CMUCL
works also. Using a nice X/Emacs-based Lisp development
environment makes development a breeze. Using other environments your
milage may vary. Once you've developed a piece of software to your
satisfaction you can translate it into C++ or Java for delivery, etc.
The release comes with a very simple Hello World system to show
you how to set up your own code. The manual
explains how to translate and compile that system into different
Download latest STELLA release:
The Python API is a new addition that allows one to interact with
STELLA systems directly and interactively from Python. The
integration is currently only available for C++ translations of STELLA
systems. To use the API first install it via
the tar archive available from the STELLA download area. Then define
any classes, methods, functions and variables that are needed which
will install the necessary wrappers. After that they can be called
and accessed as Python objects and any returned STELLA C++ objects
will be thinly wrapped so that they can be transparently passed to
other STELLA code. See the
stellapi sources in the
STELLA distribution or PowerLoom's
ploompi API for
inspiration. For example:
> pip install stellapi-3.7.0.tar.gz
>>> import stellapi as spi
(<function pdef_makeDateTime at 0x7f070bb2baf0>, 'stellapi.stella.pdef.makeDateTime', <proxy.MethodSlot |F|MAKE-DATE-TIME>)
>>> spi.stella.pdef.makeDateTime(2000, 10, 30, 14, 59, 59, 200, 10.0)
<proxy.CalendarDate "2000-OCT-30 4:59:59.200 UTC">
Questions and Comments
We don't have a STELLA mailing list set up.
Please send any questions or comments to hans AT
isi . edu.
PowerLoom is a registered trademark of the University of Southern
Jan 5, 2023