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
将整个代码隐式包装在一个(无名)模块中