评论来自:chrisbetz
你好,
感谢您的评论。首先,有一些背景信息:我正在开发Sparkling,这是一个用于Apache Spark的Clojure API。它依赖AOT编译的函数来在集群中分发代码,因此是的,你不能简单地序列化任何函数,它需要AOT化。序列化为我们提供了对当前绑定等的支持,一切如期工作。所以,AFunction的可序列化是有原因的,其他的AFn/IFn实现也是如此,一切运行良好。
至于协议和多方法的状态 - 我认为它从概念上与函数的状态(哪个函数定义,可能绑定了多个var等)相同,以及绑定中给出的闭包。作为协议的用户,我没有理由相信协议中提供的方法与函数不同。事实上(ifn? protocol-method)也返回true。
serializable-fn,最初并不是为了经网络序列化而设计的,因此在与可序列化函数的绑定中的函数集合有关问题,以及在Spark环境中通过重复创建同一函数的类造成PermGen污染的问题。
我认为我现在还可以,因为我可以把协议方法包裹在函数中,但是我仍然相信,这是一个bug。
问候
Chris