These are good insights.  I am interested in following your
development, and you've made a convincing argument as to why you need
a new compiler.

I agree that reflection will kill you.  I actually hadn't thought
about this, but it seems like there should be some sort of analysis to
be able to get rid of the overly large reflective cost.  Since inside
your interpreter you will use a fairly fixed set of reflective calls,
I would assume that for (example) long loops inside the program
reflective calls could also be handled by the JIT (but, I assume they
are *not*).  Still, I agree that if the numbers are as you say, then
having a compiler to Dex bytecode will help.

FYI from a research standpoint I am interested in doing something with
this.  I was going to work on implementing my own language for
scripting apps, but I feel that would be a slight waste of time, as I
really care more about the semantics within apps.

So this is cool, I'd like to see if the language you have models the
sort of thing I want to express, I believe it may.  In any case, I
will take a look at your compiler this weekend.

FYI during a project I work on we've written a compiler (really binary
rewriter) for Dalvik bytecode in OCaml, though if you wanted to use it
as part of your project you would have to properly port the ocaml
runtime to Android (unless you could deal with doing development on a
machine and  then having it loaded to a phone all the time, which I
probably would for my research purposes..).

Anyway, thanks for the clarification, I'll be sure to take a look.  If
you want any help, or have ideas on what you'd like to do next, I'd be
interested in hearing.

Slight word of advice: android-developers is probably a sort of bad
place to announce this.  Why?  Because most people on this list are
just here looking for immediate advice about how to fix their broken
app... You might also try broadcasting on android-platform or
something, I'm not sure where the proper place to announce this would
be, actually...

Do you have  a community set in place for your language?  (I.e., a
mailing list I can join to watch your development?)

Also, as matter of personal preference, would you ever consider
switching to github ... :-P... I just don't like the google code
interface as much...

kris

On Thu, Sep 27, 2012 at 6:29 AM, Ross Bamford <[email protected]> wrote:
>
>
> On Wednesday, 26 September 2012 08:01:07 UTC+1, Kristopher Micinski wrote:
>>
>> On Tue, Sep 25, 2012 at 9:22 PM, Ross Bamford <[email protected]> wrote:
>> > Hi,
>> >
>> > On Saturday, 23 June 2012 12:27:31 UTC+1, mame82 wrote:
>> >>
>> >> A first naive approach using luajava was far to slow for a method
>> >> called
>> >> about 5k times per frame. I need a way to compile to Dalvik bytecode at
>> >> runtime.
>> >>
>> >> Has anybody done sth like this, it seems impossible without the javac
>> >> class?
>> >> A scripting language supporting compilation to Dalvik DEX code would
>> >> also
>> >> help.
>> >
>> > Apologies for reviving an old thread. If you've already found a solution
>> > to
>> > this, please ignore me :)
>> >
>> > We open-sourced Deelang, our lightweight in-app scripting language about
>> > a
>> > year ago. Recently, I've been working on a native (i.e. DEX) compiler
>> > for
>> > it. The compiler runs on-device and allows you to take script code and
>> > compile it a runtime-generated Class. Right now it's almost
>> > feature-complete
>> > but only tested to the extent that we use it in-house. It may well work
>> > for
>> > your needs? And in any case, more testers are always welcome ;)
>> >
>>
>> So I guess my question is, what does this provide over something say
>> like, Groovy, would that work on Android.
>
>
> AFAIK, Groovy doesn't work on Android at the moment? But in any case, the
> two are targeting different people - Deelang is very lightweight, and does
> not aim to be a complete scripting language. It's designed purely to provide
> the possibility for developers to provide scriptable "extension points" in
> their apps. This means it can be small (in terms of Jar size).
>
>>
>>
>> Also, generating native != generating Dalvik bytecode, to me :-/ ...
>> that would be ... generating bytecode.
>>
>
> You're right - I meant to put quotes around "native" there. My intention was
> to draw a comparison between "native" DEX bytecode versus the custom
> bytecode format and VM used in the original Deelang compiler. I am by no
> means claiming that this thing compiles directly to machine code.
>
>>
>> > You'll find the project at http://deelang.googlecode.com/ . To get the
>> > native compiler, you'll need to check the DEXCOMPILER branch out of
>> > subversion (a file release is planned soon, but not yet).
>>
>> Hm...
>>
>> You might be surprised that generating Dex doesn't help you as much
>> here as you might think.  Why?  Because, let's say you're comparing
>> this with code that you have running through an interpreter (okay, so
>> you've converted your scripting language to a sort of intermediate
>> form or something beforehand like Lua intermediate..)  Now, your
>> interpreter will run over this code in some systematic structure, and
>> your wanting to use Dex is because you can translate this into Dalvik
>> bytecode.
>>
>> But note!  You will probably find that you will get "pretty good" perf
>> out of this interpreter (sans bytecode generation) already, because
>> Dalvik's (trace based) JIT will knock out "hot paths" of code along
>> your bytecode generation.
>>
>
> I agree with your sentiment here - I've long been a proponent of not
> generating code purely for performances' sake. Some years ago I wrote a
> bytecode generation framework for Java (a project that was lost in the
> java.net changeover) and included with that was a warning about the
> perceived "benefits" of code gen with regard to performance from a naive
> viewpoint.
>
> However, in this case, the compilation to DEX *does* give a considerable
> performance boost, and mostly for one reason - it allows us to cut out
> Reflection. In the custom VM, all method calls are done by reflective
> invocation, which as I'm sure you're aware carries a fairly heavy penalty.
> When compiling for DEX, method calls are instead statically linked and
> compile down to invokeVirtual instructions.
>
> Since everything in Deelang is a method call, getting away from reflection
> is a huge win here, and was the primary reason I started on the dex
> compiler.
>
>>
>> Do you have any firm numbers to support this either way?
>
>
> The project is still under active development, so obviously it's too early
> for any real benchmarking to take place, but I did run a quick and simple
> test so I'd have something to illustrate the kind of performance boost we're
> getting.
>
> This is running the script "a = foo.timesTwo(3+2)" (where timesTwo is a Java
> method whose implementation I'm sure you can guess) over 10000 runs, on both
> the original Deelang VM and as a Dex compiled script.
>
> 09-27 10:45:27.525: I/BENCHMARK(15853): Rehearsal
> 09-27 10:45:37.665: I/BENCHMARK(15853): DeeVM completed : 10000 runs :
> 10107ms (10.107 seconds)
> 09-27 10:45:37.725: I/BENCHMARK(15853): Dex completed   : 10000 runs : 31ms
> (0.031 seconds)
> 09-27 10:45:37.725: I/BENCHMARK(15853): Real
> 09-27 10:45:46.695: I/BENCHMARK(15853): DeeVM completed : 10000 runs :
> 8938ms (8.938 seconds)
> 09-27 10:45:46.745: I/BENCHMARK(15853): Dex completed   : 10000 runs : 25ms
> (0.025 seconds)
>
> (The actual benchmark code can be found at
> https://code.google.com/p/deelang/wiki/DeelangPerformance)
>
>>
>> kris
>
>
> Regards,
> Ross
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to