Day 1: Roswell, as a Common Lisp implementation manager
This is my first public article in English. I’ve been sending out newsletters about what I’ve been doing only to sponsors, but there have been requests to publish my know-how on my blog, so I’m writing this way.
However, my English skills are still developing, so I can’t suddenly deliver a lot of information at once. So instead, I’m going to start writing fragments of knowledge in the form of technical notes, little by little. The articles may not be in order. But I suppose each one would help somehow as a tip for your Common Lisp development.
When I thought of what I should start from, “Roswell” seemed appropriate, because most of the topics I want to tell depends on it.
It’s been six years since Roswell was born. Although its usage has been expanding, I still feel that Roswell is underestimated, especially among the English community.
Not because of you. I think a lot of the reason for this is that the author is Japanese, like me, and has neglected to send out information in English.
If you are not familiar with Roswell or have tried it before but didn’t get as much use out of it as you wanted, I hope this article will make you interested.
Roswell has the following features:
- Install Common Lisp implementations of specific versions and switch between them as needed
- Install libraries from GitHub
- Common Lisp scripting (aka. Roswell script)
- Enthusiastic CI support
It would be too much work to explain everything in a single article, so I will explain from the first one today: installation of Common Lisp implementations.
Installation of Common Lisp implementations
To install implementations with Roswell, use its “install” subcommand.
$ ros help install
To install a new Lisp implementaion:
ros install impl [options]
or a system from the GitHub:
ros install fukamachi/prove/v2.0.0 [repository… ]
or an asdf system from quicklisp:
ros install quicklisp-system [system… ]
or a local script:
ros install ./some/path/to/script.ros [path… ]
or a local system:
ros install ./some/path/to/system.asd [path… ]
For more details on impl specific options, type:
ros help install impl
Candidates impls for installation are:
For instance, SBCL, currently the most popular implementation, can be installed with
# Install the latest SBCL binary
$ ros install sbcl-bin
# Install the SBCL 2.1.7 binary
$ ros install sbcl-bin/2.1.7
# Build and install the latest SBCL from the source
$ ros install sbcl
Since Roswell author builds and hosts its own SBCL binaries, it can install more versions of binaries than the official binary support. So in most cases, you can just run
ros install sbcl-bin/<version> to install a specific version of SBCL.
After installing a new Lisp, it will automatically be in the active one. To switch implementations/versions,
ros use command is available.
# Switch to SBCL 2.1.7 binary version
$ ros use sbcl-bin/2.1.7
# Switch to ECL of the latest installed version
$ ros use ecl
To see what implementations/versions are installed,
ros list installed is available.
$ ros list installed
Installed versions of ecl:
Installed versions of sbcl-bin:
Installed versions of sbcl-head:
To check the active implementation, run
ros run -- --version.
# Print the active implementation and its version
$ ros run -- --version
Run REPL with Roswell
To start a REPL, execute
# Start the REPL of the active Lisp
$ ros run
# Start the REPL of a specific implementation/version
$ ros -L sbcl-bin/2.1.7 run
"sbcl" command needed?
For those of you who have been installing SBCL from a package manager, the lack of the
sbcl command may be disconcerting. Some people are relying on the "sbcl" command in your editor settings. As a workaround to install the "sbcl" command, such as the following command would help.
# Installation of "sbcl" command at /usr/local/bin/sbcl
$ printf '#!/bin/sh\nexec ros -L sbcl-bin run -- "$@"\n' | \
sudo tee /usr/local/bin/sbcl \
&& sudo chmod +x /usr/local/bin/sbcl
Though once you get used to it, I'm sure you'll naturally start using
I introduced the following subcommand/options in this article.
- Install a new Lisp implementation
- Switch another installed Lisp implementation
- Start a REPL
- Specify the Lisp implementation to run a command
If you have a problem like “Roswell worked fine at first but won’t work after I updated SBCL,” simply delete
Roswell writes all related files under the directory, like configurations, Lisp implementations, and Quicklisp libraries, etc. When the directory doesn’t exist, Roswell creates and initializes it implicitly. So it’s okay to delete