31

この本で説かれているように、Practical Common Lisp から CL を学び始めたとき、私は Allegro CL コンパイラから始めました。コマーシャルでありながら無料のビットが印象に残っていなかったので、使用をやめました。いくつかのライセンス関連のために、リモート サーバーへの接続が必要でした。

「clisp」に切り替えて使用しています。今、私はSBCLについて聞いていて、それを使い始めようと思っています.

そこで問題は、さまざまな ANSI CL 実装がどのように異なるのかということです。どちらか一方を使用した実際の経験はありますか?

ありがとうございました。

4

9 に答える 9

34

Common Lisp の実装: Daniel Weinreb による調査を参照してください。

于 2009-02-22T08:32:06.783 に答える
16

SBCL を実行できるマシンを使用している場合は、SBCL を使用する必要があります。これは、最速のフリー Lisp コンパイラです (Haskell、OCaml、Java、C、および C++ と同じくらい高速なコードを生成できます。これらはすべて、特に Python や Ruby と比較して非常に高速です)。また、かなり完全な実装であり、Swank の機能 (SLIME 用) のほとんどをサポートしているため、開発時には便利です。

他のコメントのいくつかが言及しているように、最初に始めたときは違いに気付くことはありません. すべての無料の CL 実装は「十分に高速」であり、必要なすべての機能をサポートしています。しかし、実動ソフトウェアを書き始めると、SBCL の機能を高く評価するようになるでしょう。OTOH、今切り替えない理由は本当にありません。

于 2009-02-22T15:31:02.627 に答える
15

同じ質問に対するWin32ソリューションを見てきました。Windows での無料の Lisp 実装として、Clozure CL (CCL) を強くお勧めします。これにはいくつかの理由があります。1 つ目は、Clozure が 32 ビットと 64 ビットのバイナリをサポートしていることです。非常に高速で、ややコンパクトです。しかし、最も重要なことは、一貫性があり、正しいことです。Lispworks (懐かしい) を数年間使用した後、非常に成熟した Lisp であることがわかりました。CCL は、ネイティブ OS スレッド、ソケット、および CL 仕様の一部ではないその他の要素をうまく処理します。CLOS の実装は非常に徹底しているようです。そして、それは GC であり、メモリ管理は優れています。CCL と Win32 の SBCL を比較したところ、いくつかのベンチマークで SBCL の方が少し高速でしたが、大幅に改善され、そのイメージはどんどん大きくなり続けました。いくつかの強制GCの後でも。一方、CCL は一貫性があり、小さく、速く、使いやすかったです。また、Windows、Mac、Linux で一貫しており、32 ビットと 64 ビットの両方をサポートするプラットフォームが必要な場合は、もう探す必要はありません。

私は Win32 で CormanLisp を試してみましたが、気に入った点がたくさんありました。ただし、64 ビットの Windows プラットフォームでは正しく動作せず、Win32 に限定されています。それはまた無料ではなく、どういうわけか、ガベージコードを投げるとクラッシュしてしまいました。また、SBCL を簡単にクラッシュさせることもできました。CCLではそうではありません。堅実。本当に、彼らは素晴らしい仕事をし、最終的には Lisp を存続させるのに役立つでしょう。

SLIME に関しては、SLIME を SBCL で動作させようとはしませんでしたが、CCL で問題なく動作するようにしました。あなたの好みが何であれ、簡単に移植できるようにコードを書くことをお勧めします。Windows、Mac、Linux を対象とし、64 ビットを対象としています。これらを考慮すると、CCL が総合的に最適な選択となります。

これに対する答えの最後の試みは、他の人のどこが悪いのかを考えることです。これが私が見つけたものです:

  • CLISP は優れていますが、SBCL や CCL に比べてはるかに低速です。私は少し上向きに見えます
  • SBCL は Win32 では不十分なようです。画像サイズが大きくなることがあります。
  • CormanLisp は Win32 に適していますが、移植性がなく、Windows x64 をサポートしていません。また、Roger Corman は CormanLisp を積極的に開発していないように見えますが、これは残念なことですが、それが現実です。
  • Clojure (「j」付き) はCommon Lispではありません。それは素晴らしいことかもしれませんが、すでに CL を知っているなら、Clojure の多くの相違点を学習するためにオーバーヘッドを費やす価値はないと思います。一部の人はすぐにそれらを拾うかもしれないと確信していますが、私は確かにそうしませんでした. (Java 互換のコードが必要な場合は、ABCL を参照してください)。

デイブ

于 2012-01-17T03:26:48.720 に答える
14

ANSI CLには、特定の詳細を実装に任せて決定する部分があります。標準のこれらの部分については、各実装に独自の癖があることがわかります。

また、ランタイムにとって重要であるが言語で定義されていないものを探します。スレッド化、マルチプロセッシング、ガベージコレクションなどは、パフォーマンスと信頼性が大幅に異なります。

私は、SBCLがLinuxで動作する最も簡単な実装であることに気づきました。Linuxでのスレッド化を適切にサポートしています。ガベージコレクターについては、まだあまり重要ではないので、あまり言えません。

Windowsでは、おそらくAllegroまたはLispWorksが最善の策ですが、Windowsでのclispである程度の成功を収めています。SBCLのWindowsポートは進歩していますが、私はあまり使用していないので、コメントすることはできません。

一般的に言って、調査や分析では得られないこれらの種類のものの理解。それは経験を通してもたらされます。使い慣れた適切な実装を選択して、作業を開始してください。あなたが行くにつれて、あなたはトリッキーなものを理解するでしょう。

于 2009-02-22T04:38:10.730 に答える
3

詳細な回答を提供するのに十分なことはわかりませんが、AIクラスでCLを使用しているときに、SBCLがClispよりもかなり高速であることに気付きました。やむを得ない理由がない限り、SBCLを使用することをお勧めします。

ClispはSBCL(プロセッサ固有の最適化がたくさんある)よりもインストールが簡単で移植性が高いと聞きましたが、Linuxを使用している場合は、どちらもパッケージマネージャーから簡単に取得できます。

于 2009-02-22T04:19:56.920 に答える
3

clisp のエラー メッセージはよりわかりやすく、問題をより迅速に見つけるのに役立ちます。

于 2009-04-20T23:32:26.047 に答える
2

SBCL の REPL は clisp に比べて友好的ではないようです。例: TAB キーを使用して、clisp で入力をオートコンプリートできます。

したがって、clisp は Lisp の初心者に適しています。

于 2011-09-15T07:11:15.977 に答える
1

あなたが窓の下にいるなら、私はcygwinを使ってclispをインストールすることでかなり幸運に恵まれました。

于 2009-08-22T13:55:52.700 に答える
1

選択したOSに依存します

  • Windows - ecl または abcl を使用
  • Linux - sbcl または ecl または abcl または cmucl を使用
  • Mac - ccl または ecl または sbcl
  • その他 - abcl または ecl または sbcl

編集:

Windows 上の sbcl にはスレッド化がなく、一般的にそれほど安定しておらず、Windows を使用するコア メンテナーはいません。

ecl は、クロスプラットフォームの Lisp に適しています。その機能セットは、すべての主要なプラットフォームで同等に安定しています。

EDIT 2011-10: Sbcl ウィンドウでスレッドがサポートされるようになりました。まだメインラインに完全にマージされていませんが、スレッドやその他の Windows 固有の機能を備えたかなり安定したフォークがあります。

于 2009-02-24T16:23:54.060 に答える