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.

Reply via email to