Modest opinions  
by a humble autodidact
State-changing和functional是两种截然不同的编程方式,但我突然觉得两种方式不是完全不能统一。可以这样看Statefulness :当覆盖原先的值的时候,原先的值是被“垃圾收集”掉了,而这个“垃圾”不是用遍历graph的方式动态发现的,而是在编译时就决定了--赋值操作的语义包含“我以后再也不会用原来的值了,它现在是垃圾了,马上把它收集了”。这样看法好像没有多大意义,但是由此进一步引出两个可能:1.在FP编译器里大量使用data-analysis,尽量在编译时发现可以回收的“变”量,甚至到把FP程序完全转换成state-changing的地步。其实tail-recursion elimination就是应用于堆栈的这种技术。2.统一的编程方式--程序在更高的抽象级别上描述算法,根本与functional还是stateful无关,编译器自动选择一种方式。对需要节省内存和充分利用寄存器、L1、L2 cache的地方,选择stateful方式;对需要并发计算的地方,编译成functional。
本人PLT门外汉,望达人给予指点。这种想法肯定已有人实践,望指引相关论文。

Update 2010-8-5:
搜索“compile-time GC”,“in-place update”可得相关资料

posted on 2008-03-17 12:38  yushih  阅读(471)  评论(4编辑  收藏  举报