Is Java Heading for a Fall?
Bruce Eckel commented in this post earlier this year that Java is reaching an evolutionary dead end. While hacking my way through the javac code + listening to the SOA lecture, I couldn’t help wondering if he’s right. Java might be too complex to evolve.
The full spec of Java 1.6 includes:
- ~90 kinds of AST nodes.
- Javac gets alone with ~50 different AST node classes (for example, by making all binary operators a single class).
- ~50 reserved words
One might think that this richness of statements will give the language all the power it needs, but Java also have:
- At least 3 different reflection engines (reflection, annotations/mirroring and the compiler itself)
- A plethora of external reflection engines (Eclipse, IntelliJ, Antlr/JavaCC grammars, etc.)
And on top of that we have:
- Jar-files META-INF folder and manifests
- Extensible in-code annotations
- The Java Enterprise platform, that adds a declarative XML layer
- UML 2.0 and it’s XMI-based code generation
- Web-services platforms that wraps Java EE with another layer of XML
- Orchestration engines that makes web-services collaborate by using yet another layer of XML scripts…
Aaaaaaaaaaaaaaaaaaaaaaahhhhhhh!!!
I use to be proud of being a “Java hacker” since Java was “The object-oriented language that works”. Now it’s getting embarrassing. Six layers of Fluff-ML just to get the show on the road?
If you are one of my SOA students, you’re probably making a funny face right now, since we are going to study all those layer of fluff in the course. They are there for a reason: To make Java features exposed to public (i.e, over-the-net) access. They are evolutionary evidence on how the platform developed step-by-step. Unfortunately, the platform was not design to evolve. It has no built-in mechanism to embed into it all those layer, so they pile up in the form of XML file.
(Gilad Bracha, Java’s theologist, thought it over and decided that the world need a new programming language, that is more net-ready: Newspeak. It’s going to be great. And once it is great, we’ll need something else, that was not originally introduced into newspeak. And then, in the words of “The The”, “The whole goddamn thing starts all over, again”.)
Conclusion: Languages need a built-in native extension mechanism. There’s a reason for meta-programming - Without it, the language slowly get buried under its-own weight. Remember it, when you’re learning Fortran Cobol C C++ Java .Net then next programming language.
Guy Wiener on November 25th 2008 in Programming