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