Results 11 - 20
of
26
Environments as First Class Objects
- In th ACM Symposium on Principle of Programming Languages Conference
, 1987
"... We describe a programming language called Symmetric Lisp that treats environments as firstclass objects. Symmetric Lisp allows programmers to write expressions that evaluate to environments, and to create and denote variables and constants of type environment as well. One consequence is that the ro ..."
Abstract
-
Cited by 16 (4 self)
- Add to MetaCart
We describe a programming language called Symmetric Lisp that treats environments as firstclass objects. Symmetric Lisp allows programmers to write expressions that evaluate to environments, and to create and denote variables and constants of type environment as well. One consequence is that the roles filled in other languages by a variety of limited, special purpose environment forms like records, structures, closures, modules, classes and abstract data types are filled instead by a single versatile and powerful structure. In addition to being its fundamental structuring tool, environments also serve as the basic functional object in the language. Because the elements of an environment are evaluated in parallel, Symmetric Lisp is a parallel programming language; because they may be assembled dyamically as well as statically, Symmetric Lisp accomodates an unusually flexible and simple (parallel) interpreter as well as other historysensitive applications requiring dynamic environments. We show that firstclass environments bring about fundamental changes in a language's structure: conventional distinctions between declarations and expressions, data structures and program structures, passive modules and active processes disappear. We argue that the resulting language is clean, simple and powerful.
Workflow Enactment with Continuation and Future Objects
, 2002
"... An increasing number of software developers are turning to workflow to separate the logic and the control aspects in their applications, thus making them more amenable to change. However, in spite of recent efforts to standardize and provide reusable workflow components, many developers build their ..."
Abstract
-
Cited by 16 (0 self)
- Add to MetaCart
An increasing number of software developers are turning to workflow to separate the logic and the control aspects in their applications, thus making them more amenable to change. However, in spite of recent efforts to standardize and provide reusable workflow components, many developers build their own. This is a challenging endeavor and involves solving problems which seem incompatible with the object paradigm and current object-oriented programming languages. In the context of an object-oriented workflow framework, this paper demonstrates a novel approach that resolves this impedance mismatch with techniques drawn from programming language theory. This successful cross-pollination narrows the gap between the results of decades of research in programming languages and developers working hard to cope with change.
Garbage Collection and Other Optimizations
, 1987
"... Existing techniques for garbage collection and machine code optimizations can interfere with each other. The inability to fully optimize code in a garbage-collected system is a hidden cost of garbage collection. One solution to this problem is proposed; an inexpensive protocol that permits most opti ..."
Abstract
-
Cited by 14 (0 self)
- Add to MetaCart
Existing techniques for garbage collection and machine code optimizations can interfere with each other. The inability to fully optimize code in a garbage-collected system is a hidden cost of garbage collection. One solution to this problem is proposed; an inexpensive protocol that permits most optimizations and garbage collection to coexist. A second approach to this problem and a separate problem in its own right is to reduce the need for garbage collection. This requires analysis of storage lifetime. Inferring storage lifetime is di#cult in a language with nested and recursive data structures, but it is precisely these languages in which garbage collection is most useful. An improved analysis for "storage containment" is described. Containment information can be represented in a directed graph. The derivation of this graph falls into a monotone data-flow analysis framework; in addition, the derivation has the Church-Rosser property. The graphs produced in the analysis of a value-a...
A Programming Language Supporting First-Class Parallel Environments
, 1989
"... Namespace management is fundamental (in a practical sense) to the design of any programming language: how are naming environments built, and how are they used? Modern programming languages come equipped with a variety of mechanisms to create and manipulate naming environments. These mechanisms fall ..."
Abstract
-
Cited by 13 (7 self)
- Add to MetaCart
Namespace management is fundamental (in a practical sense) to the design of any programming language: how are naming environments built, and how are they used? Modern programming languages come equipped with a variety of mechanisms to create and manipulate naming environments. These mechanisms fall into two broad categories: program structures and data structures. Program structures and data structures are treated differently in modern programming languages. Program structures are not considered to be data structures: they cannot be examined, nor can they be used as components of other data structures. Nor are data structures considered to be programs: they do not specify a scope, nor can they contain expressions as primitive components. This thesis presents a new programming model called the symmetric model in which the representation of programs is identical to the representation of data: to specify a computation, one defines a data structure. This data structure possesses the seman...
Programming with Agents: New metaphors for thinking about computation
, 1996
"... Computer programming environments for learning should make it easy to create worlds of responsive and autonomous objects, such as video games or simulations of animal behavior. But building such worlds remains difficult, partly because the models and metaphors underlying traditional programming lang ..."
Abstract
-
Cited by 13 (0 self)
- Add to MetaCart
Computer programming environments for learning should make it easy to create worlds of responsive and autonomous objects, such as video games or simulations of animal behavior. But building such worlds remains difficult, partly because the models and metaphors underlying traditional programming languages are not particularly suited to the task. This dissertation investigates new metaphors, environments, and languages that make possible new ways to create programs -- and, more broadly, new ways to think about programs. In particular, it introduces the idea of programming with "agents" as a means to help people create worlds involving responsive, interacting objects. In this context, an agent is a simple mechanism intended to be understood through anthropomorphic metaphors and endowed with certain lifelike properties such as autonomy, purposefulness, and emotional state. Complex behavior is achieved by combining simple agents into more complex structures. While the agent metaphor enables...
An Optimizing Compiler for Lexically Scoped Lisp
- In Proceedings of the SIGPLAN '82 Symposium on Compiler Construction
, 1982
"... 1 ..."
First-Class Nonstandard Interpretations by Opening Closures
- In Proceedings of the Symposium on Principles of Programming Languages (POPL
, 2007
"... We motivate and discuss a novel functional programming construct that allows convenient modular run-time nonstandard interpretation via reflection on closure environments. This map-closure construct encompasses both the ability to examine the contents of a closure environment and to construct a new ..."
Abstract
-
Cited by 9 (4 self)
- Add to MetaCart
We motivate and discuss a novel functional programming construct that allows convenient modular run-time nonstandard interpretation via reflection on closure environments. This map-closure construct encompasses both the ability to examine the contents of a closure environment and to construct a new closure with a modified environment. From the user’s perspective, map-closure is a powerful and useful construct that supports such tasks as tracing, security logging, sandboxing, error checking, profiling, code instrumentation and metering, run-time code patching, and resource monitoring. From the implementor’s perspective, map-closure is analogous to call/cc. Just as call/cc is a non-referentiallytransparent mechanism that reifies the continuations that are only implicit in programs written in direct style,map-closure is a nonreferentially-transparent mechanism that reifies the closure environments that are only implicit in higher-order programs. Just as CPS conversion is a non-local but purely syntactic transformation that can eliminate references to call/cc, closure conversion is a non-local but purely syntactic transformation that can eliminate references to map-closure. We show how the combination of map-closure and call/cc can be used to implement set! as a procedure definition and a local macro transformation. Categories and Subject Descriptors D.3.2 [Language Classifications]: Applicative (functional) languages; D.3.3 [Language constructs
Dynamically Scoped Functions as the Essence of AOP
- ACM SIGPLAN Notices
, 2003
"... The aspect-oriented programming community devotes lots of energy into the provision of complex static language constructs to reason about eventual dynamic properties of a program. ..."
Abstract
-
Cited by 8 (2 self)
- Add to MetaCart
The aspect-oriented programming community devotes lots of energy into the provision of complex static language constructs to reason about eventual dynamic properties of a program.
Continuation Semantics and Self-adjointness
- In Proceedings MFPS XIII, Electronic Notes in Theoretical Computer Science
, 1997
"... We give an abstract categorical presentation of continuation semantics by taking the continuation type constructor : (or cont in Standard ML of New Jersey) as primitive. This constructor on types extends to a contravariant functor on terms which is adjoint to itself on the left; restricted to the su ..."
Abstract
-
Cited by 7 (2 self)
- Add to MetaCart
We give an abstract categorical presentation of continuation semantics by taking the continuation type constructor : (or cont in Standard ML of New Jersey) as primitive. This constructor on types extends to a contravariant functor on terms which is adjoint to itself on the left; restricted to the subcategory of those programs that do not manipulate the current continuation, it is adjoint to itself on the right. The motivating example of such a category is built from (equivalence classes of typing judgements for) continuation passing style (CPS) terms. A call-by-value -calculus with the control operator callcc as well as a call-byname -calculus can be interpreted. Arrow types are broken down into continuation types for argument/result-continuations pairs. Specialising the semantics to the CPS term model allows a reconstruction of CPS transforms. 1 Introduction The task of finding a semantic infrastructure for continuation semantics is somewhat analogous to that of interpreting -calcul...
PicoThreads: Lightweight Threads in Java
, 2000
"... High-performance, I/O-intensive applications often require complicated, split-phase, event-based implementations. Threads appear to be an attractive alternative because they allow the programmer to write a single sequence of operations and ignore the points at which the execution may be blocked. Unf ..."
Abstract
-
Cited by 5 (0 self)
- Add to MetaCart
High-performance, I/O-intensive applications often require complicated, split-phase, event-based implementations. Threads appear to be an attractive alternative because they allow the programmer to write a single sequence of operations and ignore the points at which the execution may be blocked. Unfortunately, the typical amount of memory required to support this technique prevents applications from scaling to large numbers of threads. Rather than relying on event-based programming, we use a program transformation to provide a lowcost thread implementation. This transformation retains the advantages of user-scheduled, eventbased programs, yet efficiently supports large numbers of threads. We replace the standard Java thread mechanism with lightweight PicoThreads and a cooperative, event-based, user-level scheduler. This is accompanied by a PicoThread-aware, asynchronous network library. To evaluate our implementation, we measure the performance of a simple web crawler running thousan...

