我有以下鸡肉计划代码:
; test.scm
(use coops)
(define-class <Vector2> ()
(
(x initform: 0 reader: get-x writer: set-x! )
(y initform: 0 reader: get-y writer: set-y! )
)
)
(define v (make <Vector2>))
(print v)
(newline)
运行
$ csc test.scm
$ ./test
给予
#<coops instance of `<Vector2>'>
这是我的期望。
当我添加
(declare (uses coops))
上方
(use coop)
运行
$ csc test.scm
给予
test.o: In function `f_494':
test.c:(.text+0x908): undefined reference to `C_coops_toplevel'
collect2: error: ld returned 1 exit status
Error: shell command terminated with non-zero exit status 256: 'gcc' 'test.o' -o 'test' -L/usr/local/lib -Wl,-R'/usr/local/lib' -lchicken -lm -ldl
有什么作用?预先感谢。
答案 0 :(得分:1)
这些声明实际上是用于静态链接的。
这里的想法是编译器将生成对coops顶层的调用,以便此单元被初始化,但未链接到您的程序中(use
将在运行时加载扩展并将其链接到您的程序中程序)。
我知道,这很令人困惑。至少在《鸡》 5中,这个东西变得更简单了。如果我们不遇到任何重大障碍,将在两周内完成CHICKEN 5的候选发布,因此它确实非常接近于发布!