Compiler errors 鸡肉方案:加载或编译时缺少警告/错误消息

Compiler errors 鸡肉方案:加载或编译时缺少警告/错误消息,compiler-errors,chicken-scheme,Compiler Errors,Chicken Scheme,我在鸡肉计划中玩了一会儿,但我注意到了一些不寻常的事情。假设我有以下简单的源文件: (define (f x) (g x)) 很明显(对人类来说)这是行不通的。当我启动csi并手动输入此函数定义时,我会收到以下消息: Note: the following toplevel variables are referenced but unbound: g (in f) 很高兴知道!在运行大型程序之前,在它们中查找拼写错误是很好的。现在,让我们再次启动csi并尝试加载该文件: (loa

我在鸡肉计划中玩了一会儿,但我注意到了一些不寻常的事情。假设我有以下简单的源文件:

(define (f x)
  (g x))
很明显(对人类来说)这是行不通的。当我启动
csi
并手动输入此函数定义时,我会收到以下消息:

Note: the following toplevel variables are referenced but unbound:

  g (in f)
很高兴知道!在运行大型程序之前,在它们中查找拼写错误是很好的。现在,让我们再次启动
csi
并尝试
加载该文件:

(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 
$ 
没有。即使我在文件末尾添加了一行
(f2)
(为了避免
f
-函数被优化掉),我仍然没有收到任何类型的错误消息或警告

为什么??解释器(或者至少是手册
加载它的一部分)如何能立即注意到这个问题,而编译器却不能?有趣的是,编译器有一个
-no warnings
参数。正如预期的那样,由于没有警告,它什么也不做


我错过了什么?我怎样才能修好它?它是可以修复的,还是我必须手动
csi
中加载
每个涉及的文件,然后才有信心编译任何程序?

这不会给出错误消息的原因是CHICKEN支持单独编译。这就像在示例C中一样:您可以单独编译文件,然后将它们链接在一起,形成一个可执行文件。此外,还可以(重新)定义通过
eval
运行的代码中的变量,这意味着编译器不能对此进行太多假设(默认情况下)

如果你想得到一个错误,我建议你。这些被认为是完全“封闭的世界”,因此如果标识符未被引用,它将产生错误:

$ cat foo.scm

(module foo (f)
   (import chicken scheme)
   (define (f x)
     (g x))
)

$ csc foo.scm
Warning: reference to possibly unbound identifier `g' in:
Warning:    main#f

Error: module unresolved: main

Error: shell command terminated with non-zero exit status 256: csc foo.scm
为了方便起见,您还可以使用
csc-M
将整个代码隐式包装在一个(无名)模块中