私は Common Lisp を使って開発を始めて 1 年近くになりますが、これには本当に神経質になり始めています。CLISP を使用して CL のプログラミングを開始しましたが、後でスピードのために SBCL に切り替えました。私はかなり低レベルのことをたくさんしているので、多くの C コードとのインターフェースが必要です。私は CL のインクリメンタルな開発の側面が本当に好きです (私は Emacs を使用していません - Vim で SLIMV を実行しています) が、Python、Perl、C、さらには NASM よりも開発が遅いことに気づきました。問題の根本は、SBCL のエラー メッセージにあります。SBCL が私にERROR: Invalid number of arguments on foreign function #< some memory address >
. どの関数が呼び出されたかの指定も、行番号も何もありません。最近では、私は得る喜びを持っていましたThe loaded code expects an incompatible layout for class SB-PRETTY:PRETTY-STREAM.
無作為に。このコードは CLISP では正常に実行されますが、SBCL では不明なエラーで失敗します。これらのメッセージをもう少し有益なものにする方法はありますか? 私は C とアセンブリをほぼ 6 年間書いてきましたが、行番号も教えてくれます。私が見た中途半端な SBCL エラーはリーダー エラーだけでした。これらは通常、括弧の欠落につながるため、ほとんど役に立ちません。繰り返しますが、これを変更するために使用できる宣言/コマンド ライン スイッチはありますか? この時点で、独自のエラー プリンターを作成してもかまいません。
編集:(sb-ext:restrict-compiler-policy 'debug 3)
私の ~/.sbclrc の例 (.sbclrc がロードされるように --script ではなく --load を使用)
debugger invoked on a SB-INT:SIMPLE-PROGRAM-ERROR in thread
#<THREAD "main thread" RUNNING {AB09931}>:
invalid number of arguments: 0
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.
(SB-KERNEL::INVALID-ARG-COUNT-ERROR-HANDLER
#<unavailable argument>
#.(SB-SYS:INT-SAP #XB78CDAE0)
#<SB-ALIEN-INTERNALS:ALIEN-VALUE :SAP #XB78CD7DC :TYPE (*
(STRUCT
SB-VM::OS-CONTEXT-T-STRUCT))>
(79))
0] print
(SB-KERNEL::INVALID-ARG-COUNT-ERROR-HANDLER
#<unavailable argument>
#.(SB-SYS:INT-SAP #XB78CDAE0)
#<SB-ALIEN-INTERNALS:ALIEN-VALUE :SAP #XB78CD7DC :TYPE (*
(STRUCT
SB-VM::OS-CONTEXT-T-STRUCT))>
(79))
0] down
(SB-KERNEL:INTERNAL-ERROR
#.(SB-SYS:INT-SAP #XB78CD7DC)
#<unavailable argument>)
1] down
("foreign function: #x805FCBB")
2] down
Bottom of stack.
正確には有益ではありません。