In his blog, Peter Christensen started a
list of companies using Lisp
to build their software or run their businesses. It is a little-known fact that
CoCreate, the company I work for, relies quite a bit on Common Lisp in its
flagship product OneSpace Modeling.
In fact, Lisp and C++ are our main implementation languages!
CoCreate OneSpace Modeling is a 3D CAD modeler built on
a concept called "explicit modeling". C++ is used mainly in the modeling kernel,
while Lisp dominates the UI, the application logic, many add-on modules, and the
API. The Lisp part of the project is safely in the 7-digit lines of
code range. I don't know much about the other large Lisp projects out there,
and LOC isn't exactly the greatest way to compare application complexity
anyway, so I'll play safe and just say that this is certainly a non-trivial
Common Lisp project.
Back in 1995, when we were still a division of Hewlett-Packard, we published an
article in "HP Journal" which outlines why we chose Common Lisp and what we're
doing with it in the product. The article is still available at
http://www.hpl.hp.com/hpjournal/95oct/oct95a7.pdf. Since then, the application
changed a lot, of course - we even renamed it twice
But much of what is said
in the article about Lisp still applies.
The HP Journal article concluded:
Common Lisp is also used as a user accessible extension
language for HP PE/SolidDesigner. It is a standardized, open
programming language, not a proprietary one as in HP
PE/ME10 and PE/ME30, and the developers of HP PE/SolidDesigner
believe that this will prove to be an immense advantage.
SolidDesigner was the original product name; ME10 and ME30 were predecessor
products which implemented their own little macro interpreters. Back then,
we were a bit cautious about the potential benefits we'd reap,
as the product was still in its early days. By now, however, we can say
that Common Lisp was a key factor in helping a fairly small team of developers
keep pace with the big guns in the industry, due to all the well-known productivity
features in Lisp, such as macros, the REPL, or automatic memory management.
The HP Journal article describes how we use macros to define
a domain-specific language called
action routines, which are
state machines which guide users through commands. Later, we extended that
concept by automatically generating UI for those commands: Using the
sd-defdialog macro, application developers can implement
full-blown commands in just a few lines of code, without having to write
any (or at least hardly any) code for services such as:
- Automatic "macro recording" of commands
- Context-sensitive online help
- UNDO support
- Command customization (commands can be started from toolbars,
menus, a user input line, or from our "taskbar")
- Sequence control (dependencies of user inputs on other
input)
- UI creation and layout
- Adherence to UI style guides
- Graphical feedback both in the UI and in 3D graphics windows
- Type and range checks for input data
- Automatic unit conversions (imperial to metric etc.)
- Prompting
I've been planning to blog more on
sd-defdialog for some time, and hope
to get around to it Real Soon Now.
Needless to mention, I guess, that I made sure that CoCreate is now
also part of Peter's great list... .-)
PS: If you're interested, check out my
other blog posts related to CoCreate Modeling or the
CoCreate Modeling FAQ.