Results 1 - 10
of
10
Quasiquotation in Lisp
- O. Danvy, Ed., University of Aarhus, Dept. of Computer Science
, 1999
"... Quasiquotation is the technology commonly used in Lisp to write program-generating programs. In this paper I will review the history and development of this technology, and explain why it works so well in practice. ..."
Abstract
-
Cited by 36 (0 self)
- Add to MetaCart
Quasiquotation is the technology commonly used in Lisp to write program-generating programs. In this paper I will review the history and development of this technology, and explain why it works so well in practice.
Quasi-Static Scoping: Sharing Variable Bindings Across Multiple Lexical Scopes
- In Proc. 20th POPL
, 1993
"... Static scoping embodies a strong encapsulation mechanism for hiding the details of program units. Yet, it does not allow the sharing of variable bindings (locations) across independent program units. Facilities such as module and object systems that require cross references of variables therefore mu ..."
Abstract
-
Cited by 16 (1 self)
- Add to MetaCart
Static scoping embodies a strong encapsulation mechanism for hiding the details of program units. Yet, it does not allow the sharing of variable bindings (locations) across independent program units. Facilities such as module and object systems that require cross references of variables therefore must be added as special features. In this paper we present an alternative: quasi-static scoping. Quasi-static scoping is more flexible than static scoping, but has the same encapsulation mechanism. The user can control when and in what scope to resolve a quasi-static variable, i.e., to associate it with a variable binding. To demonstrate its versatility, we add quasi-static scoping to Scheme and show how to build the aforementioned facilities at the user-level. We also show that quasi-static scoping can be implemented efficiently. 1 Introduction Static (Lexical) scoping is ideal for hiding the internal details of program units. In addition, a static variable's reference occurrences can all ...
Active Naming: Programmable Location and Transport of Wide-Area Resources
- In USENIX Symposium on Internet Technologies and Systems
, 1998
"... Active Names are a general framework for the development and composition of wide-area applications. The key insight behind Active Names is the need to introduce programmability of name binding to support the widely varying semantics and requirements of distributed applications in accessing and trans ..."
Abstract
-
Cited by 14 (3 self)
- Add to MetaCart
Active Names are a general framework for the development and composition of wide-area applications. The key insight behind Active Names is the need to introduce programmability of name binding to support the widely varying semantics and requirements of distributed applications in accessing and transforming wide-area resources. Active Names associate an application-specific and location independent program with each name. This paper presents the architecture for evaluating Active Names, including the technique for binding names to programs, and a virtual machine for executing these programs. We demonstrate the utility of the Active Naming framework via four sample applications: mobile distillation of Web content, load balancing and replica selection across wide-area servers, extensible cache management designed to increase the utility of Web caches, and personalization of Web content to client preferences. 1 Introduction The emergence of wide-area distributed applications as a dominant...
Type Reconstruction for Variable-Arity Procedures
- In Proc. ACM Conf. on Lisp and Functional Programming
, 1994
"... We extend the ML-style type system with variable-arity procedures, supporting both optional arguments and arbitrarily long argument sequences. The language with variable-arity procedures is encoded in a core ML variant with infinitary tuples. We present an algebra of infinitary tuples and solve its ..."
Abstract
-
Cited by 14 (0 self)
- Add to MetaCart
We extend the ML-style type system with variable-arity procedures, supporting both optional arguments and arbitrarily long argument sequences. The language with variable-arity procedures is encoded in a core ML variant with infinitary tuples. We present an algebra of infinitary tuples and solve its unification problem. The resulting type discipline preserves principal typings and has a terminating type reconstruction algorithm. The expressive power of infinitary tuples is illustrated. 1 Introduction Most languages employing ML-style polymorphic type reconstruction do not support procedures with multiple arguments. Instead, multiple arguments are passed in an aggregate structure or via repeated application to a curried procedure. Extension of an ML-style type system to support higher, but fixed, arity procedures is straightforward. A variable-arity procedure accepts an indefinite number of arguments. Many languages provide variable-arity primitive procedures, and some allow creation of...
Dynamic Dispatch in Object-Oriented Languages
- CSIRO -- Division of Information Technology
, 1994
"... Dynamic binding in object-oriented languages is perhaps the most important semantic aspect of these languages. At the same time it can contribute to inefficiency and lack of robustness because it incurs lookup overheads on function calls and hinders the compiler determining the exact type of objects ..."
Abstract
-
Cited by 6 (0 self)
- Add to MetaCart
Dynamic binding in object-oriented languages is perhaps the most important semantic aspect of these languages. At the same time it can contribute to inefficiency and lack of robustness because it incurs lookup overheads on function calls and hinders the compiler determining the exact type of objects held in variables or returned by functions. This may, for instance, preclude inlining of small functions or attribute offset computation at compile time. Yet attribute accesses are the most frequently executed operations. As a result, to regain lost performance, OO programmers are tempted to break the encapsulation of classes or want explicit control over dynamic dispatch, trading off extensibility. In the implementation of parallel object-oriented languages the additional complication arises that object accesses may require more expensive remote memory accesses. Lookup at the call may be inappropriate if the code has to be executed on a different processor and there perhaps has a different...
A Systolizing Compiler
- Distributed Computing
, 1992
"... We present an automatic scheme to generate programs for distributed-memory multiprocessors. We begin with a source program that contains no references to concurrency or communication. The source program corresponds to a systolic array: as such, it is a nested loop program with regular data dependenc ..."
Abstract
-
Cited by 5 (0 self)
- Add to MetaCart
We present an automatic scheme to generate programs for distributed-memory multiprocessors. We begin with a source program that contains no references to concurrency or communication. The source program corresponds to a systolic array: as such, it is a nested loop program with regular data dependences. The loop bounds may be any linear function of enclosing indices and of variables representing the problem size. The target programs are in an abstract syntax that can be translated to any distributed programming language with asynchronous parallelism and rendezvous communication; so far, a translator to occam 2 has been completed. The scheme is based on a formal theory of linear transformations and has been formally verified. The complexity of the scheme is independent of the problem size. It has been implemented. In contrast to other compilation methods, the scheme derives every aspect of the distributed program, including i/o and communication directives. It represents the first comple...
Progress in Building User Interface Toolkits: The World According to XIT
- In Proceedings of the ACM Symposium on User Interface Software and Technology
, 1992
"... User interface toolkits and higher-level tools built on top of them play an ever increasing part in developing graphical user interfaces. This paper describes the Xit system, a user interface development tool for the X Window System, based on Common Lisp, comprising user interface toolkits as well a ..."
Abstract
-
Cited by 4 (3 self)
- Add to MetaCart
User interface toolkits and higher-level tools built on top of them play an ever increasing part in developing graphical user interfaces. This paper describes the Xit system, a user interface development tool for the X Window System, based on Common Lisp, comprising user interface toolkits as well as high-level interactive tools organized into a layered architecture. We especially focus on the object-oriented design of the lowerlevel toolkits and show how advanced features for describing automatic screen layout, visual feedback, application links, complex interaction, and dialog control, usually not included in traditional user interface toolkits, are integrated. Keywords: User interface toolkits, user interface development tools, graphical user interfaces, interaction techniques, object-oriented programming Introduction Today, graphical user interfaces are mostly built with the help of user interface toolkits or, recently, high-level interactive tools built on top of them [15]. Ove...
HPGP: High-Performance Generic Programming for Computational Mathematics by Compile-Time Instantiation of Higher Order Functors
, 1997
"... A functor is a parameterized program module i.e. a function that takes modules as arguments and returns a module as its result. A higher-order functor deals in the same way with modules whose components are functors themselves. We propose to develop a generic compilation system for the construction ..."
Abstract
- Add to MetaCart
A functor is a parameterized program module i.e. a function that takes modules as arguments and returns a module as its result. A higher-order functor deals in the same way with modules whose components are functors themselves. We propose to develop a generic compilation system for the construction of high-performance mathematical software libraries for scientific and technical application domains. This system has the following features: 1. It is based on a powerful higher-order functor language. 2. It is an open library that can be retargeted to any core language. 3. It is able to resolve functor instantiation at compile-time. The functor language is expressive enough to build all types and type constructors without referring to the core language (thus maximizing flexibility) and to express all interactions between modules by parameterization (thus maximizing reusability). By compile-time instantiation, genericity does not cause any execution overhead; by automatically sharing instant...
Quasiquotation in Lisp
"... Abstract Quasiquotation is the technology commonly used in Lisp to write program-generating programs. In this paper I will review the history and development of this technology, and explain why it works so well in practice. 1 Introduction The subject of this paper is "quasiquotation". Quasiquotation ..."
Abstract
- Add to MetaCart
Abstract Quasiquotation is the technology commonly used in Lisp to write program-generating programs. In this paper I will review the history and development of this technology, and explain why it works so well in practice. 1 Introduction The subject of this paper is "quasiquotation". Quasiquotation is a parameterized version of ordinary quotation, where instead of specifying a value exactly, some holes are left to be filled in later. A quasiquotation is a "template". Quasiquotation appears in various Lisp dialects, including Scheme [4] and Common Lisp [13], where it is used to write syntactic extensions ("macros") and other program-generating programs.
Relaxed MultiJava: Balancing . . .
"... We present the rationale, design, and implementation of Relaxed MultiJava (RMJ), a backward-compatible extension of Java that allows ..."
Abstract
- Add to MetaCart
We present the rationale, design, and implementation of Relaxed MultiJava (RMJ), a backward-compatible extension of Java that allows

