Ousterhout's dichotomy

From Wikipedia, the free encyclopedia

Ousterhout's dichotomy is 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 statically typed, allow arbitrarily complex data structures, and programs in them are compiled, and are meant to operate largely independently of other programs. Typical system programming languages are C and Modula-2.

By contrast, scripting languages (or "glue languages") are dynamically typed, 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. Typical scripting languages are AppleScript, C Shell, DOS 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 static-versus-dynamic 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. Neither semantics nor syntax depend 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 have been implemented as both interpreters and compilers, including Lisp, Forth, UCSD Pascal, Perl, and Java. This makes compilation versus interpretation a dubious parameter in a taxonomy of programming languages.

[edit] References

Scripting: Higher Level Programming for the 21st Century Ousterhout's article in IEEE Computer magazine, March 1998 This article was originally based on material from the Free On-line Dictionary of Computing, which is licensed under the GFDL.