Ousterhout's dichotomy
<language>
John Ousterhout's division of high-level languages into "system programming languages" and "scripting languages".
This distinction underlies the design of his language
Tcl.
System programming languages (or "applications languages") are
strongly typed, allow arbitrarily complex data structures, and programs in them are compiled, and are meant to operate largely independently of other programs.
Prototypical system programming languages are
C and
Modula-2.
By contrast, scripting languages (or "glue languages") are weakly typed or untyped, have little or no provision for complex data structures, and programs in them ("scripts") are
interpreted.
Scripts need to interact either with other programs (often as
glue) or with a set of functions provided by the interpreter, as with the
file system functions provided in a UNIX shell and with
Tcl's
GUI functions. Prototypical scripting languages are
AppleScript,
C Shell, MSDOS batch files, and
Tcl.
Many believe that this is a highly arbitrary dichotomy, and refer to it as "Ousterhout's fallacy" or "Ousterhout's false dichotomy".
While strong-versus-weak typing, data structure complexity, and independent versus stand-alone might be said to be unrelated features, the usual critique of Ousterhout's dichotomy is of its distinction of compilation versus interpretation, since neither
semantics nor
syntax depend significantly on whether code is compiled into machine-language, interpreted, tokenized, or byte-compiled at the start of each run, or any mixture of these.
Many languages fall between being interpreted or compiled (e.g.
Lisp,
Forth,
UCSD Pascal,
Perl, and
Java).
This makes compilation versus interpretation a dubious parameter in a taxonomy of programming languages.