Friday, July 22, 2011

a story about a dynamic programming language

Every once in a while, I like to pretend that I can reload past mindsets like Smalltalk images. Today's story is about a dynamic programming language.

It loaded libraries at run-time. It sat at a level of abstraction from the actual computing hardware: there were no pointers. Memory management happened during execution in an automatic mechanism. Characters weren't single bytes. Checks of all kinds took place as code ran, affording a minimum of "protection". For smaller programs, start-up time itself was a performance constraint. Method dispatch wasn't fully resolved until the time of the call. Commentators often complained about the costs of all this dynamism.

Naturally, I'm describing Java as it was viewed a handful of years ago. This is why it's so amusing to hear that Java has somehow turned into the static language standard-bearer. At least where I was working, the original competitor to Java Servlets in the Web domain was Perl CGI, not C or C++. It was a battle between two dynamic options, in which greater simplicity of string manipulation and memory management trumped other concerns. Java was the company-pushed "compromise" solution that had better threading, Unicode, fairly easy C-like syntax, and so on, yet without some of the traditional downsides of the static languages. In retrospect, other languages could have filled that niche quite well (especially with a tweak or two), but lacked comparable levels of publicity, support, education, and engineering. Regardless of accuracy, the negative perceptions of Java's potential opposition were sufficient to leave an opening. As much as academic and research programmers would prefer it to be the case, programming languages aren't chosen based solely on the sophistication and self-consistency of syntax and semantics.

I'm not seriously proposing that the possibilities for dynamism in Java are comparable to the languages usually labeled as "dynamic". I'm only reiterating the truism that all the aspects of a language and/or its execution "platform", including and beyond the type system of its variables, are on a continuum between static and dynamic.

No comments:

Post a Comment