函数式编程语言中的呼叫站点代码替换

时间:2012-10-22 18:03:32

标签: haskell functional-programming

我只是想知道是否有可能实现功能性 语言做网站更换。我设想这个 作为一种特殊的懒惰形式。

基本上我会在某处调用函数f 参数a:

... (f a) ...

然后该功能将设法替换自己 通过带有参数b的函数g:

... (g b) ...

使下次原始呼叫站点(f a)
实际调用(g b)被调用。

欢迎提示。

再见

P.S。:用于即时(JIT)编译。
多态内联缓存等。
例如见:

优化动态类型的面向对象的 多态内联缓存的语言
UrsHölzle,Craig Chambers,David Ungar
ECOOP '91欧洲诉讼程序 面向对象编程会议
http://selflanguage.org/_static/published/pics.pdf

2 个答案:

答案 0 :(得分:13)

这基本上就是自动机箭头:

newtype Auto a b = Auto (a -> (b, Auto a b))

在Haskell中,函数无法替换自身,但自动机箭头表示返回其自身新版本的函数以及结果:

switcher :: Bool -> Auto Bool Bool
switcher x =
    Auto $ \y ->
        (x, switcher $ if y then not x else x)

关于自动机箭头的有用之处在于它是一个箭头,因此Category实例允许您组合这些函数。还有一个非常有用的应用实例。

附注:这是箭头化功能反应式编程(AFRP)的基础。

答案 1 :(得分:2)

在Haskell中,您可以通过RULES编译指示提供自定义优化重写 有关详细信息,请参阅the GHC user guide > Rewrite Rules