STELLA - Lisp-style Symbolic Programming

with Delivery in Common-Lisp, C++ and Java

Motivation

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

Experience

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

The STELLA manual is available in the following formats:

sources/stella/doc

Example Code

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.

hierarchy.ste 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.

Download STELLA

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

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 current STELLA snapshot:

Snapshots are built from the latest sources in our repository. They are most current and run through a set of tests but are not as thoroughly tested as stable releases.

Download last stable STELLA release:

Questions and Comments

hans

AT

isi

.

edu

PowerLoom is a registered trademark of the University of Southern California.

Last modified: May 1, 2017