Lisp 创建大量GenSym是否合理?
我正在考虑使用大量的gensym来区分我正在构建的系统中的对象(比如erlang中的refs) 在创建大量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亿以
作为参考,我使用SBCL。不同的实现使用不同的内存量。仅测试gensym使用的字节数取决于您传递的参数以及前几轮的唯一性 如果您有一个宏总是将固定数量的字符串传递给
gensym
,那么它将使用0,5-1,5kB/次。对于使用同一参数的每个连续变量,其长度将减少到65-150字节左右
有一段时间,我让它生成65字节的gensym,并将其停止在40亿以上,但我不知道是否符合条件,因为“大”是不明确的。什么是大数字?想做些大胆的事情吗?试试
(循环(prin1(gensym)))
。别怪我。最终,这个实验似乎表明gensym数没有限制。此外,您可以通过指定另一个符号作为参数来替换a的G
。@mooncartergensym
接受字符串或正整数。在某些实现中,它可能与符号一起工作,但不可移植。CL中的符号通常是相当大的对象。如果你只是想要很多独特的cookie,那么(cons nil nil)
是一个很好的方法——conse通常是两个词,几乎是尽可能小的词。