My purpose in giving this brief history of my personal programming language experience is to show I know what I am talking about when you get to the argument at the bottom about the future of programming languages.
We have a long way to go before we get to the level of declarative
abstraction in Prolog, and in fact, we are likely to never reach pure
declarative programs as a general practice. Consider how Prolog
itself is not purely declarative since it includes a few imperative
constructs. This is similar to the non-purity of practical, functional
programming languages. It is certainly possible to program in
a pure (declarative, functional,
Another trend is that highly specialized langauges for specific
domains will continue to be created. Similarly, libraries for
specific domains are written with function calls as the main interface;
these libraries effectively extend the languages they may be used with.
Lisp macros are more obviously extensions of the language, and whole
new languages have been written
with macros. But note that all these specialized languages, with their
specialized runtime system or libraries, are essentially
declarative in that the programmer simply calls a routine and the
implementation of the routine can carry out the request however it wants.
One thing that we need more of is declarative semantics to specify what a
routine is expected to do. The types of the arguments and results
returned, supported by most typed languages, are a form of declaration.
Some languages support pre and post conditions for routines, which is
a large step further. Sufficiently complete pre and post conditions
could be executable in the Prolog sense, or compilable to executable
code.
But in general, there may be a large gap between the statement of a
goal (a declaration) and the starting point. A path to reach a goal
may be difficult to find, and thus the creative intelligence of human
programmers steps in to help the system out with some explicit
pointers. A sufficiently smart compiler for a purely declarative
language must be artificially intelligent (and creative). Not an
easy goal itself.
Daniel LaLiberte
(liberte@ncsa.uiuc.edu)
Last modified: Fri May 23 15:36:37 CDT 1997