Jython: Integrating Python and Java
-
Upload
charles-anderson -
Category
Technology
-
view
8.479 -
download
6
description
Transcript of Jython: Integrating Python and Java
Jython: Integrating Python and Java
Charles AndersonWestern Skies Consulting
Western Oregon [email protected] / [email protected]
10 Second Summary
• Jython is the Python interpreter implemented in Java
Outline
• Python
• Scripting and embedded languages
• Jython
• Other Java scripting languages
Python Background
• Python is a object-oriented scripting language - runs on many platforms
• Mature but still evolving: version 1.0 - 1994, current version: 2.5, 3.0 under development
• Huge user base including Google, Yahoo, YouTube, Industrial Light & Magic
Python Overview
• Python is a scripting language - no compile
• Dynamic typing - no variable declarations, but strictly typed at runtime
• Simple syntax - large library rather than cryptic syntax (c.f., Perl)
• Often a refuge from other languages
Hello World
• print “hello world”
• that’s it - no semicolons, no main function, no curly braces, etc.
Language Features
• Object oriented: hybrid/not pure, multiple inheritance - c.f., C++
• Polymorphism without inheritance - “duck typing”
• Very dynamic - introspection/reflection is simple and powerful - c.f., Java
Syntax
• Pretty simple - familiar to Java programmers
c = sqrt(a*a, b*b)
emp = Employee(‘Bob’, ‘Jones’)
employees[‘Bob’] = emp
import sys, email.mime.text
More Syntax
if x < 0:
print ‘negative’
try:
z = y / x
except ZeroDivisionError, msg:
print msg
Class Definition
class Point2D:
def __init__(self, x, y):
self.x = x
self.y = y
def distance(self):
return math.sqrt( self.x**2+self.y**2)
Syntax Notes
• The block structure of code is determined by indentation - what you see is what the compiler sees
• No dangling curly braces
• Python favors libraries over fancy, terse syntax - c.f., Perl
• When needed, __method__
Embedded Languages
• TCL was developed to provide a common command language for tools written in C
• Adding command line to tools
• Extending TCL to add commands from C to TCL
• Similar to Unix shell - C functions instead of executable programs
Extending TCL
• TCL uses a simple interface between TCL and C code: int argc, char** argv
• Programmer writes thin layer of interface functions to expose functionality to TCL
• Programmer has to choose functions to be exposed
• Can be automated - swig
Scripting a Program
• Do the real work in C (or whatever) and glue it together with TCL
• Provides extensibility of C tool to users
• Performance of script language doesn’t really matter - Pareto principal
• E.g., Numeric Python at LLNL
• Can prototype in scripting language
Python Interpreter
• Python is an interpreted language - need an interpreter to execute Python code
• Originally written in C - “CPython”
• Code is compiled to byte codes at runtime
• Python can be interfaced with existing C code similar to TCL
Jython Interpreter
• Jython is Python interpreter written in Java
• Python code is compiled to Java byte codes
• Aside: Iron Python is interpreter written to .Net CLR
Jython Ramifications
• Interpreter written in Java - so what?
• Jython interfaces directly to Java w/o any explicit coding
• Uses Java introspection/reflection
• All Java classes on class path are immediately available from Python code
• Interactive command line for Java
Demos
• Interactive
• GUI
Java Python Integration
• Python can call Java code
• Java code can call out to Python - possibly in a new Python interpreter (sandbox)
• Python code can sub-class Java classes
Possible Uses
• Command prompt for controlling app
• Interactive workbench for experimenting
• One-off utility work - e.g., data loading
• Flexible “business” rules
Scripting Java
• Groovy - groovy.codehaus.org
• JACL (TCL in Java) - tcljava.sourceforge.net
• JRuby - jruby.codehaus.org
• JSR 223 Scripting the Java Platform - Java 6 SE
Jython Information
• www.jython.org
• There are a couple of Jython books
• “Scripting: Higher Level Programming for the 21st Century” - Ousterhout