Ted Leung on the air
Ted Leung on the air: Open Source, Java, Python, and ...
Ted Leung on the air: Open Source, Java, Python, and ...
Mon, 30 Aug 2004
David Ascher's Dynamic Languages white paper
David Ascher has written a very good white paper on dynamic languages. The paper is very readable and frames a lot of the issues around dynamic languages. I was flattered when David told me at OSCON that he referenced this blog in the Further Reading section. It's taken me a while to read the paper, and then a second while to writing this post.
One of the great/terrible things about the term "dynamic languages" is that it means so many things to so many people. As I read the paper, I found places where my definition of dynamic languages was the same as what David wrote, and other places where it was different. So I'm going to over some of that in this post, partly to record it for myself, and partly for the benefit of anybody who cares (if there is anybody). Much of what's here won't make sense unless you read David's paper first.
In the Introduction, I agree that a big issue is helping people to understand that kind of languages being discussed have a much broader range of applicability. I think of the whole dynamic languages fad as an exercise in helping people to learn many of the lessons that Smalltalk and Lisp developers already know.
The paper lists 3 criterion for dynamic languages:
Criterion 1: High-level
As David noted, the notion of high-level is hard to pin down. He describes a bias towards more abstract built-in data types as one aspect of being high level. Many languages have large libraries of data types. I think that what is important here is the combination of more abstract built-in data types and syntax. A lot of what I like about Python vs Java/C# is the effectiveness of the notation for dealing with sequences, dictionaries, and so forth. The operations are there in Java/C#, but it's just a lot more concise in Python. I don't think that favoring a VM implementation over a native code generating implementation is a requirement for a language to be high level or dynamic. For me part of what it means for a language to be dynamic is to be able to interact with it. This means an interactive interpreter loop in addition to batch compilation/execution. I also think that a language needs to provide reflective capabilities in order to qualify as high level. Criterion 2: Grassroots open source
One sentence in this section stuck out for me:
I don't have any real disagreement here, although I do think that a possible next direction for dynamic languages is to allow usage of static typing at the programmer's discretion. This could happen via either explicit type declarations or via type inference. In the section on Properties of Dynamic Languages, I'd change the subsection Optimizing person-time, not computer-time to "Optimizing person-time and computer time". I don't think that these goals need to be in opposition. I also highly agreed with the two subsections Open source, deeply and Evolution by meritocracy and natural selection. In the section on When to use Dynamic Languages, there is a subsection titled Ideally suited for loose coupling. I didn't quite understand the point that was being made. The Myths about Dynamic Languages section has two subsections with very similar titles, You can't build real applications with scripting languages and You can't build large systems with dynamic languages. This seemed a bit like hairsplitting to me. I did find it amusing that the second subsection amounted to "proof by Smalltalk". Interesting that this section involves proof by Smalltalk. I did have some trouble with the subsection titled Dynamic languages don't have good tools. I can't speak about tools for Perl, TCL or PHP, but the tools that I've found for Python have issues as far as I'm concerned. The best tool that I've found so far is Wing, which has improved quite a bit for 2.0. It still doesn't have any kind of refactoring tools, and it's not hackable because you don't have the source, unlike Emacs, Eclipse, a Smalltalk, or a Lisp Machine. Of the challenges that David listed, the one that concerns me the most is No real/formal budget. The money isn't actually the problem that worries me. The problem that worries me appears later in the paragraph:
[00:29] |
[computers/programming] |
# |
TB |
F |
G |
5 Comments |
As David noted, the notion of high-level is hard to pin down. He describes a bias towards more abstract built-in data types as one aspect of being high level. Many languages have large libraries of data types. I think that what is important here is the combination of more abstract built-in data types and syntax. A lot of what I like about Python vs Java/C# is the effectiveness of the notation for dealing with sequences, dictionaries, and so forth. The operations are there in Java/C#, but it's just a lot more concise in Python. I don't think that favoring a VM implementation over a native code generating implementation is a requirement for a language to be high level or dynamic. For me part of what it means for a language to be dynamic is to be able to interact with it. This means an interactive interpreter loop in addition to batch compilation/execution. I also think that a language needs to provide reflective capabilities in order to qualify as high level. Criterion 2: Grassroots open source
One sentence in this section stuck out for me:
...the nature of the original creator (biological or corporate) has massive impact on the language's adoption and evolution...I think that this is a highly important point, that covers more than languages. Equally important is the community that springs up around such an endeavor. Having said all that, there are languages which fall into my classification of dynamic languages which are not open source -- the usual suspects, Lisp and Smalltalk (and yes, I'm aware that there are open source implementations of both). Criterion 3: Dynamically Typed
I don't have any real disagreement here, although I do think that a possible next direction for dynamic languages is to allow usage of static typing at the programmer's discretion. This could happen via either explicit type declarations or via type inference. In the section on Properties of Dynamic Languages, I'd change the subsection Optimizing person-time, not computer-time to "Optimizing person-time and computer time". I don't think that these goals need to be in opposition. I also highly agreed with the two subsections Open source, deeply and Evolution by meritocracy and natural selection. In the section on When to use Dynamic Languages, there is a subsection titled Ideally suited for loose coupling. I didn't quite understand the point that was being made. The Myths about Dynamic Languages section has two subsections with very similar titles, You can't build real applications with scripting languages and You can't build large systems with dynamic languages. This seemed a bit like hairsplitting to me. I did find it amusing that the second subsection amounted to "proof by Smalltalk". Interesting that this section involves proof by Smalltalk. I did have some trouble with the subsection titled Dynamic languages don't have good tools. I can't speak about tools for Perl, TCL or PHP, but the tools that I've found for Python have issues as far as I'm concerned. The best tool that I've found so far is Wing, which has improved quite a bit for 2.0. It still doesn't have any kind of refactoring tools, and it's not hackable because you don't have the source, unlike Emacs, Eclipse, a Smalltalk, or a Lisp Machine. Of the challenges that David listed, the one that concerns me the most is No real/formal budget. The money isn't actually the problem that worries me. The problem that worries me appears later in the paragraph:
problematically, to engage in long-term technical projectsI think that it is important that a language's developer community be able to engage in person/resource intensive longer-term technical projects. There are plenty of things piling up for Python 3000, which is only going to happen if Guido van Rossum becomes independently wealthy or retires. Mitchell Baker summed it up best in her post titled Why Pay for Staff? when she said "Speed matters".
From the Wing IDE site:
http://wingide.com/wingide/features
"Product source code is available with purchase (requires non-disclosure agreement)."
On first reading I took that to mean that the source is available if you buy the IDE license.
Posted by Rick Thomas at Mon Aug 30 13:58:28 2004
http://wingide.com/wingide/features
"Product source code is available with purchase (requires non-disclosure agreement)."
On first reading I took that to mean that the source is available if you buy the IDE license.
Posted by Rick Thomas at Mon Aug 30 13:58:28 2004
I remember reading somewhere else that the criteria should be "open standard" and not open source. Academics tend to come from a culture that encourages exchange and discussion of ideas, so languages with roots in academia would be more likely to fit the open standard description. Also, from the little bit I know about Erlang, it fits the "dynamic language" definition, and it most definitely is used in high performance applications.
Posted by Gordon Weakliem at Mon Aug 30 14:15:05 2004
Posted by Gordon Weakliem at Mon Aug 30 14:15:05 2004
Rick,
Yes, you can get the source, but you need an NDA. That effectively destroys the ability for people to enhance Wing and share those enhancements the way that, say, Emacs does. Really, the IDE should be open source.
Posted by Ted Leung at Tue Aug 31 00:42:07 2004
Yes, you can get the source, but you need an NDA. That effectively destroys the ability for people to enhance Wing and share those enhancements the way that, say, Emacs does. Really, the IDE should be open source.
Posted by Ted Leung at Tue Aug 31 00:42:07 2004
Gordon,
Well, David wrote the paper, so he gets to pick whatever criteria he likes.
Posted by Ted Leung at Tue Aug 31 00:44:14 2004
Well, David wrote the paper, so he gets to pick whatever criteria he likes.
Posted by Ted Leung at Tue Aug 31 00:44:14 2004
Well, yes, I get to pick the criteria, but if they don't make sense to a community of readers it's shouting in the wind.
The terminological choice of dynamic languages is clearly the most controversial point of the paper when discussed in the "choir", meaning in the communities such as this one who are already sold on the concepts (no matter what they're called). The major purpose of the paper was to articulate a multi-language viewpoint that would make sense to the people in the pews (the CIOs, CTOs and dev managers 'out there') who aren't already committed members of the church.
I do appreciate all of the feedback though -- it'll be interesting to figure out how to adjust the aim in subsequent papers or revisions or ...
Cheers,
--david
PS: The challenge behind 'open standard' is that the languages in question don't really buy into the value of standards as they are typically defined in the computing industry. "How can you have an open standard if there's no standards body regulating it?" etc.
Posted by David Ascher at Tue Aug 31 16:03:58 2004
The terminological choice of dynamic languages is clearly the most controversial point of the paper when discussed in the "choir", meaning in the communities such as this one who are already sold on the concepts (no matter what they're called). The major purpose of the paper was to articulate a multi-language viewpoint that would make sense to the people in the pews (the CIOs, CTOs and dev managers 'out there') who aren't already committed members of the church.
I do appreciate all of the feedback though -- it'll be interesting to figure out how to adjust the aim in subsequent papers or revisions or ...
Cheers,
--david
PS: The challenge behind 'open standard' is that the languages in question don't really buy into the value of standards as they are typically defined in the computing industry. "How can you have an open standard if there's no standards body regulating it?" etc.
Posted by David Ascher at Tue Aug 31 16:03:58 2004
You can subscribe to an RSS feed of the comments for this blog:
Add a comment here:
You can use some HTML tags in the comment text:
To insert a URI, just type it -- no need to write an anchor tag.
Allowable html tags are:
You can also use some Wiki style:
URI => [uri title]
<em> => _emphasized text_
<b> => *bold text*
Ordered list => consecutive lines starting spaces and an asterisk
To insert a URI, just type it -- no need to write an anchor tag.
Allowable html tags are:
<a href>
, <em>
, <i>
, <b>
, <blockquote>
, <br/>
, <p>
, <code>
, <pre>
, <cite>
, <sub>
and <sup>
.You can also use some Wiki style:
URI => [uri title]
<em> => _emphasized text_
<b> => *bold text*
Ordered list => consecutive lines starting spaces and an asterisk