Results 1 - 10
of
13
Tackling the awkward squad: monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell
- Engineering theories of software construction
, 2001
"... Functional programming may be beautiful, but to write real applications we must grapple with awkward real-world issues: input/output, robustness, concurrency, and interfacing to programs written in other languages. These lecture notes give an overview of the techniques that have been developed by th ..."
Abstract
-
Cited by 88 (2 self)
- Add to MetaCart
Functional programming may be beautiful, but to write real applications we must grapple with awkward real-world issues: input/output, robustness, concurrency, and interfacing to programs written in other languages. These lecture notes give an overview of the techniques that have been developed by the Haskell community to address these problems. I introduce various proposed extensions to Haskell along the way, and I offer an operational semantics that explains what these extensions mean. This tutorial was given at the Marktoberdorf Summer School 2000. It will appears in the book “Engineering theories of software construction, Marktoberdorf Summer School 2000”, ed CAR Hoare, M Broy, and R Steinbrueggen, NATO ASI Series, IOS Press, 2001, pp47-96. This version has a few errors corrected compared with the published version. Change summary: Apr 2005: some examples added to Section 5.2.2, to clarifyevaluate. March 2002: substantial revision 1
Distributed Garbage Collection for Network Objects
- Systems Research Center, 130 Lytton Avenue, Palo Alto, CA 94301
, 1993
"... In this report we present a fault-tolerant and efficient algorithm for distributed garbage collection and prove its correctness. The algorithm is a generalization of reference counting; it maintains a set of identifiers for processes with references to an object. The set is maintained with pair-wise ..."
Abstract
-
Cited by 37 (3 self)
- Add to MetaCart
In this report we present a fault-tolerant and efficient algorithm for distributed garbage collection and prove its correctness. The algorithm is a generalization of reference counting; it maintains a set of identifiers for processes with references to an object. The set is maintained with pair-wise communication between processes, so no global synchronization is required. The primary cost for maintaining the set is one remote procedure call when an object reference is transferred to a new process for the first time. The distributed collector collaborates with the local collector in detecting garbage; any local collector may be used, so long as it can be extended to provide notification when an object is collected. In fact, the distributed collector could be used without a local collector; in that case, the programmer would insert explicit dispose commands to release an object. The algorithm was designed and implemented as part of the Modula-3 network objects system, but it should be s...
Stretching the storage manager: weak pointers and stable names in Haskell
, 1999
"... . Every now and then, a user of the Glasgow Haskell Compiler asks for a feature that requires specialised support from the storage manager. Memo functions, pointer equality, external pointers, nalizers, and weak pointers, are all examples. We take memo functions as our exemplar because they turn ..."
Abstract
-
Cited by 26 (2 self)
- Add to MetaCart
. Every now and then, a user of the Glasgow Haskell Compiler asks for a feature that requires specialised support from the storage manager. Memo functions, pointer equality, external pointers, nalizers, and weak pointers, are all examples. We take memo functions as our exemplar because they turn out to be the trickiest to support. We present no fewer than four distinct mechanisms that are needed to support memo tables, and that (in various combinations) satisfy a variety of other needs. The resulting set of primitives is undoubtedly powerful and useful. Whether they are too powerful is not yet clear. While the focus of our discussion is on Haskell, there is nothing Haskell-specic about most of the primitives, which could readily be used in other settings. 1 Introduction \Given an arbitrary function f, construct a memoised version of f; that is, construct a new function with the property that it returns exactly the same results as f, but if it is applied a second time to ...
Implementing an On-the-fly Garbage Collector for Java
- Katherine Barabash, Itai Lahan, Erez Petrank, Igor Yanover, and Yossi
, 2000
"... Java uses garbage collection (GC) for the automatic reclamation of computer memory no longer required by a running application. GC implementations for Java Virtual Machines (JVM) are typically designed for single processor machines, and do not necessarily perform well for a server program with many ..."
Abstract
-
Cited by 22 (4 self)
- Add to MetaCart
Java uses garbage collection (GC) for the automatic reclamation of computer memory no longer required by a running application. GC implementations for Java Virtual Machines (JVM) are typically designed for single processor machines, and do not necessarily perform well for a server program with many threads running on a multiprocessor. We designed and implemented an on-the-fly GC, based on the algorithm of Doligez, Leroy and Gonthier [13, 12] (DLG), for Java in this environment. An on-the-fly collector, a collector that does not stop the program threads, allows all processors to be utilized during collection and provides uniform response times. We extended and adapted DLG for Java (e.g., adding support for weak references) and for modern multiprocessors without sequential consistency, and added performance improvements (e.g., to keep track of the objects remaining to be traced). We compared the performance of our implementation with stop-the-world mark-sweep GC. Our measurements show th...
A Distributed Garbage Collector with Diffusion Tree Reorganisation and Mobile Objects
- In Proceedings of the 3rd ACM international conference on functional programming
, 1997
"... We present a new distributed garbage collection algorithm that is able to reorganise diffusion trees and to support mobile objects. It has a modular design comprising three components: a reliable transport mechanism, a referencecounting based distributed garbage collector for non-mobile objects, and ..."
Abstract
-
Cited by 13 (4 self)
- Add to MetaCart
We present a new distributed garbage collection algorithm that is able to reorganise diffusion trees and to support mobile objects. It has a modular design comprising three components: a reliable transport mechanism, a referencecounting based distributed garbage collector for non-mobile objects, and an extra layer that provides mobility. The algorithm is formalised by an abstract machine and is proved to be correct. The safety property ensures that an object may not be reclaimed as long as it is referred to locally or remotely. The liveness property guarantees that unreachable objects will eventually be reclaimed. The mobility property certifies that messages are always forwarded towards more recent mobile object positions. 1 Introduction Distributed object systems provide programmers with the capability to refer to remote objects and to activate remote computations (generally called remote method invocation) [27, 28]. In this context, distributed garbage collection is a valuable tec...
Destructors, Finalizers, and Synchronization
- In ACM Symposium on Principles of Programming Languages. ACM
, 2003
"... We compare two di#erent facilities for running cleanup actions for objects that are about to reach the end of their life. ..."
Abstract
-
Cited by 11 (2 self)
- Add to MetaCart
We compare two di#erent facilities for running cleanup actions for objects that are about to reach the end of their life.
Guardians in a Generation-Based Garbage Collector
- In SIGPLAN Symposium on Programming Language Design and Implementation (PLDI'93
, 1993
"... This paper describes a new language feature that allows dynamically allocated objects to be saved from deallocation by an automatic storage management system so that clean-up or other actions can be performed using the data stored within the objects. The program has full control over the timing of c ..."
Abstract
-
Cited by 9 (0 self)
- Add to MetaCart
This paper describes a new language feature that allows dynamically allocated objects to be saved from deallocation by an automatic storage management system so that clean-up or other actions can be performed using the data stored within the objects. The program has full control over the timing of clean-up actions, which eliminates several potential problems and often eliminates the need for critical sections in code that interacts with clean-up actions. Our implementation is "generation-friendly" in the sense that the additional overhead within a generation-based garbage collector is proportional to the work already done there, and the overhead within the mutator is proportional to the number of clean-up actions actually performed. 1 Introduction Many programming systems, such as Scheme, Common Lisp, ML, and Prolog, support dynamic allocation and automatic deallocation of objects. Within these systems, some form of storage manager takes responsibility for handling both requests to al...
A Uniform Approach to Programming the World Wide Web
- Computer Systems Science and Engineering
, 1998
"... We propose a uniform model for programming distributed web applications. The model is based on the concept of web computation places and provides mechanisms to coordinate distributed computations at these places, including peer-to-peer communication between places and a uniform mechanism to initiate ..."
Abstract
-
Cited by 5 (4 self)
- Add to MetaCart
We propose a uniform model for programming distributed web applications. The model is based on the concept of web computation places and provides mechanisms to coordinate distributed computations at these places, including peer-to-peer communication between places and a uniform mechanism to initiate computation in remote places. Computations can interact with the flow of http requests and responses, typically as clients, proxies or servers in the web architecture. We have implemented the model using the global pointers and remote service requests provided by the Nexus communication library. We present the model and its rationale, with some illustrative examples, and we describe the implementation. 1 Introduction Many web applications require a significant amount of computation which may be distributed and requires coordination; these applications use the web infrastructure to good advantage but are often constrained by the architecture, which is fundamentally client-server. A variety...
A Community of Agents Maintaining Link Integrity in the World-Wide Web
- IN PROC. OF THE 3RD INT’L CONFERENCE ON THE PRACTICAL APPLICATIONS OF AGENTS AND MULTI-AGENT SYSTEMS (PAAM-98
, 1998
"... In this paper we present an agent architecture to maintain link integrity in the World-Wide Web. It consists of a community of agents collaborating to provide services to users, authors and administrators. In summary, agents maintain link integrity when documents are updated, moved, or when WWW s ..."
Abstract
-
Cited by 3 (0 self)
- Add to MetaCart
In this paper we present an agent architecture to maintain link integrity in the World-Wide Web. It consists of a community of agents collaborating to provide services to users, authors and administrators. In summary, agents maintain link integrity when documents are updated, moved, or when WWW sites are reorganised. They also provide
Safe, Efficient Garbage Collection for C++
, 1993
"... We propose adding safe, efficient garbage collection to C++, eliminating the possibility of storage-management bugs and making the design of complex, object-oriented systems much easier. This can be accomplished with almost no change to the language itself and only small changes to existing implemen ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
We propose adding safe, efficient garbage collection to C++, eliminating the possibility of storage-management bugs and making the design of complex, object-oriented systems much easier. This can be accomplished with almost no change to the language itself and only small changes to existing implementations, while retaining compatibility with existing class libraries. Our proposal is the first to take a holistic, system-level approach, integrating four technologies. The language interface specifies how programmers access garbage collection through the language. An optional safe subset of the language automatically enforces the safe-use rules of garbage collection and precludes storage bugs. A variety of collection algorithms are compatible with the language interface, but some are easier to implement and more compatible with existing C++ and C implementations. Finally, codegenerator safety ensures that compilers generate correct code for use with collectors. John R. Ellis and David L. D...

