评论者:chrisbetz
你好,
感谢你的评论。首先,让我们回到背景:我正在开发Sparkling,Apache Spark的Clojure API。由于在集群中分发代码,它依赖于AOT编译的函数,所以是的,你不能简单地序列化任何函数,它需要进行AOT编译。序列化为我们提供了对当前绑定等的支持,并且一切都按预期工作。因此,AFunction具有可序列化的原因,AFn/IFn的其他实现也是如此,一切都很顺利。
关于协议和多方法的状态 - 我认为它与函数的状态(哪个函数定义、var可能被多次绑定等)以及提供的闭包的状态在概念上是相同的。作为协议的用户,我没有任何理由认为协议中的方法与函数不同。事实上,(ifn? protocol-method) 也返回true。
serializable-fn由于其本意不是用于网络序列化,因此在序列化函数的绑定中的函数集合以及在Spark环境中为同一函数重复创建类的上下文中,会有 PermGen 污染的问题。
我认为我现在没问题,因为我可以包装协议方法在函数中,但我仍然认为这是一个 bug。
祝好
Chris