On Fri, Jun 18, 2010 at 8:58 AM, Richard Newman <holyg...@gmail.com> wrote: > It only takes one library to screw up, and the whole stack falls down. > Screwing up can occur because of omission (fact being written with a "1", > not "1N", and not being tested with large inputs), or by design.
It can already happen: a library can screw you by design. (defn fact [n] (loop [r (int 1) n (int n)] (recur (* r n) (dec n)))) user=> (fact 40) java.lang.ArithmeticException: integer overflow (NO_SOURCE_FILE:0) Actually people who want numerical perfs have to do very invasive type hinting and other interfaces workaround because primitives are... primitives (not objects). With contagious bigints (let's nick name them "safeints" and assume they are not BigInteger but something à la kawa) a single N on literals or having all your inputs going through a safeint conversion would trigger safe computations (unless you try to call a static primitive-hinted fn but the compiler would then bark). Of course a rogue fn can still internally convert to primitives and overflow but you can't do anything to protect you from that. As for mixing several numebr representations in a single collection, I think it's a problem of normalizing data but most of the time your are either in safeland or in fastland so your representations will be homogeneous (safehints or (boxed) primitives). A middleground may be to keep the semantics proposed by Rich but: * integer literals default to safeint (unless suffixed by L for long) * scientific notation and decimal literals default to double (unless suffixed by M or N) * implement a better bigint. Christophe -- European Clojure Training Session: Brussels, 23-25/6 http://conj-labs.eu/ Professional: http://cgrand.net/ (fr) On Clojure: http://clj-me.cgrand.net/ (en) -- 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