|
|
1
7
创建循环项远不是唯一可以创建的操作 垃圾 垃圾收集 )在Prolog中(同样值得注意的是,并非所有的Prolog系统都提供对循环项的全面支持,但大多数Prolog系统都支持某种形式的垃圾收集)。 例如,假设您的代码中有以下从数字到原子的调用序列:
您刚刚创建了另一个临时列表。或者你忘了
第二个参数,您不关心的atom后缀(因此是匿名变量),是一个 暂时的 你刚刚创造的原子。但并非所有的Prolog系统都提供atom垃圾收集器,这可能会导致长时间运行的应用程序出现问题。 但是,即使您认为您已经小心地编写了代码以避免创建临时术语,Prolog系统在运行您的代码时可能仍然在创建垃圾。Prolog系统为不同的目的使用不同的内存区域,并且操作可能需要在不同的内存区域之间临时复制内存段,具体取决于实现。Prolog系统可能是用一种语言编写的,例如Java,它最终可能会处理这些垃圾。但最有可能的是用C或C++编写,内部使用某种垃圾收集。更不用说Prolog系统可能会占用一大块内存来证明一个查询,然后在查询终止后回收该内存。 |
|
|
2
4
某物
考虑变量
我不知道在任何特定的Prolog实现中实现了什么样的垃圾回收(有很多方法,有些方法比其他方法更适合Prolog。。。在一个并不完全无关的环境中,25年的Java创造了 all of these (循环结构仅适用于垃圾收集,因为引用计数垃圾收集算法无法释放循环结构,因为循环中的所有单元的引用计数至少为1。)
(另外,一个IMHO,从不信任你必须调用的编程语言
(奥托,生锈似乎需要 middle way ,将一些工作交给开发人员,但其优点是能够在变量超出范围时决定是否释放内存。但生锈不是开场白。) |