From: Jan W. <Jan...@et...> - 2009-11-10 14:26:47
|
Hey Charlie, I guess you're busy right now, but I just want to clarify some things. To make a Jython class file run on a JavaME, they need to be compatible with CLDC and MIDP/IMP. That means the ClassLoader and e.g. JNI is not supported. Moreover, the APIs are very limited (see http://java.sun.com/javame/reference/apis/jsr118/). E.g., HashMap and Templates are not supported. Instead, Hashtable and type casting must be used. That means, there might be some work to do to make it compatible with JavaME. Can you approximate if there is a lot of code needs to be ported? Or even some parts that heavily depend on dynamic class loading (with can not be implemented in JaveME CLDC at all)? This is only important for all Jython/Clamp classes that are needed at runtime on the embedded environment and not interpreter or interactive promt stuff. Maybe you or a Jython dev could comment on that. Thanks, jan > -----Ursprüngliche Nachricht----- > Von: Charlie Groves [mailto:cha...@gm...] > Gesendet: Dienstag, 3. November 2009 20:19 > An: Jan Wedel > Cc: jyt...@li... > Betreff: Re: AW: Re: [Jython-dev] Clamp Development > > On Nov 2, 2009, at 3:42, "Jan Wedel" <Jan...@et...> wrote: > > > Hi! > > > >> If you just want to use arbitrary Python modules in Jython without > >> dynamic compilation and don't care about exposing them as Java > >> classes, clamp isn't adding anything. However, one of the things I > >> added to Jython for clamp is the ability to specify where to store > >> the > >> bytecode Jython generates and that stored bytecode should be used > >> instead of always dynamically generating it. That should allow you > >> to > >> use 3rd party libs in a restricted environment. > > > > Do you mean Java byte code or Python byte code? If Python actually > > generates Java byte code, where can I find it? Do you know any > > documentation by chance, that explains how to generate Java class > > files > > or (in an optimal way) create a self-contained jar file from Python > > code? > > It's java byte code. Whenever you import a module with jython, it > spits out a $py.class file corresponding to the imported module in > the same directory. You can use the compileall module included with > jython to compile a whole directory tree and control where it's > output. After compiling everything, you no longer need the .py files. > I think there are a couple guides on the wiki for doing this. > > However jython still generates java bytecode for proxy classes at > runtime, even if the modules containing the proxy classes are > precompiled. This is what the proxy generation branch takes care of. > > >> I'm a little worried about your desire for "native speed". Jython > is > >> a decently fast implementation of Python, but it's not going to be > as > >> fast as plain Java code. I don't have a good feel for what the > ratio > >> is of Java performance to Jython performance these days, especially > >> for VMs other than Sun's, so I can't say how much slower Jython will > >> be. What level of performance do you need? Maybe someone else here > >> can give you an idea of how Jython will do. > > > > I've done some performance tests on my Python Interpreter. It runs > > 200-300 times slower that the same program coded in "native" Java. > > Hmm, > > I think I'm still a bit confused about what Jython does. > > > > Is Jython "only" a Java implementation of the CPython interpreter? > > That > > would mean, you always need the whole Jython core/interpreter libs to > > create a self contained Jar file. Or, is Jython/Clamp able to create > > "native" Java byte code without a Python Interpreter in between? > > > > Like this: > > Python source -> Jython Interpreter -> Jython interprets code and > > executes at runtime in a Java VM > > Or more like this > > Python source -> Java byte code -> Java Interpreter of the VM > > interprets > > byte code at runtime (Jython not necessary anymore) > > Jython creates bytecode that's run directly by the jvm, but much of > the core pieces of python are implemented in java and are still needed > by the generated bytecode. Things like list, dict, int, str and so on > are contained in jython's jar, so it's still needed by the compiled > modules. So jython isn't interpreting anything, but it still needs > some core classes. > > Charlie > |