tag:blogger.com,1999:blog-18508356.post9195679220757917605..comments2026-02-13T11:24:21.556-05:00Comments on Just a little Python: Dynamic Language Weenies?Rick Copelandhttp://www.blogger.com/profile/11612114223288841087noreply@blogger.comBlogger30125tag:blogger.com,1999:blog-18508356.post-71625768296036454292007-11-08T22:46:00.000-05:002007-11-08T22:46:00.000-05:00I enjoy these debates, but part of me doesn't see ...I enjoy these debates, but part of me doesn't see the point. Is language X better than language Y? The language I happen to use at a given time is the one that--hopefully--will be best suited to the nature of the task at hand, and the constraints that will be imposed on me by the production environment.<BR/><BR/>It seems to me that the productivity gain one might experience with one language over another is dependent entirely on the nature of the problem. If I need to write to a socket, for instance, please don't make me use Java. Accessing memory directly is horribly painful in such a language.<BR/><BR/>Likewise, if I need to multithread, I need a language that doesn't mutex-protect the whole heap. That pretty much rules out all garbage collected languages.<BR/><BR/>Speaking of multithreading: in ten years' time, when there will be somewhere between 64 and 1024 cores on a chip that is tightly constrained by memory bandwidth, multithreading is going to be the only way to get performance out of it.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-18508356.post-42201999333947862652007-04-02T21:37:00.000-04:002007-04-02T21:37:00.000-04:00Surely linguists are not saying that all languages...<I>Surely linguists are not saying that all languages express all ideas with identical concision and precision, right? I provide a simple counter-example in the French above (and yes, I know some French use the word for ninety). Of course all languages can express the same ideas, but one has only to look at the relative number of words in translations of various works to see that they do not express them all equally succinctly.</I><BR/><BR/>We are in agreement mostly, however ...<BR/><BR/>Put a little technically, linguists agree that <I>all</I> natural languages can be expressed with the exact same grammar. Hence, anything expressed in one language is equally easily expressed in other languages (a matter of words more at most).<BR/><BR/>Sapir-Whorf (and here we are in agreement) is probably valid for programming languages because the grammars of programming languages <I>are</I> different. And quite significantly. To take an extreme example, consider the Java grammar (which is at least Context-Free) and the instruction-set of some processor (which is not even a grammar but merely a collection of constant strings).Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-18508356.post-58233280021505970992007-04-02T08:46:00.000-04:002007-04-02T08:46:00.000-04:00@andre:Thanks for your comment. Of course, you're...@andre:<BR/><BR/>Thanks for your comment. Of course, you're absolutely right. I was getting muddled myself when complaining about someone else's muddled thinking. ;-) My mental model was correct, but my vocabulary left much to be desired. Static typing is binding a variable name to a particular type, dynamic typing is tying the name only to the object (which likely has a "strong type"), and generally at runtime.<BR/><BR/>Late binding is kind of in-between, as you've tied a name to a hierarchy of types. I guess that's why the "safe" way to downcast in C++ is "dynamic_cast". But you're right that it falls into the static language camp.Rick Copelandhttps://www.blogger.com/profile/11612114223288841087noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-42909857119349803972007-04-01T21:42:00.000-04:002007-04-01T21:42:00.000-04:00Don't confuse static/dynamic typing with early/lat...Don't confuse static/dynamic typing with early/late binding. If you are <I>defining</I> static/dynamic typing to mean early and late binding, well, OK, I can't argue with that (although I will disagree the definition). C++ is statically typed, in the sense that the type of all variables are known at compile-time, but is late-bound via <I>virtual</I> methods, so that the method invoked is the one defined by the most derived subclass.<BR/><BR/>No virtual keyword: static typing, early binding. Virtual keyword: static typing, late binding.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-18508356.post-47563324496681815772007-04-01T20:57:00.000-04:002007-04-01T20:57:00.000-04:00I happened to see the last sentence first, you're ...I happened to see the last sentence first, you're tired of debating this - I'll bite my tongue.Isaac Gouyhttps://www.blogger.com/profile/00226627985460018169noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-77914738129608475892007-04-01T18:18:00.000-04:002007-04-01T18:18:00.000-04:00Rick, I think it's telling that you didn't try to ...<I>Rick, I think it's telling that you didn't try to answer these questions</I><BR/><BR/>Just getting tired of a discussion going nowhere, but here goes....<BR/><BR/><I>- "is it reasonable to say that Joe is more productive than you?"</I><BR/><BR/>It's reasonable to say that Joe is <I>likely</I> to be more productive than me (especially if the difference is consistently and strongly tilted in one direction), although I can't make a blanket statement that he <I>is</I>. It is more reasonable given that Joe was asked before completing the task to time himself (so we're not basing the results strictly on his memory). And without any objective evidence that refutes this iffy data, my bias is to accept it, at least in the general sense that scripting language programs tend to be shorter, slower to run, and faster to write than programs written in C, C++ and Java.<BR/><BR/><I>- "Does that really seem like a fair comparison to you?"</I><BR/><BR/>Fair comparison? No, there are a few things that are unfair. One major one is that the scripting languages had an unfair chance to advance in that time period. In fact, due to advances in all the languages studied (I know about some advances in Java and Python and assume there have also been improvements in C/C++, Rexx, and Tcl), the relevance today of the conclusions is questionable. It wasn't a paragon of scientific research, but then again, it's better than the zero studies that refute it. And from my perspective as someone who has achieved some level of mastery in both C++ and Python, and written similar applications in each, the productivity disparity between a competent C++ programmer and Python programmer, whether it be 2-3x improvement or 5-10x improvement (as it obviously would vary by programming task) does not seem extravagant to me.<BR/><BR/>In my opinion, take it or leave it, the improvement for dynamic languages will actually <I>increase</I> as projects get larger due to a) <EM>smaller team size</EM> (more done in less time means fewer coders are needed) leading to b) <EM>fewer interfaces</EM>, where interfaces between modules tend to increase development time and system complexity in a non-linear way. I would expect the "type safety" advantages of static languages to be mitigated by competently written unit tests which would, in the course of testing for <I>functional</I> bugs, automatically find most <I>typing errors</I>. It is, as I stated at the beginning of this paragraph, an opinion, but it is the opinion of a practitioner in both C++ and Python. Again, take it or leave it. And no, I don't think that this is "truthy," but I am tired of debating the point.Rick Copelandhttps://www.blogger.com/profile/11612114223288841087noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-36817868628874072662007-04-01T16:51:00.000-04:002007-04-01T16:51:00.000-04:00Rick, I think it's telling that you didn't try to ...Rick, I think it's telling that you didn't try to answer these questions<BR/>- "is it reasonable to say that Joe is more productive than you?"<BR/>- "Does that really seem like a fair comparison to you?"<BR/><BR/>rick wrote <I>I think we understand each other here and just disagree on the value of the study.</I><BR/>It seems more than that.<BR/>It seems like you chose truthiness.Isaac Gouyhttps://www.blogger.com/profile/00226627985460018169noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-82703949858027860082007-04-01T15:02:00.000-04:002007-04-01T15:02:00.000-04:00Re: isaacAs to the Prechelt study, I think that it...Re: isaac<BR/><BR/>As to the Prechelt study, I think that it contributes a data point that is not completely valueless (as in, equivalent in value to having never been performed, which is what the Hacknot article seems to believe.) It may have some methodological flaws, but without evidence to refute its conclusions, it's the best we've got. I think we understand each other here and just disagree on the value of the study. [Forrest Gump voice] And that's all I have to say about that. [/Forrest Gump voice]<BR/><BR/>As to the typing rants, I have put a disclaimer into the top of my article. The Hacknot author did indeed change his essay after I posted my response (at least once), and I don't particularly care to perform diffs every few days to let people know what he <EM>previously</EM> said. That's the danger to responding to something on the Internet, I suppose.<BR/><BR/><I>It seems a little strange that you both put forward higher-order functions as a strong advantage of dynamic languages and then characterize dynamic languages as "mainly imperative".</I><BR/><BR/>Higher-order functions are a feature of functional programming languages. Declarative programming is a style many or most functional programming languages use. This does not mean that HOFs are always declarative in nature (IMO).Rick Copelandhttps://www.blogger.com/profile/11612114223288841087noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-47837612544803019122007-04-01T14:39:00.000-04:002007-04-01T14:39:00.000-04:00rick wrote I think that the Prechelt study stands ...rick wrote <I>I think that the Prechelt study stands as evidence. It may have some flaws which may or may not affect the conclusions of the study, but absent evidence presented from the C/C++/Java camp, it is at least something.</I><BR/>You are mistaken - <I>if</I> the Prechelt study has flaws which seriously undermine the conclusions then it's value as evidence disappears. (As-soon-as they discover your $100 bill is fake you lose $100.)<BR/><BR/><BR/>rick wrote <I>If I remember it wrong, or if it's been corrected, you can throw out my typing rants.</I><BR/>If you want readers to pay attention to the other points you make, then maybe <I>you</I> should throw out those wrong or out-of-date typing rants.<BR/><BR/><BR/>rick wrote <I>But my response (and the original article) was really more about comparing static languages of the C/C++/C#/Java type (imperative, no type inferencing, etc.) with dynamic languages of the Ruby/Python type (mainly imperative, no type inferencing, etc.)</I><BR/>It seems a little strange that you both put forward higher-order functions as a strong advantage of dynamic languages and then characterize dynamic languages as "mainly imperative". <BR/><BR/>(And there's a simple answer to this rhetoric - <I>"I mean, come on -- do I really need to declare a pair class if I want a list of points? And a separate RGB class if I want color values? Give me a break"</I> - if you don't <I>need</I> those classes, you can stick with a list of float arrays. But I'm digressing into details so I'll try and get back to a theme.)<BR/><BR/><BR/>rick wrote <I>I think that the original author (on Hacknot) brushed off the Prechelt study much too quickly. ... <BR/>And dismisses it unfairly (IMO) without providing any evidence to counter his conclusions.</I><BR/>You are mistaken, the author did provide evidence, the author directed us to "read the paper [Prechelt's] carefully" - read section 3.6 "Validity: Are these programs comparable?" and you will find that Prechelt admits the very problems that the author complains about.<BR/><BR/><B>All the problems admitted by Prechelt gave advantage to the "script" programmers.</B><BR/><BR/><BR/>Let suspend disbelief for just a moment, take the results at face value, and use them as evidence for Stephen Deibel's comment <I>"Python would use 10 to 20 percent of the amount of code that Java or C++ would use to write the same application."</I>?<BR/>Prechelt wrote "We see that non-scripts are typically two to three times as long as scripts."<BR/>That's 30 to 50 percent not 10 to 20 percent.<BR/><BR/><BR/>rick wrote <I>all studies of which I know (Prechelt's) support the dynamic language productivity hypothesis</I><BR/>Consider this - <BR/>a) <I>we measure</I> how long it takes you to satisfactorily complete a programming task<BR/>b) Joe satisfactorily completes the same task and <I>we ask him how long he took</I><BR/>Joe <I>says</I> he took 2 hours and we measured that you took 5 hours - is it reasonable to say that Joe is more productive than you?<BR/><BR/><BR/>Prechelt measured how long the Java,C,C++ programmers took as part of a controlled experiment. He <B>didn't measure</B> how long the Perl,Python,Rexx,Tcl programmers took.<BR/><BR/>A year or two after the Java,C,C++ controlled experiment he did a newsgroup request for Perl,Python,Rexx,Tcl programs and <B>asked the programmers</B> how long they took to write the programs.<BR/><BR/>Does that really seem like a <I>fair</I> comparison to you?Isaac Gouyhttps://www.blogger.com/profile/00226627985460018169noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-49544455700728761322007-04-01T09:47:00.000-04:002007-04-01T09:47:00.000-04:00Thanks for the quick reply. I believe you would us...Thanks for the quick reply. I believe you would use the '.' operator to do the operation you are talking about. There is no real ambiguity here, is it ?PierreRhttps://www.blogger.com/profile/07709580305967202558noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-15213202718526405492007-04-01T09:21:00.000-04:002007-04-01T09:21:00.000-04:00Re: pierreI'm not a Perl expert, but I believe tha...Re: pierre<BR/><BR/>I'm not a Perl expert, but I believe that the following confusion can apply to Perl:<BR/><BR/><I>The deciding question here is whether the language implicitly converts unrelated types without warning, allowing you to add the integer 0 to the string "10" and arrive at the result "010" (or is it 11? I forget.).</I><BR/><BR/>But as a previous commenter pointed out, everyone has their own definition of strong/weak, so mine may not apply. IMO, any language that implicitly converts strings and integers is weakly typed because of ambiguities like the above.Rick Copelandhttps://www.blogger.com/profile/11612114223288841087noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-42450481461565165502007-04-01T08:33:00.000-04:002007-04-01T08:33:00.000-04:00In what way, Perl goes in the weak side of your fi...In what way, Perl goes in the weak side of your first strong/weak axis ?PierreRhttps://www.blogger.com/profile/07709580305967202558noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-24952803979012770972007-03-31T23:19:00.000-04:002007-03-31T23:19:00.000-04:00Re: anonymous (on the linguistics issue)Good artic...Re: anonymous (on the linguistics issue)<BR/><BR/><I>Good article. I agree with you mostly but the following myth is Just Plain Wrong (TM)<BR/><BR/>"Language is a tool for expressing ideas. Some languages express different ideas more easily, or with greater difficulty, than others. Try saying ninety-nine in French, if you don't believe me (quatre-vingt-dix-neuf, literally four twenty ten nine)"<BR/><BR/>That is the Sapir-Whorf hypothesis which has been quite thoroughly debunked by linguists. See "Language Instinct" by Steven Pinker for details which are explained in lay-terms.</I><BR/><BR/>Surely linguists are not saying that all languages express all ideas with identical concision <EM>and</EM> precision, right? I provide a simple counter-example in the French above (and yes, I know some French use the word for ninety). Of course all languages can express the same ideas, but one has only to look at the relative number of words in translations of various works to see that they do not express them all equally succinctly.<BR/><BR/>Additionally, glancing over at the Wikipedia entry on Sapir-Whorf, it doesn't appear to be what I'm saying at all. Sapir-Whorf says that language affects the ability of the speaker to formulate ideas, not that it affects his efficiency in expressing them. So I don't think I'm supporting the Sapir-Whorf hypothesis at all with my natural language comment at all. (Though I may tend to agree with it when it comes to programming languages.)Rick Copelandhttps://www.blogger.com/profile/11612114223288841087noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-75060142249765066572007-03-31T23:11:00.000-04:002007-03-31T23:11:00.000-04:00Re: IsaacFirst off, thanks for your insightful com...Re: Isaac<BR/><BR/>First off, thanks for your insightful comment. I'll try to respond to each of your points, but due to my sleepiness I probably won't give them the attention they deserve ;-)<BR/><BR/><I>1) Show me the evidence!<BR/>afaict the big theme of "Invasion Of The Dynamic Language Weenies" is simply that extravagant claims are being made without evidence to back them up (aka BS aka Snake Oil). I don't think you addressed that at all.</I><BR/><BR/>I think that the Prechelt study stands as evidence. It may have some flaws which may or may not affect the conclusions of the study, but absent evidence presented from the C/C++/Java camp, it is at least <EM>something.</EM> And of course, there is the subjective "evidence" of the "converts" to dynamic languages. I think that the original author (on Hacknot) brushed off the Prechelt study much too quickly.<BR/><BR/><I>2A) Muddled thinking about typing<BR/>The terms we use to describe programming languages are somewhat muddled - different people have their own definitions.<BR/><BR/>The author of "Invasion Of The Dynamic Language Weenies" seems to acknowledge that - There is no canonical definition of a Dynamic Language, but some generalizations are possible.<BR/><BR/>afaict you don't actually address his description of dynamic languages at all but just list your own distinctions (axes).</I><BR/><BR/>Sorry if I wasn't as clear as I'd intended to be. I would describe most dynamic languages as <EM>strongly typed</EM>, where the Hacknot author would describe them as weakly typed. <BR/><BR/>[Actually, I just went back to the original article and it doesn't seem to have any reference to strong/weak typing at all. I could have sworn that the original had "weak" for the current "dynamic", and "strong" for the current "static." If I remember it wrong, or if it's been corrected, you can throw out my typing rants. ;-)]<BR/><BR/>That's what I was trying to get at. I also think he missed most of the productivity-enhancing features of dynamic languages over C/C++/C#/Java.<BR/><BR/><I>And then you write "The author ... conflates all three axes into strong versus weak".<BR/>No! - the author never mentions strong typing or weak typing.</I><BR/><BR/>You may be right. I either misread, or the article has changed.<BR/><BR/><I>2B) Muddled thinking about typing<BR/>Here's what one programming languages textbook says: 'So what is “strong typing”? This appears to be a meaningless phrase, and people often use it in a nonsensical fashion. To some it seems to mean “The language has a type checker”. To others it means “The language is sound” (that is, the type checker and run-time system are related). To most, it seems to just mean, “A language like Pascal, C or Java, related in a way I can’t quite make precise”.</I><BR/><BR/>Agreed. That's why I prefer to be a lot more explicit than say "strong/weak." And I may have misread the original article.<BR/><BR/><I>2C) Muddled thinking about typing<BR/>"The second axis is static versus dynamic typing, also known as early versus late binding."<BR/>Do you think when people say static typing and dynamic typing they might mean static checking and dynamic checking?</I><BR/><BR/>They might -- both as kinds of type safety, one check performed before runtime and one at runtime. In the case of Python, what I mean by dynamic typing is that objects have types, names (variables) do not. Names may be re-bound at runtime to objects of any type.<BR/><BR/><I>3) selective examples<BR/>"Ignorance of other strong advantages of dynamic languages ... built-in polymorphic containers and high-order functions"<BR/>You also accuse the author of ignoring other languages such as Haskell, ..., OCAML<BR/>Don't static languages like Haskell and OCaml and ... provide built-in polymorphic containers and higher-order functions?</I><BR/><BR/><B>Absolutely!</B> I think that these static languages provide development environments that <EM>may</EM> be significantly more productive, produce higher-performing code, and provide greater assurance of correctness. But my response (and the original article) was really more about comparing static languages of the C/C++/C#/Java type (imperative, no type inferencing, etc.) with dynamic languages of the Ruby/Python type (mainly imperative, no type inferencing, etc.).<BR/><BR/><I>Isn't there an OCaml REPL?<BR/>Have you Googled for c repl? Tried cint or ch?</I><BR/><BR/>I haven't tried cint or ch, and have only fiddling-around experience with OCaml, so I can't comment on these. I know that my REPL in Python (IPython) has great introspection abilities, debugger integration, etc. While I'd expect that from OCaml (since so much of what they do impresses me already), I'd be surprised to find introspection in a C/C++ REPL, simply because the language support isn't there (RTTI doesn't even come close).<BR/><BR/><I>4) Show me the evidence! (Again)<BR/>The article's author doesn't need to take measurements to show that the extravagant claims made by others are not supported by evidence - he just needs to show that those others do not provide evidence for their claims. The burden is on the others to show their claims are true.<BR/><BR/>The author discusses Prechelt's study.<BR/></I><BR/><BR/>And dismisses it unfairly (IMO) without providing <EM>any</EM> evidence to counter his conclusions.<BR/><BR/><I><BR/>Writing "In fact, without exception, all studies ..." is another example of what the author is objecting to - it's an extravagant unsupported claim - show us the reference list of "all studies" so we can check that what you say is correct!</I><BR/><BR/>OK, that was probably overreaching on my part. What I meant was, "Here, we have this Prechelt study. What do you have? Nothing? Well, I guess that means <EM>all the studie(s)</EM> (however weak you may hold them or it to be) favor(s) our conclusion." I was basing my argument on the fact that all studies of which I know (Prechelt's) support the dynamic language productivity hypothesis, while I have seen none to refute it. I'll admit that's weak, but it's <EM>something</EM>. <BR/><BR/>Plus on a less persuasive, subjective note, it agrees with the experience of myself and the incredibly unscientific sampling of "people I know who have programmed professionally in both." ;-)Rick Copelandhttps://www.blogger.com/profile/11612114223288841087noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-20853972671211163552007-03-31T22:01:00.000-04:002007-03-31T22:01:00.000-04:00Another "best of both worlds" language like Groovy...Another "best of both worlds" language like Groovy is Boo (boo.codehaus.org). It's a CLI language with syntax copied from Python. Variables default to statically typed, but with type inference so you don't have to repeat yourself. You can explicitly declare variables as "duck" typed to get fully dynamic lookup.<BR/><BR/>So you get the speed and safety of static typing, with the convenience of type inference, and the convenience of fully dynamic types when that isn't enough, and nice clean Pythonish syntax (only better, because unlike Guido the Boo folks don't have a hate on for anonymous functions and higher-order-programming), and full interop with the enormous suite of .NET libraries.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-18508356.post-57146562550376054822007-03-31T21:42:00.000-04:002007-03-31T21:42:00.000-04:00Good article. I agree with you mostly but the fol...Good article. I agree with you mostly but the following myth is Just Plain Wrong (TM)<BR/><BR/><I>Language is a tool for expressing ideas. Some languages express different ideas more easily, or with greater difficulty, than others. Try saying ninety-nine in French, if you don't believe me (quatre-vingt-dix-neuf, literally four twenty ten nine)</I><BR/><BR/>That is the Sapir-Whorf hypothesis which has been quite thoroughly debunked by linguists. See "Language Instinct" by Steven Pinker for details which are explained in lay-terms.<BR/><BR/>However, the theory could be valid for programming languages. (A programmer who does not have functional programming is almost never going to think to use them.) But it has been proved that all <B>natural languages</B> are exactly equivalent to each other.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-18508356.post-30267392633387451642007-03-31T16:38:00.000-04:002007-03-31T16:38:00.000-04:00I think people get pissed off with the hype surrou...I think people get pissed off with the hype surrounding dynamic languages (I know I do) because sometimes it does seem to be driven by 'weenies' (ok, novices) that don't have the experience to evaluate it, and like it purely because its new, cool and allows them to work without discipline (thats not saying everyone uses them to work without discipline..). Of course its not new, e.g. ideas of functions as first class composable concepts is approx 100 years old.<BR/><BR/>I think you do Java (yes, its one of my favorites..) a disservice by saying it didn't introduce anything new. The delegating classloader model is something that the VM authors claim was novel for instance. As an aggregation of existing techniques, it also broke new ground - i.e. what they carefully discriminated what to put in, and what to put out, has turned out, even over a decade later, to have been quite astoundingly balanced and preciently cautious.<BR/><BR/>The current interest in languages that experiment with typing (python, ruby, kawa, javascript) feels to me like the mini explosion in imperative languages at the start of home computing. None of them seem to have got a good balance so far, they feel more driven by experiment - which is fine as no-one yet has the benefit of hindsight thats necessary.<BR/><BR/>I think in summary my message is, give it more time, and ignore the mudslinging.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-18508356.post-80930096174749279472007-03-31T16:00:00.000-04:002007-03-31T16:00:00.000-04:00Rick, great article. nice rebuttal, and very info...Rick, great article. nice rebuttal, and very informative.<BR/><BR/>thanks, <BR/>-Corey<BR/><BR/>----<BR/>www.goldb.orgCorey Goldberghttps://www.blogger.com/profile/06219872951977664560noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-3927261171833818322007-03-31T15:54:00.000-04:002007-03-31T15:54:00.000-04:00Both "Invasion Of The Dynamic Language Weenies" an...Both "Invasion Of The Dynamic Language Weenies" and your response here are so long that it's difficult to comment without seeming to pick on small things so I'll try to stay with main themes.<BR/><BR/><BR/>1) Show me the evidence!<BR/>afaict the big theme of "Invasion Of The Dynamic Language Weenies" is simply that extravagant claims are being made without evidence to back them up (aka BS aka Snake Oil). I don't think you addressed that at all. <BR/><BR/><BR/>2A) Muddled thinking about typing<BR/>The terms we use to describe programming languages are somewhat muddled - different people have their own definitions.<BR/><BR/>The author of "Invasion Of The Dynamic Language Weenies" seems to acknowledge that - <I>There is no canonical definition of a Dynamic Language, but some generalizations are possible.</I><BR/><BR/>afaict you don't actually address his description of dynamic languages at all but just list your own distinctions (<I>axes</I>).<BR/><BR/>And then you write <I>"The author ... conflates all three axes into strong versus weak"</I>.<BR/><B>No!</B> - the author never mentions strong typing or weak typing.<BR/><BR/><BR/>2B) Muddled thinking about typing<BR/>Here's what <A HREF="http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/" REL="nofollow">one programming languages textbook</A> says: <I>'<B>So what is “strong typing”?</B> This appears to be a meaningless phrase, and people often use it in a nonsensical fashion. To some it seems to mean “The language has a type checker”. To others it means “The language is sound” (that is, the type checker and run-time system are related). To most, it seems to just mean, “A language like Pascal, C or Java, related in a way I can’t quite make precise”.</I><BR/><BR/>2C) Muddled thinking about typing<BR/><I>"The second axis is static versus dynamic typing, also known as early versus late binding."</I><BR/>Do you think when people say static typing and dynamic typing they might mean <A HREF="http://citeseer.ist.psu.edu/cardelli97type.html" REL="nofollow">static checking and dynamic checking</A>?<BR/><BR/><BR/>3) selective examples<BR/><I>"Ignorance of other strong advantages of dynamic languages ... built-in polymorphic containers and high-order functions"</I><BR/>You also accuse the author of <I>ignoring other languages such as Haskell, ..., OCAML</I> <BR/>Don't static languages like Haskell and OCaml and ... provide built-in polymorphic containers and higher-order functions?<BR/><BR/><I>not so much because compile time is prohibitive in static projects, but because the REPL (read-eval-print loop) is so freaking easy</I><BR/>Isn't there <A HREF="http://caml.inria.fr/pub/docs/manual-ocaml/manual023.html#htoc108" REL="nofollow">an OCaml REPL</A>? <BR/>Have you Googled for c repl? Tried cint or ch?<BR/><BR/><BR/>4) Show me the evidence! (Again)<BR/><I>The article's author hasn't taken measurements, either. But Lutz Prechelt at least has some data, where the linked article presents none. In fact, without exception, all studies which have compared productivity in languages between compiled, manifestly, statically typed languages and interpreted, dynamically typed langauges have the dynamic languages easily winning out.</I><BR/><BR/>The article's author doesn't need to take measurements to show that the extravagant claims made by others are not supported by evidence - he just needs to show that those others do not provide evidence for their claims. The burden is on the others to show their claims are true.<BR/><BR/>The author discusses Prechelt's study.<BR/><BR/>Writing <I>"In fact, without exception, all studies ..."</I> is another example of what the author is objecting to - it's an extravagant unsupported claim - show us the reference list of <I>"all studies"</I> so we can check that what you say is correct!Isaac Gouyhttps://www.blogger.com/profile/00226627985460018169noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-19732466180389265742007-03-31T14:56:00.000-04:002007-03-31T14:56:00.000-04:00Don't mean to criticize but some French use nonant...Don't mean to criticize but some French use nonante-neuf which is literaly ninety-nine. I'll go back to reading the rest of the article now.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-18508356.post-27348903872955773632007-03-31T13:32:00.000-04:002007-03-31T13:32:00.000-04:00I see that the above capture isn't a crash. I was...I see that the above capture isn't a crash. I was just referring to your statement:<BR/><BR/><I>If I then later break my promise, I won't get any useful restart options or diagnostics, but most likely an ugly crash.</I><BR/><BR/>I have looked into the Lisp condition system enough to be awed by it, but not enough to really use it (or comment on it) in a competent manner. I do realize that there's a <B>big</B> difference in power between Python's exception system and Lisp's condition system.<BR/><BR/>Of course, a debugger console is most likely not what you want in deployed code, but it's nice to have the option to find a bug, fix a bug, continue with the test where you left off. I know of no other language with that ability. I really <I>do</I> need to learn Lisp one day....Rick Copelandhttps://www.blogger.com/profile/11612114223288841087noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-10664355768270180342007-03-31T13:25:00.000-04:002007-03-31T13:25:00.000-04:00That isn't a crash. That's a debugger console. L...That isn't a crash. That's a debugger console. Lisp's condition system is far in advance of pretty much anything out there. It was asking if you want to try again with a different value. You could literally continue the program from that point with the new value. You don't need to restart the whole thing. <BR/><BR/>You can even recompile code and continue. That's what Lispers mean by dynamic language. Python and Ruby development is primitive by comparison.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-18508356.post-80338707735696758752007-03-31T11:56:00.000-04:002007-03-31T11:56:00.000-04:00Re: Matt M.I agree. CPAN, CTAN, PECL, PEAR, PyPI,...Re: Matt M.<BR/><BR/>I agree. CPAN, CTAN, PECL, PEAR, PyPI, and RubyGems are other examples. Hard for Sun or Microsoft to keep up with anything like that. And I'm guessing that the open-source nature of all the languages represented by the above repositories attracts programmers who are more interested in sharing their code than your standard Java/C# crowd.Rick Copelandhttps://www.blogger.com/profile/11612114223288841087noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-47508011073810409112007-03-31T11:52:00.000-04:002007-03-31T11:52:00.000-04:00Re: AnonymousPoint taken about LISP/Lisp spelling ...Re: Anonymous<BR/><BR/>Point taken about LISP/Lisp spelling -- I can never remember which way is currently accepted, as I don't really do any Lisp right now. But the article now has the "Lisp" spelling, at least.<BR/><BR/>I find your point about the dynamic+strong => static+weak change in using Lisp's static type checks intriguing. I think most languages with static type declarations enforce those declarations at compile time (to avoid the ugly crash you mentioned). Of course, the binary code is not type-safe, but the static language compilers can usually guarantee that the correct types will be used. I was not aware that in Lisp, the declarations were merely advisory to the programmer and not compulsory as in, say, Haskell or C++. It sounds like (from my limited experience) the worst of all worlds (weak, manifest, static typing) for the sake of performance. Is this a weakness, perhaps, of mixing static and dynamic typed names together in one program? <BR/><BR/>I ask because it seems like Pyrex and ML do something like mixed dynamic/static typing. (I know that ML is statically typed, but sometimes that type is "either A, B, or C".) The more the type inferencer can determine, the faster code can be produced. If the compiler can't guarantee the type of a parameter, however, it will fall back to the "safe" way of executing the code. That seems to me to be a better approach than trusting the programmer to remember all the "promises" made....Rick Copelandhttps://www.blogger.com/profile/11612114223288841087noreply@blogger.comtag:blogger.com,1999:blog-18508356.post-85191726959643279162007-03-31T11:50:00.000-04:002007-03-31T11:50:00.000-04:00CPAN.org is the perfect example that community is ...CPAN.org is the perfect example that community is important to the use and adoption of a language.Anonymousnoreply@blogger.com