記録は作業の証

鉄道とコンピュータ

Common Lispの開発環境を構築する

はじめに

プログラミングを始めるには、どの言語でも開発環境の構築が必要である。この記事ではCommon Lispの開発環境をEmacsというテキストエディタSteel Bank Common Lisp(以下SBCLと呼ぶ)という言語処理系を用いて説明する。

まず、SBCLをインストールし、動作確認を行う。次に、サードパーティのライブラリを利用するためのQuicklispというソフトウェアを導入する。そしてEmacsをインストールし、Common Lispプログラムの編集とデバッグを容易にするため、Slyを中心にパッケージを導入する。

 

導入手順

SBCLのインストール

Common Lispはよく知られたCと同様に、標準化された言語仕様を持つプログラミング言語である。CにはGCCやClangをはじめとする言語処理系が多数あるように、Common Lispにも様々な言語処理系が存在する。この記事では、フリーかつよく使われている言語処理系のSBCLを導入する。SBCLは入力したプログラムをその場で実行できるREPLを持っているが、入力したテキストを編集する行編集機能や履歴機能を持たない。rlwrapを使うと、SBCLに行編集機能や履歴機能を付加でき、その不便さを軽減できる。

OSのパッケージマネージャを利用する方法

読者がLinuxを利用していてなおかつ管理者権限を持っていれば、ディストリビューションのパッケージマネージャを使ってインストールができる。

DebianUbuntuの場合

$ sudo apt-get update

$ sudo apt-get -y sbcl rlwrap

ArchLinuxの場合

$ sudo pacman -Syu sbcl rlwrap

Windowsの場合はwingetが利用できる

> winget install SBCL.SBCL

手作業で導入する方法

SBCLのサイトからバイナリをダウンロードする。

Windowsの場合は、ダウンロードしたバイナリがインストーラになっているのでそれを実行する。

Linuxでは次のようにすると、ホームディレクトリに導入できる。

$ tar xf sbcl-2.4.1-x86-64-linux-binary.tar.bz2

$ cd sbcl-2.4.1-x86-64-linux

$ env INSTALL_ROOT=${HOME}/.local sh install.sh

rlwrapも次の手順に従ってインストールする。

コンパイルに必要なコンパイラとライブラリをインストールする。

$ sudo apt-get update

$ sudo apt-get install build-essential curl libreadline-dev

続いてrlwrapのソースコードをダウンロードしてコンパイルする。

$ curl -LO https://github.com/hanslub42/rlwrap/releases/download/0.46.1/rlwrap-0.46.1.tar.gz

$ tar xf rlwrap-0.46.1.tar.gz

$ cd ../rlwrap-0.46.1

$ ./configure --prefix=${HOME}/.local

$ make

$ make check

$ make install

~/.profileまたは~/.bash_profileに次の内容を追記し、ログインしなおす。

export PATH=${HOME}/.local/bin:${PATH}

動作確認をする

ここでは--noinformオプションを使い、SBCL著作権表示を抑制している。

(quit)と入力すると、SBCLを終了できる。

$ rlwrap sbcl --noinform

* (format t "Hello, world!~%")

Hello, world!
NIL

* (quit)

Quicklispのインストール

Common Lispそれ自体には、プログラムをパッケージングして流通させる仕組みがない。パッケージングを行うにはAnother System Definition Facilityと呼ばれるライブラリが使われており、CにおけるMakeの役割を果たしている。また、ソフトウェアを簡単にダウンロードできるように、Quicklispと呼ばれるソフトウェアも広く使われている。

Quicklispは、シェルではなくCommon Lispの言語処理系からその機能を利用するのが特徴となっている。

 

まずQUicklispのインストーラをダウンロードし、GnuPGを使って改ざんの有無を確認する。

$ curl -O https://beta.quicklisp.org/quicklisp.lisp

$ curl -O https://beta.quicklisp.org/quicklisp.lisp.asc

$ gpg --verify quicklisp.lisp.asc quicklisp.lisp

続いてSBCLインストーラをロードし、Quicklisp本体をインストールする。

$ rlwrap sbcl --load quicklisp.lisp

* (quicklisp-quickstart:install)

* (ql:add-to-init-file)

* (quit)

Qucklispの動作確認をする。ここでは、よくある処理をまとめたAlexandriaというライブラリをインストールしている。

$ rlwrap sbcl

* (ql:quickload :alexandria)

* (alexandria:ensure-list 'hello)
(HELLO)
* (alexandria:ensure-list '(hello))
(HELLO)
* (quit)

Emacsのインストール

OSのパッケージマネージャを利用する方法

DebianUbuntuの場合

$ sudo apt-get update

$ sudo apt-get -y emacs

ArchLinuxの場合

$ sudo pacman -Syu emacs

Windowsの場合

> winget install GNU.Emacs

Slyのインストール

Common Lispはほかのプログラミング言語とは異なり、対話的環境を中心に開発を進めるスタイルをとる。SlyはEmacsCommon Lisp処理系を連携させることで、プログラムの実行やデバッグを容易にすることを目的としたパッケージである。Slyには例えば次のような機能がある。

  • REPLにプログラムのすべてまたは一部を送信して計算結果を得る
  • 関数や変数の名前の補完
  • 関数呼び出しの履歴を得る

~/.emacs.d/init.elに次の内容を貼り付ける。

Common Lisp IDE

そしてEmacsを起動する。

$ emacs

Altキーとxキーを押下しslyと入力する(M-x sly)。

するとSLyが起動し、REPLが現れる。