Gracle: a Common Lisp software environment

The name

Gracle is a temporary name. I'll be happy to consider better alternatives, but it is convenient to have a name to refer to in documents on this site.

What is Gracle

Gracle is a project that may never be realized. Certainly, I personally have neither the time nor the energy to realize it myself. Consider it an idea for a long-term plan to build a better software environment.

Here, by "software environment", we mean the API as seen by application programs, but also system software, and development tools. In this document we also include key application programs in "software environment".

What we refer to as a software environment, some would call an operating system, but that term is often misunderstood to mean only the kernel of what is traditionally referred to as an operating system. I think it would be great if one day, Gracle would run on "bare metal", but that is neither a necessity nor a priority.

Main project principles

There are some principles that I have found to be good to follow and that I include here.

Build it top-down rather than bottom-up

Building the system top-down means that components can be useful right away. Also, top-down development is easier to do in parallel because it has fewer dependencies. Thus, building applications is higher priority because lower-level components such as a compiler or a debugger exist, even though they may not be optimal for Gracle.

Make components as general as possible

It is highly likely that Gracle will never be complete. In that case, it would be too bad if what had been written so far would go to waste. For that reason, it is good to write software components that are as general as possible. A component written in portable Common Lisp is better than one that uses Gracle-specific features. A component that can be completely or partially turned into a generally-useful library is better than a special-purpose component.

Use CLIM/McCLIM for user interaction

Many components of Gracle involve interaction with the user in the form of text or graphics output, and keyboard and mouse input. For such components, we will use CLIM, the Common Lisp Interface Manager, and the McCLIM implementation of it.

CLIM makes it much easier to write modular interaction software, and even though it is not part of the Common Lisp standard, it is a de facto standard that we don't mind depending on.

Gracle subtopics