Yet again; programers, your opinions please.

It all comes down to semantics. What would you call something like HTML vs something like Perl? I would call HTML a scripting language, Perl an interpreted language, and C a compiled language.

OK, but common usage, as seen in this thread, is that scripting languages are things like Perl, PHP, Python. HTML is not a programming language at all, unless you use an unusually broad definition.

HTML is not a programming language because it contains no logic syntax (and probably for a lot of other reasons as well). HTML is markup (that’s the “M” after all). It’s no more a programming language than using ALT+B to make something bold in Microsoft Word could be considered programming.

Yes, the terminology can be a bit confusing, since scripting languages have come a long way. Indeed, I know a few Python fans who would quibble with that label being applied to Python. The primary distinction that I think most of us are making when we say “scripting language” would be more properly described by the term “interpreted language”–basically, these are the languages that skip the step of compilation. Java, C/C++ require compilation to produce the actual instructions executed by the machine (it gets more complicated: Java uses a JVM to execute the compiled code, an extra layer largely intended to support cross-platform compatibility). Languages like Python are interpreted as written; the interpreter instructs the machine directly, so to speak.

It gets worse: JSP is considered by many a scripting language, primarily because you’re adding little Java scriptlets in with the HTML. But JSPs get compiled by the webserver into Java Servlets, so is JSP really a scripting language? Well, you could argue that since you’re not the one doing the compilation explicitly, that makes it seem like a scripting language. You could also argue that JSP is a scripting language because, while the scriptlets are written in Java, there are limits to what you can do with them (as opposed to straight-up Java).

As far as looping constructs and such, I’d say that most of what we commonly call scripting languages do have support for this. Python and JavaScript both support looping, tree structures, and many of the other staples of regular programming languages. XSL, which is an XML scripting language, supports looping and tree-walking.

Now XML and HTML themselves are not scripting languages: they’re markup languages. You don’t loop in HTML, for instance; you explicity enumerate all the elements of, say, a table. With PHP, you can script HTML such that you don’t explicitly have to do this. HTML is interesting because it actually seems to “do” something–you can view it in a browser and things happen. But these days, HTML is pretty much married to JavaScript, which is a scripting language, so often HTML is considered a proto-language because where you have HTML, you can have JS.

So the lines are a bit blurred. Scripting can also mean a mode of programming, where you’re essentially writing a top-down list of instructions to be executed in order. So “scripting” implies that your basic unit of work is a list of instructions. When you’re dealing with an object-oriented programming language, your basic unit of currency is the object, its properties and methods. Concepts like thread management enter into the picture, and your code, as a whole, is modelled in a more complex way.