Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Higher-Order and Symbolic Computation: Editorial, 11(4)353-354
[go: Go Back, main page]

Higher-Order and Symbolic Computation, 11(4)353-354

Editorial

Olivier Danvy and Carolyn Talcott

This issue concludes the journal's eleventh year, and its first year with the name Higher-Order and Symbolic Computation (HOSC). The change of name and the addition of six associate editors reflect both the broadened scope of the journal and its continued commitment to provide an active forum for results and ideas related to higher-order and symbolic programming. HOSC's scope encompasses programming languages that feature higher-order facilities--first-class functions and continuations, effects and higher-order types, ob-jects, and actors. Such languages include Lisp, Scheme, ML, Haskell, Java and Dylan. We are interested in their design, semantics, implementation, programming environments, andapplications. We are also interested both in reasoning about programs and in manipulating programs as data, such as in program analysis and in program transformation (e.g., partialevaluation). We will also continue to provide an active forum for meta-level and reflective computation, for persistence, and for concurrent, distributed, and mobile programs.

Our primary mission is to publish new results and ideas. In addition to regular submissions, we also welcome tutorials and survey articles on topics of relevance. Papers on theory, design, and experimental results all lie within the scope of HOSC, especially if they reportwork exhibiting a mix of formalization, new insights, and applications. In addition to regular issues containing individual contributions, we will continue to publish special issues dedicated to a particular research topic, focusing on specific projects, or arising from a conference or workshop.

Occasionally, we also publish papers of significant scientific and historical value thathave appeared only in conference proceedings or have only been available as technical reports or informally circulated notes. This issue is one of those occasions. It provides an archive for two seminal papers: John Reynolds's Definitional Interpreters for Higher Order Programming Languages and Gerald Sussman and Guy Steele's original Schemepaper, SCHEME: An Interpreter for Extended Lambda Calculus. Lisp introduced the idea of defining a programming language by writing an interpreterfor it. Because of its expressive power, Lisp also provided the linguistic support for writing such definitional interpreters with ease. McCarthy's definition of Lisp in Lisp generated a whirl of arguments and counter-arguments about both the value and the validity of this style of definition, reminiscent of Louis Armstrong's aphorism about jazz: "if you need to ask what jazz is, you don't understand it." In his paper, Reynolds dispassionately and methodically addresses the possibilities and the pitfalls of definitional interpreters. He classifies interpreters according to the features of both their defining language and their defined language, and observes the following remarkable phenomenon: with an interpreter expressed in direct style, the defined language inherits the evaluation order of the defining language. With an interpreter expressed in continuation-passing style, however, this is no longer the case. Both because of its results and because of its methodology (e.g., defunctionalization), Reynolds's paper has exercised a profound influence on the general area of programming languages. With an elegant twist, it also introduced the neologism "metacircular" to designate an interpreter where defining language and defined language coincide.

Hewitt's actor model provides a model of distributed computation which is both tantalizing and mystifying, and continues to remain the subject of active research. In the mid-seventies, with a solid Lisp background, Sussman and Steele set out to demystify actors by implementing them. As the story goes, they removed many layers of syntactic sugar and essentially re-discovered the lambda-calculus: a procedural language where variables live in a single name space and obey lexical scope. Out of pragmatism, however, this language follows call-by-value and extends the lambda-calculus with literals and primitive operations, conditional expressions, assignments, i/o, and first-class continuations. In hindsight, one can recognize that right from the start, Scheme gave a central place to Landin's notion of closures in what is otherwise essentially the universe of Lisp. Function closures implement first-class, lexically scoped functions as values, and program closures implement first-class continuations as we know them today: Scheme's then control operator catch precisely corresponds to Scheme's present control operator call/cc (and to John Reynolds's escape operator). The original Scheme report has also been profoundly influential in that it has introduced the notion of proper tail-recursion and of continuation-passing style into the Lisp universe. Indeed the term "continuation-passing style" first appeared here. As one can observe though, it wasn't CPS yet.
[picture of journal cover]

June 2003 - hosc@brics.dk