Monday, March 29, 2010

PLT Scheme Gets a New Name

The PLT group announced that it is changing the name of PLT Scheme to PLT Racket. DrScheme will become DrRacket, mzscheme will become racket, and so on. Normally I dismiss this type of thing as either marketing driven silliness or a cover for other, more serious problems that the vendor is having. I almost always find this sort of gratuitous name change annoying. In this case, however, I agree that the change is warranted.

DrScheme was my very first Scheme and I was impressed by the quality of its implementation and the tools that it provided. Over the years I became less enchanted. First it was little things: rather than use format as the format-and-print function like every other LISP, PLT used printf. Even worse, they did have a function named format that did something else making it harder to use a real format. Rather than use a standard sockets interface for their networking they used their own API that made using PLT Scheme harder for someone used to the normal socket interface. To be sure, PLT provided alternate libraries that ameliorated these annoyances, but it was still something you had to specify in every program file. Not fatal, just irritating. And they did have all those neat tools.

They went too far, however, when they removed set-car! and set-cdr!. This was justified by declaring these two functions "too dangerous" for programmers to use safely. Statements like that should set alarm bells ringing for any Lisper. The point of Lisp, at least to me, is to remove straight-jackets and give programmers the power they need to solve the problem they're working on. Instead, here's PLT throwing up roadblocks that programmers need to waste mental resources working around.

That was it for me. I switched to Guile and haven't looked back. I have been vaguely aware, though, of further changes to PLT Scheme in the name of protecting programmers from themselves. It's been clear for some time that the PLT group has been moving their Scheme towards a "Pascal with Parentheses" language. There's nothing wrong with such a language, of course. The PLT group is, after all, a group of academics interested in finding optimal ways of teaching programming. But if you have such a language you shouldn't call it Scheme. The PLT folks have recognized this and changed the name of their language to Racket. I say good for them.

1 comment:

  1. `set-car!' and `set-cdr!' were not removed because they're more dangerous in any way. Mutable structs (and mpairs) are still part of the language. However, there is generally a very popular tendency to assume that lists are immutable which leads to bugs in general (and that includes a lot of naive looking code that breaks in very bad ways). If you still want to do this, you're of course free to do so with the above mentioned tools.

    You have a few other bogus non-points: there is no standard definition and not even a convention for `format' and `printf'; and there is certainly no agreement on what sockets interface to use. Also, PLT is most definitely focused on producing a good language, *not* on "optimal ways of teaching programming" -- if there ever are things over which the two uses are contradicting, the default plt language will choose whatever is best for programming, and the teaching languages will be different in a way that is more in line with their goals.

    Finally, "Pascal with parentheses" is ridiculously wrong. (It seems like a reflection of the common FUD around the PLT module system -- and if that's the case, then recently Guile has been moving in that same direction.)