"and their love affair with XML."
You just gave me an idea for an excellent April's Fools prank.
Can you give a few examples of SML's "many, many restrictions"? The only things I can think of that fit that description are the value restriction and lack of first-class polymorphism, but neither of these should have a serious effect on productivity.
When I was given assignments for SML, I was constantly running into x or y restriction whenever I tried something. Maybe my prof knew how to setup his assignment for maximum frustration using SML, and normal usage is not so bad (after you gain some skill in it), I don't know. But consensus from my class & some people on the net is that it shouldn't take hours to get a 10 line program working. Principle of least surprise is something SML does not follow. Also there's a lack of a support network & decent documentation for it compared to more popular languages out there. I'd rather use lisp than the traumatic experience SML was. At least the syntax isn't much to learn.
It's bad smalltalk to emulate C while your programming for it, and similarly it's bad C to emulate smalltalk with it. It's like I would take his original java version and made it into perl, insisting that the perl script HAS to be in a class definition, and HAS to be in a main method, I MUST define the resultset in a static class list, and output with separate methods. Saying that perl couldn't reproduce my 'reusable object' java functionality with doing that is just pedantic.
He should of just extracted a real example where it's impossible to do something in a short amount of code due to the lack of a specific feature, or being chained to java's static typing. Like converting a JDBC ResultSet to an int[]. (5 lines of code, 15 if you don't compress the curly brackets)
A real life implementation of his example: public class Out { public static void main(String args[]){ for (int i = 0; i < 6; i++) { System.out.print(''+i*i+' ');} System.out.println();}
Also just because a language is succinct, doesn't mean it's productive. Just look at SML. It's many, many restrictions act as a straitjacket to do simple things, yet also keeps things succinct. It's would be better to say that because of intentional restrictions x (static typing) or lack of feature y (first class functions), it makes it that doing some simple thing z is forced to used workaround a. Because language b has this feature set, this leads to general bureaucratic overload.
Java isn't bureaucratic just because of the language alone, Sun & apache contributes a lot of this itself in how they've programmed their standard libraries and their love affair with XML.