Friday, March 03, 2006

Groovier Than Groovy

Ed Burnette: "With its uncluttered design, mature code base, small size, well defined semantics, dynamic language features, and JSR 274, BeanShell looks way groovier than Groovy."
My sentiments exactly. Update: My response to Graeme (originally posted in his comments):
You're kidding yourself if you think there's a fundamental difference between BeanShell and Groovy. They solve the same problems. Labeling one "scripting" and the other "dynamic" (dynamically typed?) doesn't change the fact that they really only differ in what syntax sugar they support. BeanShell supports scripting language like functions (i.e. working with files, etc.), but that's a feature, not a definition of the framework. Any other differences boil down to implementation details. I personally prefer BeanShell's conservative evolution approach to Groovy's attempt to include everything including the kitchen sink. I seriously doubt Groovy's long term viability and ability to evolve and maintain backward compatibility. The fact that you haven't provided any examples of BeanShell syntax sugar leads me to believe you don't know much about it. If I didn't know better I'd think that BeanShell was little more than a Java interpreter after reading your post.


Blogger Guillaume Laforge said...

This comment has been removed by a blog administrator.

2:03 PM  
Blogger Guillaume Laforge said...

BeanShell and Groovy aren't really comparable. If you just need a "scripting" language as close as possible to Java, then BeanShell is certainly the best candidate on the marketplace (though I'd also mention Janino which is more efficient since it's generating bytecode rather than using reflection). But if you want advanced APIs and if you need meta-programming capabilities, then Groovy might be a better fit.
Graeme Rocher explained that on his blog recently, and that's worth a read.

2:06 PM  
Blogger Bob Lee said...

Graeme isn't as familiar with BeanShell or its future direction as he thinks he is.

There are no fundamental differences between Groovy and BeanShell--they are both dynamic languages with similar architectures. To indicate otherwise or say that BeanShell isn't "dynamic" or that it doesn't provide benefit beyond prototyping is disingenuous.

The key differentiator between BeanShell and Groovy is syntax sugar. Groovy does have a few more bells and whistles in this area (Graeme mentioned closures for one).

BeanShell has taken a conservative approach and may not have every syntax sweet (yet), but Groovy has blazed ahead building in everything but the kitchen sink. Consequently, it is collapsing under the pressure of the resulting complexity.

The future is much brighter for BeanShell.

6:41 PM  
Blogger colt_nz said...

Ok ill bite.

No fundamental differences?
How about :

and most of all closures.

Ive used both languages extensively. I wish Groovy has Beanshell's robustness and Beanshell had Groovy's features. It only takes however a simple glance as the respective activity levels of the two communities (does Beanshell even have a community anymore given the posting level?) to see Groovy is far more likely to reach utopia first.

4:07 PM  
Blogger Bob Lee said...

By "fundamental differences" I mean they aren't apples and oranges. They have different features (as you've pointed out), but you can still compare and contrast them. They aren't so different that they don't compete, contrary to Graeme's claims. Trying to differentiate them by calling one a "scripting" language and the other "dynamic" is meaningless.

4:16 PM  
Blogger Graeme Rocher said...

Bob, I've responded to you comment on my blog. It saddens me that you are so bitter about this and not more constructive in posting articles about BeanShell (which I really like and use often btw).

There ARE fundamental differences and if you can't see that I'm afraid you need some 101 classes in a dynamic language like Ruby for example.

11:25 PM  
Blogger Bob Lee said...

I'm not bitter at all--please don't make this personal. But I think your argument stinks worse than Groovy. ;)

If you think closures (which BeanShell can support in the future) qualify as a fundamental difference and there's some category of "dynamic languages" that BeanShell doesn't fit into, then I can't debate your argument because it make no sense.

Gilad Bracha: "That’s dynamically typed languages - not the increasingly common horrible misnomer dynamic languages (as opposed to static languages, where nothing moves, like hieroglyphics, perhaps?)." (

9:12 AM  
Blogger Graeme Rocher said...

Oh excellent you've cheered up! ;)

You're mistaken unfortunately and clearly didn't read my whole post, I never said closures are what makes dynamic I said that it is the way the groovy dispatches methods through its MetaClass which does.

The combination of closures, builders and meta class is what makes Groovy so powerful, clearly BeanShell can implement these features too, but then it would also have go for a more complex architectural design and a larger jar file.

Nice quote, see how he talks about groovy, perl and python.. all truely dynamic languages unlike BeanShell ;)

11:04 AM  
Blogger Bob Lee said...

OK... Actually, BeanShell does support meta methods which can be used to implement DSLs:

5:03 PM  
Blogger Graeme Rocher said...

Yes but only for instance methods and without closures and builders this is not enough to create useful DSLs unfortunately. See the response on my blog.

1:35 AM  
Blogger Bob Lee said...

So now the ability to create DSLs defines a "dynamic language?" Response on your blog:

8:50 AM  
Blogger Graeme Rocher said...

No its the sum of all the features that languages such as groovy, python, perl and ruby provide and that BeanShell (as of this writing, maybe one day it will) does not provide. What it does provide is a very useful language to script the Java language.

9:15 AM  
Blogger Pierre Wargnier said...

I wanted to have an extension language for an Android application and I definitely choose BeanShell!

I just took the BeanShell core sources and everything is working well. Its compressed size is less than 150K and it do the job. I can call all my Java classes without any mapping work.

2:24 PM  

Post a Comment

Links to this post:

Create a Link

<< Home