1

しばらくチキン スキームをいじっていましたが、何か変わったことに気付きました。次の単純なソース ファイルがあるとします。

(define (f x)
  (g x))

これが機能しないことは (人間の Bean にとって) 明らかです。起動してcsiこの関数定義を手動で入力すると、次のメッセージが表示されます。

Note: the following toplevel variables are referenced but unbound:

  g (in f)

知っておくと便利です。大規模なプログラムを実行する前に、タイプミスを見つけるのは良いことです。csiそれでは、もう一度起動してload、ファイルを試してみましょう。

(load "test.scm")

出力:

; loading test.scm ...

Note: the following toplevel variables are referenced but unbound:

  g (in f)

また良い。csiでは、そのファイルで起動してみましょう!

$ csi test.scm 

CHICKEN
(c) 2008-2015, The CHICKEN Team
(c) 2000-2007, Felix L. Winkelmann
Version 4.10.0 (rev b259631)
linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ]
compiled 2015-08-04 on yves.more-magic.net (Linux)

; loading test.scm ...
#;1> 

ええと...エラーメッセージはどこに行きましたか? なぜそこにないのですか?さて、実際にコンパイルしようとすると文句を言うかもしれません...

$ csc test.scm 
$ 

いいえ。(f 2)ファイルの最後に行を追加しても( f-function が最適化されないようにするため) 、エラー メッセージや警告は表示されません。

なんで?インタープリター (または少なくともその手動load部分) はこの問題にすぐに気付くことができますが、コンパイラーはそれができません。おかしなこと-no-warningsに、コンパイラには引数があります。予想どおり、警告がないため何もしません。

私は何が欠けていますか?どうすれば修正できますか?それは修正できますか、それとも実際にプログラムを自信を持ってコンパイルする前にload、関連するすべてのファイルを手動で手動で作成する必要がありますか?csi

4

1 に答える 1