gpt4 book ai didi

compiler-errors - 鸡计划 : Missing warnings/error messages when loading or compiling

转载 作者:行者123 更新时间:2023-12-02 10:45:16 26 4
gpt4 key购买 nike

我在小鸡计划中玩了一会儿,但我发现了一些不寻常的东西。假设我有以下简单的源文件:

(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 -函数被优化掉)我仍然没有收到任何类型的错误消息或警告。

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

我错过了什么?我该如何解决?它可以修复还是我必须手动 load 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为方便起见,将整个代码隐式包装在(无名)模块中。

关于compiler-errors - 鸡计划 : Missing warnings/error messages when loading or compiling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38129820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com