私は、他の人が書いたいくつかの古い Common Lisp コードに基づいて構築しています。これには、いくつかの関数の開始時に次のような行が含まれています。
(declare (ftype (function (&rest float) float) + - * min max))
私の理解では、これの目的は、フォームの最後にリストされている 5 つの関数に float のみが渡されることをコンパイラに伝えることです。コンパイラはこの情報を使用して、より効率的なコードを作成できます。
一部の Lisp はこの宣言について不平を言いません (ABCL、CCL、ECL、LispWorks、CLISP) が、SBCL はデフォルト構成でこの宣言を受け入れません。SBCL は、配置することでそれを受け入れるようにすることができます
(unlock-package 'common-lisp)
.sbclrc 初期化ファイル内。それが私が過去1年ほどやってきたことです。+、- などがそのパッケージに含まれており、コードがこれらの関数の宣言を変更するため、これが必要であると思います。
私の質問は次のとおりです: + や min などの組み込み関数の関数型を宣言すると、SBCL でコンパイルされたコードに有益な効果がありますか? (できるのなら、なぜ SBCL はデフォルトでこれらの宣言について文句を言うのですか?) そのような ftype 宣言を削除してから、unlock-package
.sbclrc の行を削除したほうがよいでしょうか?
ありがとう。