评论者:chrisbetz
你好:
感谢您的评论。首先,从一个背景信息说起:我正在开发Sparkling,这是一个Apache Spark的Clojure API。因为它依赖于AOT编译的函数来在集群中分发代码,所以是的,你不能简单地序列化任何一个函数,它必须经过AOT编译。序列化为我们提供了对当前绑定的支持等,一切都能按预期工作。因此,AFunction之所以可序列化,是有原因的,AFn/IFn的其他实现也是一样,一切正常。
关于协议和多方法的运行时状态,我认为它与函数的状态(哪个函数定义、var可能被绑定多次等)和绑定的闭包在概念上是相同的。作为协议的用户,我没有理由相信协议的方法与函数不同。实际上,(ifn? protocol-method)也会返回true。
serializable-fn库最初并非设计用于通过有线序列化,因此在可序列化函数的绑定中的函数集合上有问题,同时还存在Spark环境中相同函数反复创建类而导致的PermGen污染问题。
我觉得我现在没问题了,因为我可以将协议方法包裹在一个函数中,但我仍然认为这是一个bug。
问候
Chris