I don't think Java is a bad language, overall. It's got a lot of industry support and a lot of programmers who know it. Sometimes it's the best tool, sometimes not. But it ain't the be-all of programming languages, and I have some arguments against some of your points.

On Jan 25, 2006, at 3:23 PM, Bryan Sant wrote:

This is only true if you're restricted to use vim or emacs.  If all
you have is a text editor, then a verbose, typesafe language like Java
is a hindrance.  If you use an IDE such as Eclipse or NetBeans, your
productivity with Java and these tools far outstrips that of dynamic
languages.  I hardly type at all, the IDE does all the work for me.


There's more to dynamic typing than simply not having to type out type annotations. Consider the Gang of Four's book on Design Patterns. Quite a few of them are completely unnecessary in a dynamically-typed language. They're ways to produce dynamic, flexible systems in a static language. An IDE won't be able to work Design Patterns into your programs like it can automatically enter type annotations.

I submit that productivity is not so based so much on the amount of typing that must be done as it is on the amount of conceptual work that must be done. When building dynamic, flexible software systems, dynamically-typed languages can require a lot less conceptual work, as evidenced by the lack of need for several common design patterns that are necessary in statically-typed languages.

Additionally, dynamic languages have always hit a major wall when
dealing with larger projects.  As long as your project is trivially
small, or very well suited to the original problem domain of that
language, you're better off with a stricter, type-safe language.


This is often trotted out by proponents of static typing, but I don't know if there's any hard evidence. Certainly static typing brings some benefits, but it has some costs as well. I believe dynamic languages suit large projects quite well, and as evidence I can point to a number of large systems built in Lisp and Smalltalk, which were developed and marketed as systems languages long before the term 'scripting language' was coined.

- Runtime performance goes up

Completely incorrect.  Java is significantly faster than any dynamic
language.  It is nearly as fast as C/C++.  Get your facts straight.
Run some of your own benchmark tests if you must.


Java has a very mature implementation with lots of cool technology in its virtual machine. The fact is, though, that dynamic behavior has run-time cost due to extra layers of indirection. Although types are established at compile time, so they don't need to be checked at run- time, method dispatch is still performed at run-time. This dynamicity is what slows Java down relative to C, for example, when coding object-oriented programs. Java's advanced implementation technology is what speeds this up and makes it competitive, not its static typing.

If you're going to benchmark language implementations (one language is not faster than another, but one language implementation may be faster than another one) then you have to decide what you're going to benchmark. A 'dynamic' language has a lot of features that make it easier to program dynamic, flexible software. You can also program dynamic, flexible software in statically-typed languages (witness Design Patterns), but there's a conceptual overhead that the programmer must pay, namely how to work dynamicity into a static language. The extra levels of indirection required to implement dynamicity in 'static' languages produce a similar run time cost to the dynamic features in the 'dynamic' languages. So, benchmarks must be carefully chosen to reflect what /you/ intend to do with the language implementations you're considering.

By the way, a lot of the technology behind Java's virtual machine comes from an extremely dynamic language called Self that was developed by some Sun researchers. It's based on Smalltalk, and requires the advanced virtual machine to have reasonable performance at all. But the technology does exist, so it is a surprisingly fast language implementation.


                --Levi

/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/

Reply via email to