GC

pivot-lang 是一门使用gc进行内存管理的语言。

pivot-lang 的gc目前是使用rust写的,采用一种叫做immix[[1]](https://www.cs.utexas.edu/users/speedway/DaCapo/papers/immix-pldi-2008.pdf)的mark region算法。

在以前的版本中,我们使用的是我们现在叫做simple gc的垃圾回收算法,他是一个简单的mark-sweep算法。 它由于性能问题和不支持多线程等原因最终被immix取代。

Immix GC

immix gc是一种mark region算法,它是一个精确的gc算法。但是请注意,它的精确建立在使用它 的项目提供的特殊支持之上。可以认为目前我们的immix gc实现 是为pivot-lang量身定制 的。pl编译器为了和我们的immix gc配合,会在编译时专门生成一些额外的代码,如果缺少这些代码,immix gc将无法正常工作。 所以虽然理论上我们可以将我们的immix gc用到其他项目中,这么做的效益很可能并不是很高-- 缺少编译器的支持,使用者将需要手动添加那些额外的代码。

immix gc的实现代码在这里