javac code generator based java source interpreter, then... genuine scripted Java language
Compl Yue Still
complystill at gmail.com
Wed Jul 11 08:07:16 PDT 2007
Hello,
I have finished the part with Java Compiler API support, which is
suggested by Peter, it seems work quite fine. I'm very happy that
javac compiles really fast!!
I have requested this piece of work as a dev.java.net project at:
http://sjsh.dev.java.net it is pending approval now but if any of you
can access its files, I packed the latest src under Document and
Files/src-release. It is BSD licensed and I hope everyone enjoy it.
Trying it out is quite easy, there's a pre-built sjsh.jar, just run
java -jar sjsh.jar
and it will start output some info, an authorized private key will be
automatically generated. then run in another terminal:
chmod 600 SJSH-Root/home/sjsh/.ssh/id_rsa
ssh -l sjsh -p 22022 -i SJSH-Root/home/sjsh/.ssh/id_rsa
if you have OpenSSH client installed. or you may need to convert
id_rsa to your favorite SSH client's format and use it to login.
After accept the host key and logged in, the terminal should display
something like:
This is an interactive Java(TM) shell, type in Java(TM)
statements to get them executed.
Type in Ctrl^D to logout.
Type in ? or help for a list of available commands.
Type in <Tab> to complete commands.
Use ¡ü ¡ý arrow keys for command history.
SecueJSH Java(TM) Compiler Ready.
[jsh ]$ ?
Built-in commands:
class <class-name> +<class-code>
Start defining a new class in current package
def <field-name> [ <type> [<comment> | -] | - ]
Define a field that persists across statements
feedback [ on | off ]
Control display of feedbacks
fields
Show all fields currently defined
import <package-name>.* | static <qualified-class-name>.*
Add an import
imports
Show all imports in current import list
lineNo [ on | off ]
Control display of line numbers
package [ <package-name> ]
Specify current package
preview [ on | off ]
Control display of previews
redef <field-name> [ <type> [<comment> | -] | - ]
Redefine a field that persists across statements
undef <field-name>
Undefine an existing field
unimport <existing-import> | *
Remove specified import
Type in: help|? <cmd-name> [<topic>]
for more details of a built-in command.
[jsh ]$
Try some interactive java and, have fun ;-)
cheers,
Compl
On 7/6/07, Compl Yue Still <complystill at gmail.com> wrote:
> Hi Peter,
>
> Thanks for the quick and informative reply, I didn't get to this
> example before, and it seems very promising.
>
> But my concern is still about interactivly executing Java statements,
> like scrirpts, idealy like in a Shell (with word completion etc.),
> This is why I'd been considering BeanShell at the beginning.
>
> I havn't walked close enough to the Java Compiler API based approach
> so far, mainly in worries about Java class loading. I often heard JSP
> containers run OutOfMemory with default size for perm gen of heap,
> while the main heap is still free, simply because frequently
> recompiling of JSP pages i.e. class loading.
>
> I quite like the example you showed here, since it will just do
> EXACTLY what an state-of-the-art JVM does, but I'm still afraid of
> such an implementation within a long-run app-server JVM will cause
> problems sooner or later. I'm expecting positive opinions from you
> regarding your expertise in all these around.
>
> And another issue with this approache come to me that to prompt user
> inputs from an interactive shell, where complex constructs beyond
> simple expressions should be allowed, like for() loops etc. An AST
> parser knows well whether it has received enough input as to construct
> an evaluable node, but how could my code deal with that when it's not
> doing parsing jobs? One single line expression a time is not enough
> for it to be really useful.
>
> Best Regards,
> Compl
>
> On 7/6/07, Peter Ahé <peter at ahe.dk> wrote:
> > I don't understand why you want to interpret, the JVM is good at that.
> > Consider using the approach of this demo which compiles and evaluates
> > Java expressions:
> >
> > https://ksl.dev.java.net/source/browse/ksl/trunk/compiler/test/tools/javac/api/evalexpr/
> >
> > Cheers,
> > Peter
> >
>
More information about the compiler-dev
mailing list