It's not "silly", it's the fastest way to dispatch fn calls...
> On Thu, Dec 15, 2011 at 8:05 PM, Softaddicts > <lprefonta...@softaddicts.ca> wrote: > > From a JVM perspective, f(& arglist) is a one arg function. > > Try defining a fn with more than 20 args and you will get the > > "can't specify more than 20 arguments...." error. > > This is the maximum supported by the Clojure runtime for "non-optimized" > > fns. > > Well, that's just silly, since a simple change to the fn macro would > make that go away without any hassle, as I already outlined. (The > error would remain for direct users of fn*, of course.) > > > One can argue about the argument size limit of optimized fn calls. Maybe 4 > > is too low. > > These limitations has David pointed out are indirectly inherited from the > > JVM architecture. > > As I understand it, the problem is a combinatorial explosion of > interfaces with various signatures. Which is only a problem because, > for some reason, static calls to optimized fns are not made directly > to the fn's class. Why not just make an optimized fn class look like > > public class MangledName implements IFn { > public Object invoke () { // unoptimized zero-arg version or arity > throw goes here } > public Object invoke (Object x) { // unoptimized one-arg version ... } > ... > public static long optimized (int bar, double quux, Object > fiddlefaddle, long x, long y, long z) { > // optimized version goes here > } > } > > and an optimized call site produce the same bytecode as > > MangledName.optimized(a, b, c, d, e, f); > > with possible unboxing of some of the arguments, and possible boxing > of the return value, depending on the context. An unoptimized call > site would use the IFn interface and behave exactly as now or under > Clojure 1.2. > > > There are multiple ways to work around this limit. Destructuring, passing a > > map, ... > > All of those box any primitives as part of wrapping them in collections. > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > -- Softaddicts<lprefonta...@softaddicts.ca> sent by ibisMail! -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en