Hacking gadflies

What are scripting languages?

One of the offshoots of the Java-or-Ruby controversy mooted in a previous post was an invitation from one of my colleagues to try to disambiguate and define the term `scripting language'.

In my usage, anyway, the defining property is that a scripting language enables its user to put operations normally performed through an interactive interface under the control of a program.

Historically, the leading and most common example of such an interface is a shell, so the languages in which shell scripts are written are the archetypal examples of what I call scripting languages. Other early examples of interactive interfaces are editors and database systems, so I'd consider sed, Emacs Lisp, and dBASE to be early scripting languages. The interfaces that scripting languages replace aren't necessarily CLIs; for instance, I'd also classify JCL, HyperTalk, and Script-Fu as scripting languages.

My colleague also suggested that some people use the term to describe languages that can be used as glue, to bind applications together or mediate communications between them. Many of the languages that I'd classify as scripting languages are specific to one interface and can't glue. On the other hand, I do see this as an important feature of any scripting language that we might want to spend a lot of time on in CSC 152 or CSC 223, and I can understand why some people would treat it as a defining property.

It's a bit awkward to fit this category into the framework of problem-solving paradigms that my departmental colleagues and I use to motivate the curricular structure of our introductory sequence, because it's a classification that cuts across the other categories. (For instance, Perl is an imperative scripting language, scsh is a functional scripting language, Ruby is an object-oriented scripting language, and make is a declarative scripting language.) On the other hand, I think what our alumni are telling us is that the ways of thinking that are facilitated by scripting languages really are significantly different from those embedded in more conventional high-level programming languages.