From: Charlie G. <cha...@gm...> - 2009-11-03 19:38:43
|
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 |