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.

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. 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. bookmarks for November 11th, 2008 through November 14th, 2008 bookmarks for October 29th, 2008 through November 10th, 2008

  • Seed – GNOME Live! – “Seed is a library and interpreter, dynamically bridging (through GObjectIntrospection) the WebKit JavaScriptCore engine, with the GObject type system. In a more concrete sense, Seed enables you to immediately write applications around a significant portion of the GNOME platform, and easily embed JavaScript as a scripting-language in your GObject library.”
  • Room 101: Dynamic IDEs for Dynamic Languages! – “In an IDE written in a dynamic language (such as Smalltalk or Self or Lisp), the IDE code itself can be modified on the fly. This is a double edged sword?”
  • Casual Connect: Sony On Developing for an Open PS2 Platform – ‘The most important information Bain had for his audience was news that, in Europe, the PlayStation 2 “is effectively an open platform,” adding, “You no longer have to submit a game for content approval.”‘ This could be an industry-transforming move. bookmarks for October 20th, 2008 through October 27th, 2008

  • DreamHost Blog » How To Make Money – A good article on banks and hosters.
  • MOAP – Maintenance of a project – Trac – “moap is a swiss army knife for project maintainers and developers. It aims to help in keeping you in the flow of maintaining, developing and releasing, automating whatever tasks can be automated.”
  • Valério Valério?s Blog » BlueMaemo – “BlueMaemo is a remote controller program for the Maemo-powered devices. With BlueMaemo you can turn your Maemo-powered device in a mixed Bluetooth keyboard-and-mouse device through the HID Bluetooth profile.”

The newest version of Indesxifrable, code name “Ningú no ho entén”, available now!

Dear people making announcements, specially on planets:

Please provide a small description of what the project does or at least a link to the main page. “Text Editor” is easy to understand, but many project names are not. What does PiTiVi do, and why is the Simple Timeline gone? What’s a gbrainy and why is it included in a CD? We really want to know!

Thanks and have a good day 🙂 bookmarks for September 26th, 2008 through October 15th, 2008