[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: JDK tools

Sun does System.exit at the bottom of the main method in all of their tools.  I
have no idea why but its very annoying!

Pat, your compiler work isn't obsolete (although the source is now available for
the compiler so you don't have to decompile.)  Sun has yet to create a reasonable
API for the compiler.  I also had to copy all the source and make massive
modifications just to compile a String in memory (rather than hitting the disk).
Another super, super, super annoying "feature" is the wonderful security
restriction which prevents classes from being reloaded even when completely
dereferenced.  I can't dynamically update a class definition in Lingua without
bouncing the VM.  I would think security of this type should be optional
(defaulting to "on").  Suns VM also seems to hold on to classes loaded in the VM
indefinitely.  This is very poor design.

BTW - I just found a new bug.  Beanshell doesn't like (primitive).class (such as
int.class) which is legal under the JLS.

wait, I just thought of something else...

Yep, I suspected as much.  It also doesn't like (type)[].class (such as
Object[].class) which is also legal under the JLS.

PS The new version of BeanShell kicks ass.

...but I still think you should add some scripting niceties such as foreach and
loop statements.  I've already added them to Lingua and I'd be happy to add them
to BeanShell with your permission...

foreach example:
ints=new int[] {4,5,6};
foreach(i, ints) print(i);


loop example:
loop(i,4,6) print(i);


You should also overload arithmetic and comparison operators for classes
extending java.lang.Number.  Comparison operators should also work with any class
implementing java.lang.Comparable.  Again, I'll do it for you if you approve such
changes.  This should have been a Java feature but time restrictions prevented
Gosling from implementing them properly (by his own admission).  Time
restrictions also screwed us out of parametric polymorphism (at least for the
moment) and multiple return values.  Arg!  Calling methods to add two BigDecimals
really sucks.

I know you have voiced concern with deviating from the JLS during previous
conversations we've had on this subject.  I have some thoughts on that subject.

A) I don't think keywords such as foreach polute the namespace.  Who uses foreach
as a variable name?  If anyone does I hope I don't ever meet them in a dark
B) I tried your -strict switch idea in Lingua but performance problems arose.
This could be ameliorated by creating separate code bases but at that point you
have different languages with different bugs...

Anyway, enough bathering for today.  BeanShell looks great.  Back to work...

Pat wrote:

> On Thu, Dec 23, 1999 at 09:04:47PM +0100, Mikael Ståldal wrote:
> > Is it possible to run the JDK tools (javac, javap, jar, etc) from
> > within Beanshell?
> >
> ...
> > I tried to this in bsh:
> >
> > BeanShell 1.0 beta - by Pat Niemeyer (pat@pat.net)
> > bsh % args = new String[] { "HelloWorld.java" };
> > bsh % sun.tools.javac.Main.main(args);
> >
> > and it did compile HelloWorld.java fine, but then I was
> > immediatly thrown out of bsh.
> I have always assumed it is possible, but I hadn't tried it.
> I might be the case that Sun deliberately adds a System.exit() to their
> code just to prevent you from using the JDK compiler in this way...  Or maybe
> it's something else.
> A *long* time ago I decompiled the Sun javac package and figured out how to
> use it directly (without even necessitating going to the file system).
> However I'm sure that's all been rendered obsolete.
> I would like to be able to make bsh commands that wrap these, so it would be
> good if we can figure out what's up.
> Pat

X   U   M   A    <engineering for e-business>
Daniel Leuck
160 Pine St., 2nd Floor
San Francisco, CA  94111
Phone: (415)777-9988
Fax: (415)777-2704
email: dleuck@xuma.com