Scripting languages are not the same as dynamic languages

In his History of Python: Introduction and Overview, Guido van Rossum repeats the confusion between “scripting” and “dynamic” languages:

Python is currently one of the most popular dynamic programming languages, along with Perl, Tcl, PHP, and newcomer Ruby. Although it is often viewed as a “scripting” language, it is really a general purpose programming language along the lines of Lisp or Smalltalk (as are the others, by the way).

I think there’s a big difference between the two categories, and the reason they get confused is that both are usually high level languages with dynamic typing, automatic memory management, etc.

But the two types of languages are really different when it comes to how the programmer interacts with them, and in how they are implemented:

  • Scripting languages read whole programs from outside the compiler and execute them immediately, usually with a minimal amount of processing.
  • Dynamic languages include the compiler in their own environment, and programming is seen as adding or modifying that environment.

For some reason, calling a language “scripting” is seen as somehow implying it’s a lower, less powerful language. That’s clearly not true. Nothing in the way Python works makes it a less-than-general purpose language. It simply doesn’t work the way Lisp or Smalltalk do.

del.icio.us bookmarks for December 4th, 2008 through December 28th, 2008

Gits won

One consequence of the NULL historical memory our trade has is that we get to see Worse is Better replayed from time to time. I’ve seen it on languages, editors, kernels, windowing systems…

This time it’s distributed version control systems, with discussions flaring up the Internet to decide which shall be The One DVCS to Rule Them All. And, once again, no surprises. The fast has won over the flexible, the cool has triumphed over the supportive, the macho has destroyed the elegant: Git’s won and Bazaar’s lost. Nothing new here, move along…

Wait a moment, though, as I’d like to make some suggestions to the major players in this epic battle that will not go into the programming annals, but only because we have none.

Git developers: Congratulations! You have created a good tool which, when you buy into its process, works superbly and –has anyone commented on this before?– it’s incredibly fast. Just be aware that not everyone works on the Linux kernel, and supporting different workflows is clearly an area of improvement.

Git supporters: You’ve won a battle, but not the war, and there’s much work to be done yet. Do not tolerate people using other tools, specially if they are constrained by their employers or customers. Keep proselytizing, in every venue, with your chants of “Faster, faster!”, because you know that’s the argument that always wins, that completely trumps any other. It’s also a good way of passing time until the next battle, because the world is imperfect and there will always be other people, other projects to ridicule.

Bazaar developers: You made something better, and you should have known that’s, unfortunately, worse. But your ideas can still be useful. That great plugin you wrote? Reimplement it for git, using a mix of bash scripts, Perl and C. It should take you three to ten times longer, but now you know your cycles are worth a lot less than your CPU’s.

Bazaar supporters: Yes, all three of you. Sorry, but there’s no prize for fair play, if that was what you were aiming for. Learn Git, it’s not as difficult as it’s said to be, and you’re intelligent people. Welcome to the Better is Worse corner of the world, there’s lots of interesting (but sometimes smug) people here and you get to say “That’s been done before, and better” a lot.

Other DVCS devs and supporters: Yes, I know you exist and are used in some project and each one of you is like a precious flower, unique with its pros and cons. But Git and Bazaar are the two extremes here, so apply one side or the other depending on whether you think your tool of choice has won or lost.

Everybody: Use a DVCS, it’s a clear improvement over previous tools. Also, read Worse is Better (extended version). And remember it next time around, please.

del.icio.us bookmarks for November 26th, 2008 through December 2nd, 2008

  • Crack.NET « Josh Smith on WPF - “Crack.NET is a runtime debugging and scripting tool I made that gives you access to the internals of any .NET desktop application running on your computer.” Greasemonkey for .NET. I wish something like this existed for gobject.
  • Room 101: We have Good news, and we have Bad news - “We will be releasing a Newspeak prototype in the first week of January 2009.” Unfortunately, they’ll also need funding.
  • Neopythonic: Scala? - “Types are just the primary focus of compile-time checking at the moment.” Guido van Rossum’s thought on Scala.

del.icio.us bookmarks for November 11th, 2008 through November 14th, 2008