STELLA - Lisp-style Symbolic Programming
with Delivery in Common-Lisp, C++ and Java

Motivation

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.

Overview

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.

Experience

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.

Publications

Documentation

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.

Download STELLA

Since October 2001 STELLA is available free-of-charge under a triple disjunctive open-source licensing scheme that allows you to pick the Mozilla 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 open-source licensing.

The release contains

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 target languages. t

Download latest STELLA release:

Python API

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 pip using 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

> python
>>> import stellapi as spi
>>> spi.__version__
'3.7.0'
>>> spi.defun('stella/make-date-time')
(<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.
Information Sciences Institute PowerLoom Home Page
PowerLoom is a registered trademark of the University of Southern California.
Last modified: Jan 5, 2023