Ousterhout's dichotomy


Ousterhout's dichotomy

(language)John Ousterhout's division of high-level languages into "system programming languages" and "scriptinglanguages". This distinction underlies the design of hislanguage Tcl.

System programming languages (or "applications languages") arestrongly typed, allow arbitrarily complex data structures,and programs in them are compiled, and are meant to operatelargely independently of other programs. Prototypical systemprogramming languages are C and Modula-2.

By contrast, scripting languages (or "glue languages") areweakly typed or untyped, have little or no provision forcomplex data structures, and programs in them ("scripts")are interpreted. Scripts need to interact either with otherprograms (often as glue) or with a set of functions providedby the interpreter, as with the file system functionsprovided in a UNIX shell and with Tcl's GUI functions.Prototypical scripting languages are AppleScript, C Shell,MS-DOS batch files and Tcl.

Many believe that this is a highly arbitrary dichotomy, andrefer to it as "Ousterhout's fallacy" or "Ousterhout's falsedichotomy". While strong-versus-weak typing, data structurecomplexity, and independent versus stand-alone might be saidto be unrelated features, the usual critique of Ousterhout'sdichotomy is of its distinction of compilation versusinterpretation, since neither semantics nor syntax dependsignificantly on whether code is compiled intomachine-language, interpreted, tokenized, orbyte-compiled at the start of each run, or any mixture ofthese. Many languages fall between being interpreted orcompiled (e.g. Lisp, Forth, UCSD Pascal, Perl, andJava). This makes compilation versus interpretation adubious parameter in a taxonomy of programming languages.