On Jun 18, 2010, at 15:11 , Rich Hickey wrote:
> So, let's go easy on the hyperbole. The behavior might not be what you 
> desire, but it is not unsafe.
I agree with both actually it isn't unsafe but in my eyes undesired, met me 
explain.

In generally it seems we have two options:

1) We make fast default and loose auto promotion in the number stack.

2) We make it more difficult to be fast (as in extra work) but keep promotion.

Lets hope that I got this right otherwise the following argumentation can be 
skipped since it's based on this understandings. (of cause there might be a way 
to accomplish both which would - without question the best way to go ;)

Now let see the auto promotion has one very nice effect, it just works. That 
simple and this is in my eyes hugely important, because it gives people a happy 
and fluffy feeling to be able to write normal code without special 
considerations and deep knowledge of types and hinting. Lets face it for 90% of 
people it does not matter that it is a long or bigint or even a double they 
expect math to just work, this is one of the reasons why people enjoy languages 
like Ruby or buy Apple hardware - because it just works (yes we don't play on 
the same ground but it was a good principle of it). If we go to the point where 
people need to know that they have to pass a 42N instead of 42 or get an 
exception it is just plain ugly, it is javaish and that things are not javaish 
is one thing poeple love about clojure, and just to not be tossed in the 
bucket, it is not insecure just horrible inconvenient and annoying.

But lets look at the other side of the coin, performance. We all want it - of 
cause otherwise we'd put a lot of (Thread/sleep 1000) in our code but, again 
lets face the reality, most of us don't need it. Most of the time we don't need 
to do fac or fib or very fast math, in 90% of the cases what clojure offers is 
just fast enough since the bottle necks isn't arithmetics. For the rest 10% of 
the cases, well if you are in that case you likely have a complex algorithm. 
This again means that you belong to the people who really know what they are 
doing, and know what your algorithm works, given that someone in this position 
should know where to put performance  optimization so the fact that it needs to 
be explict isn't that horrible in my eyes usually the code that has to be made 
more complex is alway some kind of focus code where you do way more then just 
toss a few statics on it and hope that it is fast but try every trick to get it 
fast - so you'll have the work anyway.

Now what is my conclusion: lets keep the 'it just works' and sacrifice some out 
of the box performance gains which 90% of the users won't notice anyway and 
half of the people notice it will only do so because they benchmark for exactly 
this. Especially since number arithmetics are rarely the bottlenecks, database 
lookups, string manipulations, IO, network and object allocation those are 
things that eat much performacne in the most cases.

Just my two (european!) cent :)

That said I find the possible performance gain extraordinary and brilliant, and 
I'm all for it just not for the sacrifice of 'it just works'. I rather write 
(long 1) in 2 functions where it is really needed then making sure I write 42N 
or ^Bigint in every function where I'm not 100% certain (which will likely be 
all but the two functions where I'd write logn).


Regards,
Heinz

-- 
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

Reply via email to