gpt4 book ai didi

lisp - CLISP 中忽略了 DYNAMIC-EXTENT?

转载 作者:太空宇宙 更新时间:2023-11-03 18:50:22 25 4
gpt4 key购买 nike

我读了here Common Lisp 中的动态范围声明“允许实现忽略”,我想知道它是否在 CLISP 实现中实际上被忽略了。

我已尝试使用以下代码进行测试:

(let ((b (cons 1 2))) 
(declare (dynamic-extent b))
(list b))

哪个返回:

((1 . 2))

我的猜测是它被忽略了,但我想确定一下。

另外,如果它被忽略,我有没有办法显式地将内存分配给堆栈而不是堆?

最佳答案

> 有没有办法明确地将内存分配给堆栈而不是堆?

不,您应该感谢它,因为它消除了程序中的一整类错误:不会有指向已死对象的“悬挂指针”,这些指针会使您的程序崩溃。

此外,使用 CLISP 或类似的实现,您不需要堆栈分配的内存,因为:

  • 垃圾收集器可以快速消除短生命期的对象,CLISP 的垃圾收集器通常消耗不到 10% 的 CPU 时间。
  • CLISP 的垃圾收集器是分代的,这意味着收集短期对象特别快。一旦收集了一个短期对象,下一个短期对象将被分配到同一个小内存区域 - 所以你有一个类似于堆栈的速度改进(通过使用局部性)。

最后,坚持对象的堆栈分配会阻止您自由选择适合您的问题的编程风格。 Lisp 支持多种编程风格:函数式、过程式、面向对象、基于模式、逻辑、关系、规则、面向目标等等。通过请求堆栈分配,您可以限制自己使用函数式和过程式编程风格;这真的不会让你前进。

关于lisp - CLISP 中忽略了 DYNAMIC-EXTENT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47254891/

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