Lisp 创建大量GenSym是否合理?

Lisp 创建大量GenSym是否合理?,lisp,common-lisp,symbols,sbcl,Lisp,Common Lisp,Symbols,Sbcl,我正在考虑使用大量的gensym来区分我正在构建的系统中的对象(比如erlang中的refs) 在创建大量GenSym之后,我是否应该期望遇到系统限制 作为参考,我使用SBCL。不同的实现使用不同的内存量。仅测试gensym使用的字节数取决于您传递的参数以及前几轮的唯一性 如果您有一个宏总是将固定数量的字符串传递给gensym,那么它将使用0,5-1,5kB/次。对于使用同一参数的每个连续变量,其长度将减少到65-150字节左右 有一段时间,我让它生成65字节的gensym,并将其停止在40亿以

我正在考虑使用大量的gensym来区分我正在构建的系统中的对象(比如erlang中的refs)

在创建大量GenSym之后,我是否应该期望遇到系统限制


作为参考,我使用SBCL。

不同的实现使用不同的内存量。仅测试gensym使用的字节数取决于您传递的参数以及前几轮的唯一性

如果您有一个宏总是将固定数量的字符串传递给
gensym
,那么它将使用0,5-1,5kB/次。对于使用同一参数的每个连续变量,其长度将减少到65-150字节左右


有一段时间,我让它生成65字节的gensym,并将其停止在40亿以上,但我不知道是否符合条件,因为“大”是不明确的。

什么是大数字?想做些大胆的事情吗?试试
(循环(prin1(gensym)))
。别怪我。最终,这个实验似乎表明gensym数没有限制。此外,您可以通过指定另一个符号作为参数来替换a的
G
。@mooncarter
gensym
接受字符串或正整数。在某些实现中,它可能与符号一起工作,但不可移植。CL中的符号通常是相当大的对象。如果你只是想要很多独特的cookie,那么
(cons nil nil)
是一个很好的方法——conse通常是两个词,几乎是尽可能小的词。