Professor emeritus of Computer Science at the University of Victoria. Inventor of "Wadge degrees" and co-inventor of the Lucid dataflow programming language.
In this paper we remedy one of the most annoying weaknesses of Lucid and indexical languages in g... more In this paper we remedy one of the most annoying weaknesses of Lucid and indexical languages in general: the lack of higher-order functions. We describe a simple generalization of the “place-code” approach (as discovered by Ostrum and formalized by Yaghi) which handles programs with functions of arbitrarily high orders; in other words, typed Iswim. A source program P with function definitions (including recursive ones) is translated into a 0-order program P ′ (one with no user-defined functions) with extra indexical operators for manipulating place codes. The only difference between the first-order and the general case is that in the general case we need more than one dimension of place codes. In fact, the number of dimensions is exactly the order of the program. The translated program P ′ can be implemented by eduction—tagged, demand-driven dataflow. The use of place codes causes no real complications: they are treated as just another field in the tag, along with the time and space...
The theory of the infinite behaviour of continuously operating computing devices is of primary im... more The theory of the infinite behaviour of continuously operating computing devices is of primary importance for several branches of theoretical and practical computer science. In particular, it is fundamental for the verification and synthesis of reactive systems like microprocessors or operating systems, for the understanding of dataflow computation, and for the development of adequate mathematical foundations for exact real computation. The seminar brought together researchers from many different disciplines who are working on theoretical or practical aspects of infinite computations. In this summary we describe the topics, the goals, and the contributions of the seminar.
We demonstrate how TransLucid can be used as a reactive system. At each instant, there is a set o... more We demonstrate how TransLucid can be used as a reactive system. At each instant, there is a set of active ports, where sets of equations, demands and threads are all registered. Each thread defines a sequence of (state, demand) pairs, and threads may interact through the overall set of equations. The entire system remains fully declarative.
ese interpretations are just algebras; therefore every particular language is determined by the c... more ese interpretations are just algebras; therefore every particular language is determined by the choice of the underlying data algebra. Given an algebra A, Lucid(A) is the member of the Lucid family based upon A. Let us assume we have a chosen a fixed algebra A. In a sense, all the languages discussed are extensions of the simple expression language Exp(A). We begin by outlining the formal syntax and semantics of Exp(A). Syntactically, Exp(A) "programs" are expressions built up from variables using the operation symbols in the signature of A (we will consider constants to be nullary operations). Thus, the meaning of an Exp(A) program is determined by the meanings of the variables; so we define an Exp(A) interpretation
We describe work in progress on a method for determining the dimensionality of Lucid terms. This ... more We describe work in progress on a method for determining the dimensionality of Lucid terms. This method gives a better (i.e., lower) upper bound on expressions involving function calls than the method currently in use.
We discuss the use of intensional (context-switching) operators—Intensional Programming— in the d... more We discuss the use of intensional (context-switching) operators—Intensional Programming— in the development of familes of versions of programs and other forms of software—Intentional Programming.
Monads are a concept of category theory which can be used to structure functional programs or eve... more Monads are a concept of category theory which can be used to structure functional programs or even define nonstandard interpretations of the λ-calculus. These nonstandard functional languages share many of Lucid’s unusual features, such as the distinction between synchronic and general functions. In fact Lucid is exactly one of these languages, determined by a simple stream monad. We therefore propose that monadic functional programming is the appropriate meaning of “Intensional Programming”, with “Indexical Programming” reserved for languages in which intensions are indexed families of extensions. 1 An Unexpected Bounty Every year at ISLIP we have at least one soul-searching discussion on the topic “what is intensional programming?” Recently we added a new twist, an animated debate about “indexical” versus “intensional” programming. This new schism will undoubtedly cause even outsiders to be even more baffled than ever by the slippery notion of intensionality. At the same time, we ...
Intensional Programming (IP) was born in 1986 at Arizona State—or at least that is when we came u... more Intensional Programming (IP) was born in 1986 at Arizona State—or at least that is when we came up with the name. We had actually been doing it for some time already. Tony Faustini and I had been discussing whether or not Lucid is really a “functional” programming language. This is quite an interesting topic, and I will have something to say about it a bit later. Suddenly, we asked ourselves why should we be begging to be let on board someone else’s bandwagon. Lucid really is different from SASL, Miranda et al. They’re extensional programming languages, and Lucid is an . . . “intensional” programming language. Intensional programming . . . what a concept! At first this coinage was almost tongue in cheek. But the more we thought about it, the more sense it made. There were already several people in the so-called “Lucid Community” working on systems which could hardly be called mere extensions of Lucid—for example, Chronolog, or Tao’s attribute grammar compiler compiler. What they all...
It is impossible to talk about programming “paradigms” without bringing Object-Oriented (OO) prog... more It is impossible to talk about programming “paradigms” without bringing Object-Oriented (OO) programming to mind. The question therefore arises, is there any relationship between Indexical Programming and OO Programming? 1 Objects as Filters Explanations of OO often take as their starting point a model of computation in which objects with internal state send messages to each other. This sounds a lot like the “näıve” dataflow model of old (streams-only) Lucid [3], and in fact many simple object/message algorithms can be coded in Lucid. The basic idea is that the objects with internal state correspond to (instances of) nonpointwise functions; and that the messages are datons sent along the pipes from producer to consumer. As a simple example, the good old running average program
This book describes a powerful language for multidimensional declarative programming called Lucid... more This book describes a powerful language for multidimensional declarative programming called Lucid. Lucid has evolved considerably in the past ten years. The main catalyst for this metamorphosis was the discovery that Lucid is based on intensional logic, one commonly used in studying natural languages. Intensionality, and more specifically indexicality, has enabled Lucid to implicitly express multidimensional objects that change, a fundamental capability with several consequences which are explored in this book. The author covers a broad range of topics, from foundations to applications, and from implementations to implications. The role of intensional logic in Lucid as well as its consequences for programming in general is discussed. The syntax and mathematical semantics of the language are given and its ability to be used as a formal system for transformation and verification is presented. The use of Lucid in both multidimensional applications programming and software systems const...
In this paper we remedy one of the most annoying weaknesses of Lucid and indexical languages in g... more In this paper we remedy one of the most annoying weaknesses of Lucid and indexical languages in general: the lack of higher-order functions. We describe a simple generalization of the “place-code” approach (as discovered by Ostrum and formalized by Yaghi) which handles programs with functions of arbitrarily high orders; in other words, typed Iswim. A source program P with function definitions (including recursive ones) is translated into a 0-order program P ′ (one with no user-defined functions) with extra indexical operators for manipulating place codes. The only difference between the first-order and the general case is that in the general case we need more than one dimension of place codes. In fact, the number of dimensions is exactly the order of the program. The translated program P ′ can be implemented by eduction—tagged, demand-driven dataflow. The use of place codes causes no real complications: they are treated as just another field in the tag, along with the time and space...
The theory of the infinite behaviour of continuously operating computing devices is of primary im... more The theory of the infinite behaviour of continuously operating computing devices is of primary importance for several branches of theoretical and practical computer science. In particular, it is fundamental for the verification and synthesis of reactive systems like microprocessors or operating systems, for the understanding of dataflow computation, and for the development of adequate mathematical foundations for exact real computation. The seminar brought together researchers from many different disciplines who are working on theoretical or practical aspects of infinite computations. In this summary we describe the topics, the goals, and the contributions of the seminar.
We demonstrate how TransLucid can be used as a reactive system. At each instant, there is a set o... more We demonstrate how TransLucid can be used as a reactive system. At each instant, there is a set of active ports, where sets of equations, demands and threads are all registered. Each thread defines a sequence of (state, demand) pairs, and threads may interact through the overall set of equations. The entire system remains fully declarative.
ese interpretations are just algebras; therefore every particular language is determined by the c... more ese interpretations are just algebras; therefore every particular language is determined by the choice of the underlying data algebra. Given an algebra A, Lucid(A) is the member of the Lucid family based upon A. Let us assume we have a chosen a fixed algebra A. In a sense, all the languages discussed are extensions of the simple expression language Exp(A). We begin by outlining the formal syntax and semantics of Exp(A). Syntactically, Exp(A) "programs" are expressions built up from variables using the operation symbols in the signature of A (we will consider constants to be nullary operations). Thus, the meaning of an Exp(A) program is determined by the meanings of the variables; so we define an Exp(A) interpretation
We describe work in progress on a method for determining the dimensionality of Lucid terms. This ... more We describe work in progress on a method for determining the dimensionality of Lucid terms. This method gives a better (i.e., lower) upper bound on expressions involving function calls than the method currently in use.
We discuss the use of intensional (context-switching) operators—Intensional Programming— in the d... more We discuss the use of intensional (context-switching) operators—Intensional Programming— in the development of familes of versions of programs and other forms of software—Intentional Programming.
Monads are a concept of category theory which can be used to structure functional programs or eve... more Monads are a concept of category theory which can be used to structure functional programs or even define nonstandard interpretations of the λ-calculus. These nonstandard functional languages share many of Lucid’s unusual features, such as the distinction between synchronic and general functions. In fact Lucid is exactly one of these languages, determined by a simple stream monad. We therefore propose that monadic functional programming is the appropriate meaning of “Intensional Programming”, with “Indexical Programming” reserved for languages in which intensions are indexed families of extensions. 1 An Unexpected Bounty Every year at ISLIP we have at least one soul-searching discussion on the topic “what is intensional programming?” Recently we added a new twist, an animated debate about “indexical” versus “intensional” programming. This new schism will undoubtedly cause even outsiders to be even more baffled than ever by the slippery notion of intensionality. At the same time, we ...
Intensional Programming (IP) was born in 1986 at Arizona State—or at least that is when we came u... more Intensional Programming (IP) was born in 1986 at Arizona State—or at least that is when we came up with the name. We had actually been doing it for some time already. Tony Faustini and I had been discussing whether or not Lucid is really a “functional” programming language. This is quite an interesting topic, and I will have something to say about it a bit later. Suddenly, we asked ourselves why should we be begging to be let on board someone else’s bandwagon. Lucid really is different from SASL, Miranda et al. They’re extensional programming languages, and Lucid is an . . . “intensional” programming language. Intensional programming . . . what a concept! At first this coinage was almost tongue in cheek. But the more we thought about it, the more sense it made. There were already several people in the so-called “Lucid Community” working on systems which could hardly be called mere extensions of Lucid—for example, Chronolog, or Tao’s attribute grammar compiler compiler. What they all...
It is impossible to talk about programming “paradigms” without bringing Object-Oriented (OO) prog... more It is impossible to talk about programming “paradigms” without bringing Object-Oriented (OO) programming to mind. The question therefore arises, is there any relationship between Indexical Programming and OO Programming? 1 Objects as Filters Explanations of OO often take as their starting point a model of computation in which objects with internal state send messages to each other. This sounds a lot like the “näıve” dataflow model of old (streams-only) Lucid [3], and in fact many simple object/message algorithms can be coded in Lucid. The basic idea is that the objects with internal state correspond to (instances of) nonpointwise functions; and that the messages are datons sent along the pipes from producer to consumer. As a simple example, the good old running average program
This book describes a powerful language for multidimensional declarative programming called Lucid... more This book describes a powerful language for multidimensional declarative programming called Lucid. Lucid has evolved considerably in the past ten years. The main catalyst for this metamorphosis was the discovery that Lucid is based on intensional logic, one commonly used in studying natural languages. Intensionality, and more specifically indexicality, has enabled Lucid to implicitly express multidimensional objects that change, a fundamental capability with several consequences which are explored in this book. The author covers a broad range of topics, from foundations to applications, and from implementations to implications. The role of intensional logic in Lucid as well as its consequences for programming in general is discussed. The syntax and mathematical semantics of the language are given and its ability to be used as a formal system for transformation and verification is presented. The use of Lucid in both multidimensional applications programming and software systems const...
Uploads
Papers by Bill Wadge