Skip to main content


Posted by editor on February 14, 2008 at 7:40 AM PST

Of language evolution and Java's would-be successors

We've picked up a couple of nice opinion pieces to harangue about for an ordinary winter Thursday (your climate may vary, particularly south of the Equator). Both are motivated by pressures on Java from languages contending for mind-share and attention, notably Ruby.

We'll start with JBoss' Bill Burke:

I recently emailed the mandelbrot benchmark to a dynamic language evangelist colleague. Although benchmark results are usually pure propaganda, poor representations of how a language or framework is used in the real world, or even just plainly out of date with the latest versions of the technology, still, the performance of dynamic languages compared to Java in the example is quite embarrassing. Ruby, for example, is 500 times slower! Yeah, its hard to take seriously a benchmark that outputs to stdout, but still, if you look at the code you’re thinking, WTF is Ruby doing that causes so much overhead?

Now, when I forwarded this benchmark to my evangelist colleague, he immediately accused me of trying to put down or stamp out any challenge to the “One True Language” (Java). Its not about putting down or stamping out. Its about testing whether or not a language is a viable application platform. The thing is, if the dynamic language crowd is going to position itself as a replacement for Java in application development then they are going to have stop giving silly rationalizations for their shortcomings and promoting myths about their language and Java. This, and this alone is what irritates me about this crowd. Let me give you some examples about the rationalizations and myths they try to pull over on us...

From here, his Dynamic Languages: Rationalizations and Myths takes on a number of popular speaking points from dynamic language enthusiasts and gives them an intellectual shakedown. Starting with the mandelbrot benchmark, Bill concedes that benchmarks are often quite detached from reality, but that huge disparities can't be ignored. "A 5%, 10%, or even 100-200% difference is probably as a result of tuning or some simple undiscovered bug. In the grand scheme of things, those kind of numbers ain't very relevant. But a 50000% difference? For such a simple benchmark? Something is seriously wrong here."

So if Java's already faster, would it be practical to just apporpriate some of the traits that make dynamic languages like Ruby so popular? blogger Simon Morris wonders about the feasibility of this in Evolution vs Intelligent Re-design?

The rather awkward way in which Generics were slotted into the existing language is already a big turn off for beginners. New programmers will always favour a syntax with a low barrier to entry for novices, rather than go faster stripes for experts. They'll vote with their feet if a language takes a dramatic turn for the worse.

The trick is to balance the two concerns — move the language forward, but not in such a way as to dramatically shorten its life expectancy. Unfortunately this can sometimes mean missing out on juicy additions, simply because the fallout would be too extreme.

But do we really need every juicy addition? Languages are tools, and each has its own strengths and weaknesses. They say French is good for making love, German for giving orders, and English for apologising — unfortunately mix-and-matching spoken language to suit your mood isn't normally an option. But computer languages are not so tightly bound: we can if so desired pick Python to write one project, Java for the next, and Ruby for a third. We can even mix them within a single project.

There's a lot more to both of these opinion pieces: Bill goes on to argue that the dynamic language advocates overlook the productivity provided by IDEs, while Simon wonders aloud if adapting the JVM for dynamic languages, like the DaVinci Machine hopes to do, might provide a suitable environment for dynamic languages, while allowing Java to evolve in whatever way best suits Java itself.

Also in Java Today,
JavaOne 2008 organizers have posted their online, searchable directory of sessions. Several projects have their own sessions, including blueMarine (TS-5483), Beans Binding (TS-6657), the Maxine VM (TS-5169), the Robotics Community (BOF-6620), the Java Champions (BOF-5501), Swing Application Framework (TS-6605), Sailfin (TS-5866), Woodstock (LAB-4540), and more. The conference is being held May 6-9, with early bird registration offering a $200 discount through April 7.

As announced in a recent press release, the non-profit industry consortium CableLabs has launched the OpenCable Project on The OpenCable Platform is a Java-based middleware software layer that "provides the opportunity for operators to deliver interactive services and applications to consumers bundled with their other service offerings. Content Programmers may also leverage the OpenCable Platform to enhance their own programming and advertising offerings and perhaps evolve new businesses around these new services."

In today's Weblogs,
John Ferguson Smart offers some
Reflections on SCM Branching strategies.
"The upcoming Subversion 1.5 makes huge progress in the way you do branching, at least in the CVS/SVN world. This got me thinking about branching strategies."

Contribute to Hudson and win $1000s! As Kohsuke Kawaguchi explains,
"GlassFish is launching the "GlassFish Award Program", and Hudson is a part of it."

In today's Forums,
Kristian Rink is looking for
webapp: migration hints for GlassFish.
"Moving forth in our efforts to migrate our environment to glassfish v2, by now I started to establish our testbed system and get our web applications started there by simply dumping the .wars to glassfish and hoping for the best. Good thing, as far as I have seen now, everything works just out-of-the-box, but some things are a little, well, "uncomfortable". In example, we're currently using log4j in some of these apps which works and creates logfiles but these aren't visible from the gf server administration. So to ask: More than just "running" webapps inside glassfish, are there any hints / tutorials / resources that outline what is needed to make a web application better "integrated" / manageable via the glassfish administration console? "

walterln looks at the implementation details of thread-safe Swing programming in
Re: fireTableCellUpdated And Thread issues.
"The SwingUtilties.invokeLater() just calls EventQueue.invokeLater(). I tend to mix them myself, but I think the EventQueue one is clearer about what it does (invoke some code later on the event queue). The SwingUtilities one is more known and has better javadoc though."

Finally, francoislionet is debating various strategies for
Loading pictures.
"In my games, I need to load a few number of pictures. So I use the MediaTracker to find out if the image(s) are loaded. My question. Is it better to : Load each image one by one, with each time a mediatracker waiting for the image to load before proceeding to the next one? Initiate a load for all the images, and make one only MediaTracker wait for all the images. Make a mix of those, like load 5 images in a row, and wait for these 5 images to load before proceeding to the next ones?"

Current and upcoming Java

Registered users can submit event listings for the href=""> Events Page using our href="">events submission form.
All submissions go through an editorial review before being posted to the

Archives and Subscriptions: This blog is delivered weekdays as
the Java
Today RSS feed
. Also, once this page is no longer featured as the
front page of it will be
archived along with other past issues in the href=""> Archive.

Of language evolution and Java's would-be successors