|[ < ]||[ > ]||[ << ]||[ Up ]||[ >> ]||[Top]||[Contents]||[Index]||[ ? ]|
First we will contrast programming languages with command and utility languages. The next section will discuss some previous attempts to bridge the gap. The most important difference is in the supported data types. Programming languages normally support many data-types, including user-defined ones. There are ways to group data objects together into arrays, lists, and structures. Command languages have just a few data types, sometimes only strings. On the other hand, very high-level data types (associative tables, files, programs) may be supported, but, their treatment may be ad hoc and lacking in orthogonality.
Modern functional languages support first-class functions, and lexical scoping. Only a few Lisp-based command-languages do. Programming languages do a fair amount of syntax checking and "compilation" before evaluation; command languages are completely interpretive, which limits their efficiency. It also delays all error checking to run-time, making debugging harder. Command languages are usually interactive, programming languages are generally batch-oriented. Programming languages evaluate the arguments to a function, while command languages (at least shells) pass the parameters unevaluated. Command languages are designed for writability, and have a terse syntax; most programming languages are less terse, and more readable.
The remainder of this paper discusses these issues in more detail, and specifically how Q makes these tradeoffs. But first we will look at other languages that bridge the gap between command and programming languages.
|[ << ]||[ >> ]||[Top]||[Contents]||[Index]||[ ? ]|