Can you post the actual code you're compiling? > On 24 Feb 2016, at 20:03, Michael du Breuil <wicked.shell.scri...@gmail.com> > wrote: > > I posted the disassembly from the AOT'd result, so I'm pretty clearly still > seeing all the casting happening at runtime. I'm not sure why that is > different then no.disassemble... > > On Wednesday, February 24, 2016 at 5:05:30 AM UTC-7, Nicola Mometto wrote: > > > On 24 Feb 2016, at 11:58, Michael du Breuil <wicked.she...@gmail.com> wrote: > > > > That just performs a runtime cast to a variable then reference the variable > > later, which is even worse. > > > > float x = RT.uncheckedFloatCast(-199L);((SpriteBatch)batch) > > > > .draw((TextureRegion)((IFn)const__5.getRawRoot()).invoke(const__42.getRawRoot()), > > x, > > > > RT.uncheckedFloatCast(-32L)); > > > > > No it doesn't. > > having > > (ns test) > > (definterface Foo > (x [^float y])) > > (let [a (float 1)] > (defn y [b] > (.x ^Foo b a))) > > This is the disassemble of y's invoke method: > > public java.lang.Object invoke(java.lang.Object); > Code: > 0: aload_1 > 1: aconst_null > 2: astore_1 > 3: checkcast #18 // class test/Foo > 6: aload_0 > 7: getfield #14 // Field a:F > 10: invokeinterface #22, 2 // InterfaceMethod > test/Foo.x:(F)Ljava/lang/Object; > 15: areturn > > No float cast involved there. The primitive float is closed over and used > directly. > > > I definitely expected the compiler to pay attention to it, although I also > > discovered at the same time that the compilier doesn't actually resolve > > expressions like (+ (* 2 4) 1) to just be 9 at compile time either, even > > though all the values were constants. Both of these are a problem because > > they are inside the hot loop of the program. (There are some constant math > > expressions that are only expressions as it is easier to read/change > > ^:const named things then to just put one resultant number. > > > > Is it worth opening a Jira issue for resolving either or both of these at > > compile time? I looked a briefly at the definition for (float ) but I'm not > > at all familiar with how the byte code is generated and how to actually > > replace that with what I'm looking for. > > Sure, although I don't think doing this kind of constant folding this is > going to be a priority. > > > > > On Wednesday, February 24, 2016 at 3:58:46 AM UTC-7, Nicola Mometto wrote: > > Those are runtime casts, this is the expected behaviour (although one could > > argue that clojure should be able to optimize them away at compile time). > > > > If you want to avoid the runtime casting, you can do something like this: > > > > (let [x (float 123)] > > (defn y [..] > > (.foo bar x))) > > > > > > > On 24 Feb 2016, at 10:53, Michael du Breuil <wicked.she...@gmail.com> > > > wrote: > > > > > > The following (this is interop with libgdx if anyone is curious, > > > hud-corner-top-left is a delayed TextureRegion > > > > > > (.draw batch ^TextureRegion @hud-corner-top-left > > > (float -199) > > > (float -32)) > > > > > > Which yields the following: > > > > > > .draw((TextureRegion)((IFn)const__5.getRawRoot()).invoke(const__41.getRawRoot()), > > > RT.uncheckedFloatCast(-199L), > > > RT.uncheckedFloatCast(-32L));null;((SpriteBatch)batch) > > > > > > Unless I'm missing something on how to interpret bytecode :) I can post > > > more source if you want but that is one interop call and its generated > > > code, the rest will look the same. > > > > > > On Wednesday, February 24, 2016 at 3:44:11 AM UTC-7, Nicola Mometto wrote: > > > Can you post the code? > > > > > > > On 24 Feb 2016, at 10:26, Michael du Breuil <wicked.she...@gmail.com> > > > > wrote: > > > > > > > > I have some interop code that I have carefully specified all the > > > > arguments to be in the correct type (IE the function signature takes 3 > > > > floats, so I cast everything to float so that I can avoid reflection). > > > > What I'm surprised by is compile time constants such as (float -173) or > > > > (float 8.5) are not saved as the correct primitive type, using jd-gui I > > > > see that these were actually turned into RT.uncheckedFloatCast(-173L), > > > > and RT.uncheckedFloatCast(8.5D), respectively. Why isn't this just > > > > saved as a the correct primitive directly in the generated bytecode? > > > > This is with clojure 1.8.0 > > > > > > > > -- > > > > You received this message because you are subscribed to the Google > > > > Groups "Clojure" group. > > > > To post to this group, send email to clo...@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+u...@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+u...@googlegroups.com. > > > > For more options, visit https://groups.google.com/d/optout. > > > > > > > > > -- > > > You received this message because you are subscribed to the Google > > > Groups "Clojure" group. > > > To post to this group, send email to clo...@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+u...@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+u...@googlegroups.com. > > > For more options, visit https://groups.google.com/d/optout. > > > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Clojure" group. > > To post to this group, send email to clo...@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+u...@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+u...@googlegroups.com. > > For more options, visit https://groups.google.com/d/optout. > > > -- > 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/d/optout.
-- 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/d/optout.
signature.asc
Description: Message signed with OpenPGP using GPGMail