评论者:chrisbetz
你好,
感谢评论。首先,有些背景信息:我正在开发Sparkling,这是一个Apache Spark的Clojure API。为了在集群中分发代码,它依赖于AOT编译的函数,因此,你不能简单地对任何函数进行序列化,它需要进行AOT编译。序列化提供了对当前绑定的支持等,一切如预期运行。所以,AFunction之所以可序列化,有一个原因,AFn/IFn的其他实现也是如此,一切运行良好。
关于协议和多方法的状态——我认为它与函数的状态(哪个函数定义,变量可能被多次绑定等)以及绑定中提供的闭包的概念上是相同的。我没有理由作为协议的用户认为协议中的方法与函数不同。事实上,(ifn? protocol-method)也返回true。
serializable-fn最初并不是为了网络传输序列化而设计的,它与序列化函数绑定中的函数集合以及由Spark在相同环境中反复创建同一函数而导致PermGen污染存在问题。
我认为我现在可以,因为我可以将协议方法封装在函数中,但我还相信这是一个错误。
顺祝商祺
Chris