I believe that the javac compiler and then the java byte code to
dalvik byte code converter apply all sorts of optimizations. To build
a Python to dalvik byte code compiler would require a lot of intimate
knowledge of how this process works. I don't really want to go that
far down the rabbit hole, I just want to write Android apps in Python
and py2j is the quickest path between point A and point B.

The other advantage of py2j vs. generating byte code is that debugging
is easier. After you generate the Java Source you can use Eclipse to
debug the Java code directly. With a Python to dalvik byte code
compiler someone would have to implement a debugger that can match up
a line of Python to a particular dalvik byte code, etc.

By going source to source you can continue to use all of the existing
Android and Java source tools.

My goal is not to eliminate knowledge of Java, just to make
development much more productive.

This is kind of a niche project for people who know both Python and
Java relatively well and would prefer to express their application in
Python but still build & deploy Android apps using the native
toolchain.

 - lex

On Sep 1, 12:38 pm, Michael Banzon <[email protected]> wrote:
> Is there any particular reason to translate the python code to Java?
>
> Couldn't that step be omitted by making a python to Dalvik bytecode compiler?
>
> On Thu, Sep 1, 2011 at 6:17 PM, Kristopher Micinski
>
>
>
>
>
>
>
>
>
> <[email protected]> wrote:
> > On Thu, Sep 1, 2011 at 12:08 PM, eukreign <[email protected]> wrote:
> >> Hello,
>
> >>  I've spent a few evenings working on a project to be able to write
> >> Android applications in Python by compiling Python source into Java
> >> source. I thought I'd share what I have in case there is interest in
> >> this (maybe even outside of Android development). I see this project
> >> having two parts, a Python to Java converter and a very basic
> >> simulated/stubbed out Java/Android API (so that one could write unit
> >> tests in python and run them in python, before compiling everything
> >> into Java).
>
> >>  Of course 100% Python to Java is not possible or practical to
> >> implement in a reasonable amount of time but I think enough could be
> >> implemented so that we could have 100% Python syntax with maybe 50%
> >> Python semantics and 50% Java semantics. I think just getting to that
> >> point would be a huge productivity gain on working with any java
> >> frameworks/APIs. Over time I think there can be work arounds for
> >> things that Java can't do like multiple inheritance, dynamic class
> >> creation, duck typing, etc.
>
> >>  So, how does it work? I use Pythons ast and symtable modules to walk
> >> the source code and try to infer the possible types that a variable
> >> can have. This gives me the type information that Java will need. Then
> >> another pass generates Java source using this type information. There
> >> is nothing particularly magical especially since duck typing isn't
> >> implemented and you can't change the type of a variable after you've
> >> assigned to it the first time. So you have to be very careful with the
> >> Python code you write, think of it as statically typed Python where
> >> you don't have to declare types since they are inferred. I haven't
> >> gotten to lists and dictionaries yet but the principles will be the
> >> same, you can't have heterogeneous lists so the first thing you put in
> >> a list will provide that lists type.
>
> >>  Why not use PyPy? It's possible to achieve some of my goals with
> >> PyPy and in some cases it will achieve a lot more than I will ever
> >> attempt to implement. One advantage of PyPy is that it supports a lot
> >> more of Pythons dynamism (for one, PyPy generates code from a loaded
> >> Python module while py2j uses static python source files). There are
> >> two major problems with PyPy for my purposes: 1) it generates
> >> specialized jvm byte code that the dalvik vm cannot convert 2) because
> >> PyPy is more pythonic it will be much harder to compile code in a way
> >> that will just plugin into the Android APIs, with PyPy you can't
> >> import Java packages or inherit from Java classes as you would have to
> >> do to write Android apps.
>
> >>  Code I have so far is hosted here:https://bitbucket.org/eukreign/py2j/src
>
> >>  I would say it's still more of a prototype than even alpha level
> >> code. You can see an example of input file and output in the samples
> >> directory.
>
> >>  Also, the bottom of both analyze.py and compiler.py have a ton of
> >> unit tests you can look at to see what is possible so far.
>
> >>  If you have questions or are interested in helping me please send me
> >> an email.
>
> >>  - lex
>
> >> --
> >> 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
>
> > Lex,
>
> > Sounds like a fun hobby project, but also a lot of work if you
> > *actually* want it to work well ;-).  If you want to just get a quick
> > and dirty solution, perhaps you should look here:
>
> >http://code.google.com/p/android-scripting/
>
> > Neat idea otherwise, though.
>
> > Kris
>
> > --
> > 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
>
> --
> Michael Banzonhttp://michaelbanzon.com/

-- 
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