我需要某种liblisp
(在C11),这将需要处理的基本功能,很像什么libobjc
做了Objective-C语言。
编辑
我rewritting问题较少通用的东西。
我有这样一个实现:
typedef struct cons {
void *car, *cdr;
} *cons_t;
cons_t cons_init(void *, void *);
void *cons_get_car(cons_t);
void *cons_get_cdr(cons_t);
void cons_set_car(cons_t, void *);
void cons_set_cdr(cons_t, void *);
void cons_free(cons_t);
bool cons_is_managed(cons_t);
所以,我可以做一个利弊细胞(它使用参照计算对象的内存池)。 我还可以使用cons_is_managed
来检查利弊细胞是内存池里面(这样你就可以使用外部定义的细胞,而不是与创建cons_init
(如静态数据)。
我怎么能有效地实现自动引用计数这里,使得如果有人致电cons_set_car
或cons_set_cdr
会递增引用计数,如果void *
参数是一个管理cons单元?
在后宫和乌龟问题就不会在这里很有用,因为每个单元有两种可能的方式去(和它哪儿都不能去,如果汽车也CDR是conses之外),也可以是表,树或图形。
我应该注册使用在外部(非管理)conses之外cons_set_car
/ cons_set_cdr
,以便找到涉及它们的周期,但我仍然不知道如何有效地做到这一点。
由于这是一个更controled方面则一般周期曲线图(两个顶点的节点上最大),是否有任何机会,我可以以线性的时间做到这一点,避免了垃圾收集(这将是我的B计划)?
主要的问题是,这是任何功能性语言的核心,所以这些功能将被调用了很多次(如obj_msgSend
),他们是瓶颈。
谢谢。
在不同的方法,以简化问题:一个人如何可以实现基于引用计数语言,像Objective-C的+ ARC或瓦拉一个cons单元?