You can typehing ints for locals (let, loop), restrictions are just for function arguments. AFAIK the reason is combinatorial explosion at https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/IFn.java#L91 I have the same problem with char. Because I cannot typehint e.g. my whitespace? function with ^char, I recieve a boxed Object and thus cannot use == for comparison.
JW On Mon, Sep 9, 2013 at 6:02 PM, Mikera <mike.r.anderson...@gmail.com> wrote: > +1 for supporting all the JVM primitive types properly. > > It is worth noting that the benefits would extend much further than just > OpenGL, e.g.: > - int is a commonly used type in Java interop. Casting to/from it all the > time is a minor annoyance/overhead > - int is the type used for array indexing on the JVM > - all the small (< 8 byte) primitive types save memory footprint, which > is important since memory bandwidth is the limiting factor in some workloads > - int/float fit into a register (and therefore perform much better) on 32 > bit machines (which still exist, believe it or not....) > - char is a pretty useful primitive type if you are doing text processing > - byte is also frequently useful, especially for IO > > I believe that with some enhancements to the Clojure compiler, supporting > all the JVM primitive types shouldn't be too difficult, and it would > provide many benefits both in terms of overall performance and interop > convenience. > > On Monday, 9 September 2013 21:43:12 UTC+8, Alex Fowler wrote: >> >> Hello! >> >> With this letter I would like to receive an answer from somebody from the >> development team (if anyone else has something to say, you're surely >> welcome :) ). >> >> I am working for a big multimedia company and recently I have been >> considering moving to Clojure as the main language of development. We have >> been doing Java and Scala before, but now when I tried Clojure and see the >> possibilities it provides, I would definitely stand for it to be our >> ground. However, while I am so satisfied with everything - the language, >> the community, the Java interop, there is still something that hinders and >> makes me linger. Namely, the lack of good support of floats and ints in the >> language. While many people would not consider it to be a huge disadvantage >> or even notice it, things are not so bright when it comes to OpenGL. >> >> The case is that OpenGL and 3D graphics hardware in general has no >> support for doubles or longs. Therefore, all libraries, all data and all >> computations are meant to be performed with floats and ints (shaders too). >> Due to the lack of good support of these data types in Clojure (for >> example, there are no ^float and ^int typehints, float and int values can >> only be typecasted to, all calculations always retain doubles and longs), >> results in too many extra typecasts, which are absolutely unnecessary and >> take too much time. So, calculations become very cumbersome, even if we do >> not take mandatory boxing into account. >> >> Considering that such kinds of calculations are usually abuntant in the >> aforementioned types of applications, the penalty grows really huge. I have >> endeavoured several discussions on the IRC to find out possible >> workarounds. Although many good proposals by many good people were made, >> aimed at improving the situation, none of them could solve the fundamental >> lack of the ability to manipulate 32bit primitive (or even boxed) data >> types. That lack renders Clojure not really suitable for heavy-load OpenGL >> applications that require somewhat extensive calculations: some kinds of >> games, simulations, generative graphics and so on. Considering how superior >> Clojure is to any other language available for JVM, that black spot looks >> especially embarrasing. And I could imagine falling back to Java for fast >> computations, just like we fall back to ASM in, say C, that is very >> undesirable and discouraging, since we want to pick Clojure for Clojure and >> it will be too cumbersome to make 50/50% Java/Clojure apps just to work >> around that design decision. >> >> Therefore, while deciding if to pick Clojure as the base for our >> development, I would like to know answers to the following questions: >> >> 1) What is the current reason for the support for these types to be >> missing? >> 2) Are there any plans for improvement of support for floats, ints and >> maybe, localized unboxed calculations? Or is there some advice on how to >> enable their support? >> 3) What is you vision for Clojure + OpenGL applications? >> 4) Is it possible to request support for floats, ints and maybe shorts >> for the language? >> 5) Is it possible to request support for localized unboxed calculations, >> like (with-unboxed ... ) and localized float-only and int-only >> calculations, like, say in special macros (with-floats-&-ints ... here go >> (+) (-) and stuff ONLY with floats/ints ... ) ? >> >> Preferably, I would like to hear the answers from somebody from the >> development team, because I have already received enough support from the >> community, on the IRC, I appreciate it, but now I have to make a serious >> choice for our company and I feel quite responsible for that. I also feel >> that these questions are very important for any specialist that works with >> OpenGL and influence Clojure acceptance for OpenGL-enabled applications >> world-wide. Thank you. >> > -- > -- > 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 > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > -- -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.