I'm still cleaning up my changes.  But with regards to the repl, I'm
just using   clojure.contrib.server-socket and invoking it like so
from the :create routine:

   (create-repl-server 8030)
   (repl)


On Jun 16, 12:28 am, rb <raphi...@gmail.com> wrote:
> On Jun 16, 5:51 am, George Jahad <andr...@blackbirdsystems.net> wrote:
>
>
>
> > Remco van't Veer has done a lot of great working porting Clojure to
> > Android, but one thing remains missing, runtime compilation which
> > would allow a fully functional Repl.  The problem is that the Android
> > VM doesn't use standard Java class files but rather Android specific
> > ones.  There is a host-side tool that converts Java byte codes to
> > Android ones.  But that tool doesn't normally run on Android.
>
> > So, being an Android systems hacker, I was wondering how hard it would
> > be to get runtime compilation working.
>
> > Turns out, it doesn't seem to be too hard.  The trick is basically to
> > run the Java to Android/Dalvik byte code converter through itself, so
> > that the convertor can be run on Android; if you load that converted
> > convertor into Android, you can then invoke it after each class is
> > compiled, essentially like this:
>
> > if(RT.booleanCast(COMPILE_FILES.deref()))
> >   {
> >     writeClassFile(internalName, bytecode);
> >     String strings[] = {"--dex", "--output=/data/gbj/classes.dex", "/
> > data/gbj/classes"};
> >     com.android.dx.command.Main.main(strings);
> >   }
>
> > (Note that *compile-path* is set elsewhere to "/data/gbj/classes")
>
> > Loading the generated class file is also a bit tricky, but not too
> > bad.
>
> > It isn't too fast, partly because of Android's slow GC and partly
> > because I'm using the filesystem as intermediate storage before
> > loading the classes, (because I haven't figured out how to do it all
> > in memory yet.)
>
> > I'll send out a full set of patches if there is interest, but for now
> > here is an Android app with the repl built in so you can play with
> > it.  (It is version of Remco's simple calculator app with a socket
> > based repl added.)
>
> > Much thanks to Remco upon whose Android/Clojure work this is all
> > built.
>
> > App install instructions below.
>
> > g
>
> > (Note: I've only tested these install instructions out on a Linux host
> > with this sdk: android-sdk-linux_x86-1.5_r2.zip)
>
> > Download the prebuilt apk file 
> > here:http://georgejahad.com/clojure/calc-debug.apk
>
> Is your source code available somewhere? (I'm interested to know how
> you added the socket based REPL and how it interacts with the app )
>
> Raphaël
>
> > To configure the emulator:
> > emulator -avd <your avd name>
> > adb  install -r    calc-debug.apk
> > adb shell mkdir /data/gbj
> > adb shell mkdir /data/gbj/classes
> > adb shell chmod 777 /data/dalvik-cache
> > adb shell chmod 777 /data/gbj
> > adb shell chmod 777 /data/gbj/classes
> > adb forward tcp:8030 tcp:8030
>
> > Then start up the calc app from the emulator gui.
>
> > Then access the repl like so:
> > telnet localhost 8030
>
> > Allow compilation like so:
> > (def *android* true) (def *compile-files* true)
>
> > Now you can compile from the repl.  For example, this adds a simple
> > exponent operator to the calculator:
>
> > (in-ns 'examples.calc)
> > (defn exp [ b e] (reduce * (repeat b e)))
> > (def calc-opers {\+ #'+
> >                  \- #'-
> >                  \/ #'/
> >                  \* #'* \e #'exp})
> > (def calc-allowed-chars (.toCharArray "e0123456789."))
>
> > You can examine Remco's source code to see how the calculator works
> > here:http://github.com/remvee/clj-android/blob/d1e96d33487ddcdc04b403e97f8...
>
>
--~--~---------~--~----~------------~-------~--~----~
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