世界を動かす技術を、日本語で。

スティールバンク・コモンリスプ

概要

  • Steel Bank Common Lisp (SBCL) は高性能なCommon Lispコンパイラ
  • オープンソース かつ自由なライセンスで提供
  • ANSI Common Lisp 準拠のコンパイラとランタイム、豊富な開発支援ツールを搭載
  • Linux、BSD、macOS、Solaris、Windows など多様なOSに対応
  • ドキュメントやバグ報告方法も充実

Steel Bank Common Lisp (SBCL) の特徴

  • 高性能 なCommon Lispコンパイラ
  • オープンソース/フリーソフトウェア として提供
  • 寛容なライセンス で商用・非商用問わず利用可能
  • ANSI Common Lisp 仕様を完全サポート
  • インタラクティブ環境 の提供
    • デバッガ によるリアルタイム解析
    • 統計プロファイラ でパフォーマンス解析
    • コードカバレッジツール でテスト網羅率の可視化
    • その他多数の 拡張機能
  • 対応プラットフォーム
    • Linux
    • 各種BSD
    • macOS
    • Solaris
    • Windows
  • ダウンロードページ でサポートプラットフォーム一覧を確認可能
  • Getting Startedガイド で導入手順を案内

最新バージョンとリリース情報

  • 最新バージョン :SBCL 2.6.1
  • リリース日 :2026年1月26日
  • リリースノート で詳細変更点を掲載

ドキュメント

  • 公式マニュアル はWeb上で HTML および PDF 形式で公開
  • ソースコード内 doc/manual ディレクトリ には最新の TeXInfo形式 マニュアルを収録

バグ報告方法

  • Launchpad 上の SBCLバグデータベース で直接報告可能
  • sbcl-bugs@lists.sourceforge.net へのメール送信でも受付
    • 購読不要 で誰でもメール可能

Hackerたちの意見

これに「(1999)」の日付を付けてもらえますか?半分冗談だけど、Common Lispを見て、確かにアップボートするけど…正直、このHNの投稿には文脈がないと意味がないよね。SBCLは素晴らしいけど、もう一つの人気実装、Embeddable Common Lispと比べてみよう。https://ecl.common-lisp.dev/ SBCLのパフォーマンスは最高だけど、ECLはモバイルアプリに埋め込むのに適していたり、軽量ハードウェアで動かしたり、ブラウザで使ったりするのに向いてるかも。

追記: 毎月末にSBCLのリリースがあるよ: https://www.sbcl.org/all-news.html

SBCLの面白い雑学の一つは、その名前だね。これはカーネギーメロンのビルドから派生したものなんだ。Steel. Bank.

よくわからない :-(

それはすごく面白いし、私が思ってた「20世紀中頃の廃業した地域銀行から来た」という半分の推測よりもずっと納得できるね。

うわ、ずっとSは(ガイ)スティールに関するものだと思ってた。

古いHNユーザーは、忙しい議論がいくつかのページに分かれていた頃を思い出すかもしれない。これは、HNが動いているArc [1] 言語が元々Racket [2] の上にホストされていて、実装がHNの規模の巨大な議論を処理するには遅すぎたからなんだ。2024年9月頃にDangたちがArcをSBCLに移植し終わって、パフォーマンスが大幅に向上したから、今では一番大きな議論でも分割する必要がなくなった。サーバーも、これらの変更以降、応答しないことや再起動がずっと少なくなったよ。それでもトラフィックやコメントは増え続けてるけどね。https://news.ycombinator.com/item?id=41679215 [1] https://paulgraham.com/arc.html [2] https://racket-lang.org/

このコメント好きだな: 「ちなみに、これを3週間前にリリースしたんだけど、HNでこれについて聞いたのはあなたが初めてだと思う。メールでの質問は一件あったけどね。これはスプラッシュなしのダイブってことでいいんじゃない?」知らなかったよ、HN中毒なのに!

このsbcl用のArcのバージョンは、HNで使われてるのとは違うのかな?: https://github.com/pauek/arc-sbcl それと、sbclで動くAnarkiのバージョンはないの?: https://arclanguage.github.io/

素晴らしい選択肢だけど、LispWorksやAllegro Common Lispも見逃しちゃいけないよ。みんなSBCLとEmacsに集中しすぎて、Lispのツールについて文句を言ってるから。

みんなSBCLとEmacsに集中しすぎて、Lispのツールについて文句を言ってる。 そうだね、LispWorksやAllegroは高い商業プロジェクトだからね。SBCLはデファクトスタンダードのオープンソースの選択肢なのに、もっと良いツールがあればいいのに。Emacsは本当に信じてる人には素晴らしいけど、私は普通のVSCodeユーザーだから。スタートアップでは理由があってそれを正当化できないけど、個人プロジェクトでCommon Lispをもっと使いたいな。でも時間が限られてるから、ClojureやRustの方が好きなんだよね。

普段からemacs使ってるよ(実際、今も動かしてるし)。その不満は全く正当だと思う。emacsは色々な面で素晴らしいけど、他の面では本当にひどい。まあemacsは置いといて、SBCLのツールは合理的だと思う。最近lispをあまり使わない理由は、ツールのせいじゃなくて、Common Lispのライブラリエコシステムが部分的な実装や放棄されたコードベースの荒れ地だから。LLMは特に「初心者向け」の言語、例えばGoみたいなメインストリームの言語を書くのが得意だと思う。だから、AllegroやLispworksをSBCLより選ぶ理由がわからないな。手動でlispを書くのが好きで、SBCLにはない特定の機能が必要な人以外は。そういう機能はほとんどないと思うけどね。

LispWorksとAllegroはどちらも面白いけど、IDEの提供がすごく限られてると思う。コロナの時にCLをいじってた時以来、どちらも使ってないけど、記憶によれば、コードを書く基本的なIDE体験がひどかったんだよね。オートコンプリートが貧弱、構文ハイライトがイマイチ、インターフェースが使いづらい。ほとんどの議論では、彼らのコンパイラのためにだけ推奨されていて、IDEの提供についてはあまり言及されてない。

Nichimenの作品を見て以来、ずっと謎だった。価格は当時考えるのも無理なほどだった。

両方使ったけど、商業的にAllegroCLを生産環境で使ってたんだけど、どちらも期待外れだった。特にAllegroCLは値段と約束に対してね。

なんでそんな名前なの?古い学校のコンソーシアムの産物なの?FordやGMもソフトウェアの研究開発をしてたのは知ってるけど。

Aboutページから: >SBCLは、カーネギーメロン大学で作られたCMU CLからほとんどのコードを引き継いでいる。システムの一部(特にブートストラップ)には大きな変更が加えられているが、基本的な部分(Lispの抽象を基盤となるハードウェアにマッピングすること、コンパイラの基本アーキテクチャ、ランタイムサポートコードの多く)はわずかに変更されただけだ。インターフェースやアーキテクチャには十分な変更が加えられているので、新しいシステムをCMU Common Lispと呼ぶと混乱を招く。世界にはCMU CLという名前の互換性のないシステムが複数必要ないからね。でも、システムを動かすために大変な労力をかけたCMUのハッカーたち(およびポストCMUのCMU CLハッカーたち)からの系譜を認めるのは適切だ。だから、このシステムはアンドリュー・カーネギーとアンドリュー・メロンがそれぞれ大金を稼いだ産業にちなんでSteel Bankと名付けられた。

CMUへの公式な言及に加えて、名前の由来はもう一つある。SBCL - Sanely Bootstrappable Common Lisp。SBCLがCMUからフォークされたとき、CMU CLとは違って、どんな reasonably completeなCommon Lisp実装でもコンパイルできるように大きな努力がなされたんだ。CMU CLは基本的に自分自身でしかコンパイルできず、同じバージョンであることが好ましかったから、コンパイルや特にクロスコンパイルはCMUCLプロセスの内部状態を「新しいバージョン」に持っていく複雑なプロセスだった。SBCLは、コアのSBCLコンパイラ部分をほぼ完全なANSI CL実装でホストできるようにロジックを大幅に見直した。そしてそれを使って完全な形をコンパイルする。つまり、SBCLのソースtarballを手に入れて、GNU clispやECL、Clozure CL、さらにはGNU Common Lispのどれか、商用実装のいずれかを使って、もちろんCMUCLも含めて、Cコンパイラ(薄いランタイムサポート用)を使って、数コマンドで完全で問題のないSBCLリリースをビルドできるってこと。

コモンリスプは唯一の真の言語だよね。

スキームがなかったら、CLを喜んで使うよ。

タイプチェックに関しては、たぶん一番いいコモンリスプのコンパイラだと思う。ただ、まだまだ改善の余地があるね。例えば、リストの要素タイプを特化できないのが痛い。リストが基本的な構造なのに、(declaim)で全ての関数を試すと、タイプがどれだけ曖昧で不十分かがすぐにわかる。Pythonと比べてもね。リストのパラメータタイプを特化できれば、タイプチェックがかなり改善されるし、コンパイラがリストをアンボックス配列に最適化するのにも役立つよ。静的タイプチェックがCLに合わないなんて言わないでほしい。もう手遅れだよ。SBCLとはうまく動くけど、もっと良くなる余地がある。コモンリスプの標準に責任を押し付ける人もいるけど、確かにリストの特化方法は指定されてないけど、構文は拡張可能だから、ベンダー拡張としてCDRを作ってみたらどうかな?私の知る限り、CDRはコモンリスプにとって、PEPがPythonにとってのようなものだったはず。ベクトルや配列も使うけど、CLではエルゴノミクスがリストに強く寄ってるからね。短い構造にはベクトルや配列は合わないと思う。そろそろ標準を超えて、拡張にもっと勇気を持つ時期だと思う。標準からはたくさんのことが変わったし、今でも十分能力があるけど、CLがどれだけ強力でも、実際に実装できないこともあって、それはランタイムの一部にしなきゃいけない。そう、非同期のことを言ってるんだ。SBCLに非同期ランタイムを追加するのがどれくらい難しいかを調べてみようと思ったんだけど、驚いたことに、そのプロジェクトはすごく遅いSourceForgeでホストされていて、プロジェクトの議論はまだメーリングリストで行われてる。ごめん、GitHubの便利さに慣れすぎちゃったよ。

Coalton [1] はコモンリスプにHaskellスタイルの型(型付きリスト、型クラス、パラメトリックポリモーフィズムなど)を追加して、SBCLで特に効率的なコードにコンパイルするよ。 [1] https://coalton-lang.github.io/

あなたの非同期のやつは、SBCLのスレッドインターフェースやlparallel、bordeaux-threadsとどう違うの?

例えば、リストの要素タイプを特化できない。確かに、それはCLの違反になるか、DEFTYPE以外のもので提供する拡張になるね。DEFTYPEの本体は無限再帰できないから。cf https://www.lispworks.com/documentation/HyperSpec/Body/m_def... >もしすべての関数に(declaim)しようとしたら、Pythonと比べても型がどれだけ曖昧で不十分かすぐにわかるよ。確かにそうだけど、1) コンパイラ自体が使ってるし、cpythonは現在アノテーションを無視してるし、2) ランタイムとビルドタイムの型付けは同じ意味論と構文を使ってるから、https://github.com/agronholm/typeguardみたいなバンドエイドは必要ないよ。でも、CLの型システムは多くの点で不足してるね。実用的な利点と追加の難しさの順で(多分):再帰的DEFTYPE、型付きHASH-TABLE(キーと値のこと)、CLOSスロットの静的型付け(侵襲的、https://github.com/marcoheisig/fast-generic-functionsみたいな)、...、ARRAYを超えたパラメトリック型付け。

スレッドを乗っ取るけど、コモンリスプのためのJetBrainsプラグインは2023年からメンテナンスされてないよ。私がフォークして、復活させたから。Emacsは必要ないよ。普通のIDEでコモンリスプを楽しんでね。 https://github.com/ivanbulanov/SLT/releases

Emacsは必要ないよ。いや、必要だよ。

おそらく私のお気に入りのエラーメッセージが出るプログラムだね。 https://sourceforge.net/p/sbcl/sbcl/ci/master/tree/src/runti...

「Mr. Potatoheadが逃げ出した!」が私のお気に入りだよ、たしかFedora Linuxのディストリビューションからだったと思う。