Description

Shelly enables you to execute Common Lisp functions like a shell command. And it also can be used as a Make-like build-tool.

Shelly has the following features:

Provides shell command-like interface for Common Lisp functions

Dumps a Lisp core for fast execution.

Allows to define project specific commands. (shlyfile)

Implementation independent.

Warning: This software is still ALPHA quality. The APIs will be likely to change.

Why use it?

In Common Lisp world, most libraries and applications are designed to run on REPL. It is convenient for interactive development, but it would be an obstacle in some cases.

For example, Common Lisp isn't good for writing a small script. No common way to write it in a portable way. Parsing command-line arguments is really annoying. And, the startup time would be very slow, especially when it uses some libraries.

Shelly solves these problems by providing a shell-friendly interface of Common Lisp. If your application need to run with Cron, Supervisord or other CUI applications, this may help you.

1. Implementation independent

Shelly should work fine with one of SBCL, Clozure CL, Allegro CL, ABCL, GNU CLISP and ECL.

2. Function as a shell command

Shelly treats general functions as its sub-commands, so you don't even need to write a script in most cases.

3. Fast startup

Shelly reduces the startup time by storing a Lisp core image. In a simple case, the execution is about 33 times faster than CIM's cl command and even 25 times faster than SBCL (with Quicklisp) at the maximum.

<strong><span style="color:red">Warning</span>: This software is still ALPHA quality. The APIs will be likely to change.</strong>

## Why use it?

In Common Lisp world, most libraries and applications are designed to run on REPL. It is convenient for interactive development, but it would be an obstacle in some cases.

For example, Common Lisp isn’t good for writing a small script. No common way to write it in a portable way. Parsing command-line arguments is really annoying. And, the startup time would be very slow, especially when it uses some libraries.

Shelly solves these problems by providing a shell-friendly interface of Common Lisp. If your application need to run with Cron, Supervisord or other CUI applications, this may help you.

### 1. Implementation independent

Shelly should work fine with one of SBCL, Clozure CL, Allegro CL, ABCL, GNU CLISP and ECL.

### 2. Function as a shell command

Shelly treats general functions as its sub-commands, so you don’t even need to write a script in most cases.

(in-package :myapp)

(defun do-something (&key verbose)
;; Do something.
)

$ shly myapp:do-something –verbose t

Command-line options and arguments will be delivered to a function.

### 3. Fast startup

Shelly reduces the startup time by storing a Lisp core image. In a simple case, the execution is about 33 times faster than CIM’s ‘cl‘ command and even 25 times faster than SBCL (with Quicklisp) at the maximum.

* Use CIM for CL implementation management if it is installed.
* Rewrite "bin/shly" in Shell script.
* Remove the dependency on SWANK.
* Allow to specify where to install with ‘SHELLY_HOME‘.
* Add ‘upgrade‘ command.