评论由:chrisbetz
你好,
感谢你的评论。首先,关于背景:我正在开发Sparkling,这是一个Clojure API,用于Apache Spark。为了在集群中分发代码,它依赖于AOT编译的函数,所以,是的,你不能简单地序列化任何函数,它需要经过AOT编译。序列化为我们提供了对当前绑定等的支持,一切按预期工作。因此,AFunction之所以可以序列化,有它的原因,AFn/IFn的其他实现也是如此,一切正常。
至于协议和多方法的状态 - 我认为它与函数的状态(哪个函数定义,var可能被绑定多次等)和绑定提供的闭包在概念上相同。用户没有理由相信协议的方法与函数不同。实际上,(ifn? protocol-method) 也返回true。
serializable-fn并非最初就打算用于网络传输的序列化,因此在序列化函数的绑定中的函数集合以及Spark上下文中不断创建同一函数的类导致PermGen污染存在问题。
我认为现在我可以解决问题,因为我可以将协议方法封装在函数中,但我仍然认为这是一个bug。
问候
Chris