はじめに
急に Lisp がやってみたくなったので、 Docker の練習がてら環境構築してみた。
今回は Steel Bank Common Lisp(SBCL) をインストールします。
この記事では下の記事のインストール部分を参考に、最新版の SBCL をインストールする Dockerfile を作成します。
環境
$ docker --version
Docker version 20.10.18, build b40c2f6
Dockerfile
# Use the official Ubuntu 22.04 base image
FROM ubuntu:22.04
# Set the working directory
WORKDIR /usr/src/app
# Update package list and install necessary dependencies
RUN apt-get update && \
apt-get install -y wget bzip2 make rlwrap && \
wget http://prdownloads.sourceforge.net/sbcl/sbcl-2.4.1-x86-64-linux-binary.tar.bz2 && \
bzip2 -cd sbcl-2.4.1-x86-64-linux-binary.tar.bz2 | tar xvf - && \
cd sbcl-2.4.1-x86-64-linux/ && \
sh install.sh
# Cleanup unnecessary files
RUN rm -rf /usr/src/app/sbcl-2.4.1-x86-64-linux* && \
apt-get autoremove -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Set the default command to run sbcl
# sleep が無いとエラーを出る
CMD ["bash", "-c", "sleep 0.05; rlwrap sbcl"]
CMD の sleep
は rlwrap sbcl
ではエラーを出るために追記した。
rlwrap
はコマンドラインを読み取り履歴機能などを追加してくれるソフト。これがないと誤字を消すために左矢印を入力すると ^[[D
が表示されたりする。
docker を使いたくない人へ
普通に apt install sbcl
で古いバージョンがインストールできます。
$ apt show sbcl
# Package: sbcl
# Version: 2:2.1.11-1
# Priority: optional
# Section: universe/devel
# Origin: Ubuntu
# Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
# Original-Maintainer: Debian Common Lisp Team <debian-common-lisp@lists.debian.org>
# Bugs: https://bugs.launchpad.net/ubuntu/+filebug
# Installed-Size: 46.3 MB
# Provides: lisp-compiler, sbcl-fasl-loader-78
# Depends: libc6 (>= 2.34), zlib1g (>= 1:1.1.4)
# Recommends: binfmt-support
# Suggests: sbcl-doc, sbcl-source, slime
# Breaks: cl-asdf (<< 2:3.3.3-4~), cl-cffi (<< 1:0.22.1-1~), cl-nibbles (<< 20210520.gitdad2524-1~)
# Homepage: http://www.sbcl.org
# Download-Size: 10.6 MB
# APT-Sources: http://jp.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
# Description: Common Lisp コンパイラおよび開発システム
# SBCL は ANSI Common Lisp 言語向けの開発環境です。 ネイティブコードコンパイラと統合デバッガを提供し、さらに ANSI
# 仕様の全機能 も提供しています。
# .
# SBCL には、外部関数インターフェース (FFI)、疑似サーバ API、ユーザ拡張可能な
# ストリーム機能、メタオブジェクトプロトコル、外部プロセスを実行する機能を含 む、ANSI 仕様への他の拡張も含まれています。
# .
# SBCL のソース定義を開発環境と共に閲覧するには、sbcl-source パッケージをイン ストールしてください。SBCL
# の使い方や内部についての文書は、パッケージ sbcl-doc で提供されています。
Hello World
log.txt
$ sbcl
This is SBCL 2.1.1.debian, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.
SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
* (write-line "HelloWorld!")
HelloWorld!
"HelloWorld!"
*