I think Bill Venner in his item on static and dynamic is trying too hard to separate language and culture.
Python supports this multi-valued return technique better in its syntax than Java, but I realized that the availability of syntax isn't the main reason I do it in Python. The main reason is that's the way it's usually done in Python. By contrast, that's not the way it's usually done in Java. The cultures are different. The culture that guided the design of a language influences my attitudes and mindset when I use the language. The Java culture encourages me to build solid bricks...I don't think you can untangle the culture and the language, even the syntax. Python the language was influenced by Lisp and Smalltalk. Those languages were developed by, and developed the dynamic culture that surrounds them.
Lisp was created in the late 1950s by people who needed agility more than they needed speed. (Yes, 1950s.) Smalltalk was influenced by Lisp, and Python by each in turn. They began is labs that gave us the earliest work in AI, collaboration, and usability. They were not computing pi or finding the next largest prime number.
This realization got me wondering, to what extent is this perceived increase in productivity with languages such as Python, Ruby, and Smalltalk due to the culture of those communities, and the mindset that the culture engenders in programmers, versus the actual languages themselves? What is the real source of the differences in the static versus dynamic language debate?A community cannot sustain a specific culture unless the framework supports that culture. Programming languages are the framework that sustains the culture of the community that uses the language. They go hand in hand and nother will change that.
Today, and since the late 1980s, the programming community in general has needed agility for the most part more than we have needed speed. Our languages coming out of the "need for speed" community (C and Pascal, then C++, and now Java, C#) and the cultures that accompany them, have slowly been migrating to be more a culture of agility and less a culture of speed.
Those need for speed languages have features and those cultures have adopted practices that are more like the agile languages developed and used in the AI and collaboration labs in the 1970s. Finally we are seeing the last stages of the transition. Truly dynamic languages are gaining mindshare over the partially dynamic.
Meanwhile good implementations of dynamic languages and the advances of hardware have all but eliminated the speed side of the equation. There are fewer uses than ever for the languages coming out of the speed culture.
Update: A comment on Bill's blog...
Whenever you start to think of some Java problem as a general problem with static type checking, maybe rewrite it in Nice http://nice.sourceforge.net/I agree as far as that goes. The newer type systems are "dynamic" even though they represent a somewhat different development model than more traditional dynamic languages. But I don't know Nice and cannot say that it is dynamic or merely "partially dynamic", esp. if it is just a precompiler for Java. (Someone will correct me so I won't even google it.)
let boolean redirected, reply; let long forumID; let String subject, body; (redirected, forumID, reply, subject, body) = ExamplePage.process(request, response, session);
Being dynamic or agile is more than just having an explicit type system, or having a bad type system vs. a good one. For example, are relatively heavy mechanisms like "class loaders" needed?