Johannes Thönes

Software-Developer, ThoughtWorker, Permanent Journeyman, Ruby Enthusiast, Java and Devils Advocate.

Devoxx 2010

I was very lucky to attend the Devoxx 2010 (the conference part) this year. So this is reason enought, to blog about the thing I found most valuable to report:

The discussion panel

This was a discussion panel lead by Joe Nuxoll (with Dick Wall as keeper of the minutes) between Josh Bloch, Mark Reinhold, Antonio Goncalves, Stephen Colebourne, Jürgen Hoeller and Bill Venners. They did a fanominal job in covering up for James Goslings cancellation (get well soon James!).

They did discuss the Future of the JCP and expressed throughout the bord (in some sense) the need for an incompatible version of Java - maybe under a different name. Sadly we also found out, that Apache Harmony will not get the TCK - and the Oracle statement seems to be, that this decision is final.

The next big JVM language

This was a talk of Stephen Colebourne where he lined out the principles he thinks a next big JVM language should have. There are namely (hope  I don’t forget any):

  • no checked exceptions
  • no primitives and no arrays (but of course a collection with the name Array)
  • static typing
  • a better and easier approach to generic wild cards
  • closures
  • language support for null-handling (like the groovy ?. operator)
  • function types and method handles to get rid of factories
  • simpler reflections
  • a java like {} syntax - but maybe no semicolons ‘;’
  • modules
  • resource management

He then when rapidly over disqualifiy Closure and Groovy as the next BIG JVM language (not as JVM language - don’t misqoute me or him like that). He spend a little more time rubbing up Scala and Fantom - Scala for having the ability to write Perl like code in it and beeing to complex, Fantom for not having generics at all.

He proposed to have a non-compatible Java instead to be the next big JVM language.

I think he has a point in all he says. I might ask however, if there really will be a “next big JVM language”. Do we really have to have a new major language? Or will we drift more in specific languages and write application in more than one language?

I would at least not take it for granted, that there will be a successor in terms of adoption to Java.

If there is, the consequence of a JavaNG - a non backwarts compatible Java - seems appealing to me. So anyway: Great Talk Stephen!

Java SE 7 (More than one talk)

Well - we all knew, that Oracle is going for Plan B. But it felt there were dedicated to bring it out next year - they named the date for general availability to be 2010/07/28. Hopefully this dedication will lead to a release at last! It is supposed to be feature comple soon (2010712/16) and everyone is encouraged to try it out and use it at: http://download.java.net/jdk7/. The latest netbeans beta version already carries the Project Coin “small language changes” that make huge differrent to your productivity. You can check out the examples from http://blogs.sun.com/darcy/entry/project_coin_javaone_2010

Beyond Coin, the JDK 7 will hold the Fork-Join framework as well as the invokedynamic bytecode. So good times for my old buddies from my thesis: Fork-Join and beloved JRuby.

And by the way … we no have filed JSRs for Project Coin (JSR 334), Project Lambda (325), Java 7 (JSR 336) and Java 8 (JSR 337).

Java SE 8 (More than one talk)

So the two main features for the late 2012 planned JDK 8 are closures and modules

Closures. They will be in - the syntax seems to be debated the most - but the protagonist seemed to be tired of it. In fact they said, the wanted to talk about features. I personally was very glad, they god rid of a function type idea and just wanted to use SAM types (that is a class or interface with a “Single Abstract Method”) as a replacement type for a type-safe closure. This allows us to have libraries done with the intent for use in closures - but beeing used in pre Java 8 code as well. So we don’t have any “first-class” and “second-class” closure methods. As Brian Goetz did put it: “Forward-compatible” ;-)

Modules. Well - as partly Ruby guy I have to say: The want rubygems for Java. And they want it type-safe. Of course they want to split up the whole rt.jar (AWT, Swing, CORBA, java.io, NIO 1+2 … you get the picture). That is hard work I believe. So lets hope they get it done - it would help us alot. While Mark Reinhold stated, they will aim for interoperability with Maven (in both directions), OSGi seems to be left aside. This does not bother me personally, but it seems to bother alot of other folks.

But all in all, Java SE 8 is something to really look forward to.

(Of course Project Coin will add some small improvements that make big differences as well again.)

Java Puzzlers

Josh Bloch and his brother William Pugh did six new buzzlers this time. I cannot recall them - so wait for them to be available on parleys.com (and make Stephan happy by buying a subscription). But I wrote down some of the morals, which I’ll happily share with you here:

  • Don’t use the BigDecimal(double) constructor. By using a double you already lost precision. Use BigDecimal(String) instead. BigDecimal.valueOf(double) is better, but still not perfect.
  • Don’t worsen your API to improve performance
  • Avoid having regular expressions to have overlapping matchings for the same thing - otherwise you can have very easy denial-of-service attacks by very long strings.
  • Don’t mix generics and var-args.
  • Don’t ignore warnings (an old one … but you know … the generic warnigs are hard to understand, but sometimes important)
  • When you construct an object with an raw-type (non-generic) constructor, which could have been generic, all generics are gone from this object. Even if they do not relate! (This was referenced as raw typed mode).

Reflection Madness

The title of this talk by Heinz Kabutz was very well choosen. The author of the Java Specialists' Newsletter showed some things you though never possible. Everyone of those was already presented in a newletter before . The highlights from my point of view are:

  • Change Strings in the constant pool
  • Change values of integers in the constant pool of the Integer class (very nasty thing when you loop)
  • Adding an enum at runtime or changing enum values
  • Modify final fields
  • Construct without constructor

The BOFs

I don’t want to name a BOF specificly - but if you are at devoxx go to them! Even if you are tired - they are so informative. How it goes: There are your heros in a room, and you can ask questions. Any question! Ok the ones about aquisition and law suites will not get answered … but the interesting technical ones. And even if you don’t have questions, you can just listen to them. Other people in the community always have great questions!

I think this is somewhat like an open spaces conference in “light”. I surely must go to one of these soon …

The JavaPosse Live

Ok … that one you cannot describe. You have to be there! Feel it. It is great.

The litte kangaroo

No - not a talk. We brought our mascott this year. It is a little kangoroo - well see your self: http://twitter.com/#!/search/%23daskleinekaenguru

Last but no least

Devoxx Team I love you! You do a phenomenal job! hug