Results 1 - 10
of
80
TIL: A Type-Directed Optimizing Compiler for ML
- IN ACM SIGPLAN CONFERENCE ON PROGRAMMING LANGUAGE DESIGN AND IMPLEMENTATION
, 1995
"... We describe a new compiler for Standard ML called TIL, that is based on four technologies: intensional polymorphism, tag-free garbage collection, conventional functional language optimization, and loop optimization. We use intensional polymorphism and tag-free garbage collection to provide specializ ..."
Abstract
-
Cited by 219 (35 self)
- Add to MetaCart
We describe a new compiler for Standard ML called TIL, that is based on four technologies: intensional polymorphism, tag-free garbage collection, conventional functional language optimization, and loop optimization. We use intensional polymorphism and tag-free garbage collection to provide specialized representations, even though SML is a polymorphic language. We use conventional functional language optimization to reduce the cost of intensional polymorphism, and loop optimization to generate good code for recursive functions. We present an example of TIL compiling an SML function to machine code, and compare the performance of TIL code against that of a widely used compiler, Standard ML of New Jersey.
Reactor: An Object Behavioral Pattern for Concurrent Event Demultiplexing and Dispatching
, 1995
"... Factory design patterns [9]), and advanced operating system mechanisms (such as explicit dynamic linking and multi-threading [10]). 9 Sample Code The following code illustrates an example of the Reactor object behavioral pattern. The example implements a portion of the logging server described in ..."
Abstract
-
Cited by 122 (57 self)
- Add to MetaCart
Factory design patterns [9]), and advanced operating system mechanisms (such as explicit dynamic linking and multi-threading [10]). 9 Sample Code The following code illustrates an example of the Reactor object behavioral pattern. The example implements a portion of the logging server described in Section 2. This example also illustrates the use of an object creational pattern called the Accepter (described in [7]). The Accepter pattern decouples the act of establishing a connection from the service(s) provided once a connection is established. This pattern is useful for simplifying the development of connection-oriented network services (such as file transfer, remote login, distributed logging, and video-on-demand). The Accepter pattern enables the application-specific portion of a service to be modified independently of the mechanism used to establish the connection. The code shown below implements the ClientAccepter class. This class performs the steps necessary to accept connecti...
Concurrent Programming in ERLANG
, 1993
"... Syntax Notation One (ASN.1), Recommendation X.208, Geneva, Switzerland. [13] CCITT Specification of Basic Encoding Rules (BER for Abstract Syntax One (ASN.1), Recommendation X.209, Geneva, Switzerland. [14] Gray, Jim and Reuter, Andreas Transaction Processing Concepts and Techniques, Morgan Kaufmann ..."
Abstract
-
Cited by 87 (0 self)
- Add to MetaCart
Syntax Notation One (ASN.1), Recommendation X.208, Geneva, Switzerland. [13] CCITT Specification of Basic Encoding Rules (BER for Abstract Syntax One (ASN.1), Recommendation X.209, Geneva, Switzerland. [14] Gray, Jim and Reuter, Andreas Transaction Processing Concepts and Techniques, Morgan Kaufmann Publishers, 1993. 143 144 Bibliography ...
A Perfect Hash Function Generator
"... gperf is a "software-tool generating-tool" designed to automate the generation of perfect hash functions. This paper describes the features, algorithms, and object-oriented design and implementation strategies incorporated in gperf.Italso presents the results from an empirical comparison between gp ..."
Abstract
-
Cited by 49 (34 self)
- Add to MetaCart
gperf is a "software-tool generating-tool" designed to automate the generation of perfect hash functions. This paper describes the features, algorithms, and object-oriented design and implementation strategies incorporated in gperf.Italso presents the results from an empirical comparison between gperf-generated recognizers and other popular techniques for reserved word lookup. gperf is distributed with the GNU libg++ library and is used to generate the keyword recognizers for the GNU C and GNU C++ compilers. 1 Introduction Perfect hash functions are a time and space efficient implementation of static search sets, which are ADTs with operations like initialize, insert,andretrieve. Static search sets are common in system software applications. Typical static search sets include compiler and interpreter reserved words, assembler instruction mnemonics, and shell interpreter builtin commands. Search set elements are called keywords.Key- words are inserted into the set once, usually at c...
Adding object-orientation to a logic database language
- Proceedings of the International Conference on l,~ty Large Databases
, 1993
"... Coral++ is a database programming language that integrates Coral [23] with the C++ type system. The data model allows arbitrary C++ objects in database facts, and the declarative query language extends Coral with C++ expressions in rules. Coral++ also supports an imperative rule-based sub-language t ..."
Abstract
-
Cited by 35 (5 self)
- Add to MetaCart
Coral++ is a database programming language that integrates Coral [23] with the C++ type system. The data model allows arbitrary C++ objects in database facts, and the declarative query language extends Coral with C++ expressions in rules. Coral++ also supports an imperative rule-based sub-language that is integrated with C++, providing support for updates. The design and implementation of Coral++ incorporates several important decisions: the data model is based on C++, and class definitions and method invocations are handled entirely by the C++ compiler; the notion of classes is kept orthogonal to the re-*The work of Haghu Hamakrishnan, Divesh Srivastava and Praveen Seshadri was supported by a David and Lutile
The CORAL Deductive System
- THE VLDB JOURNAL
, 1994
"... CORAL is a deductive system which supports a rich declarative language, and an interface to C++ which allows for a combination of declarative and imperative programming. The declarative query language supports general Horn clauses augmented with complex terms, set-grouping, aggregation, negation, ..."
Abstract
-
Cited by 25 (2 self)
- Add to MetaCart
CORAL is a deductive system which supports a rich declarative language, and an interface to C++ which allows for a combination of declarative and imperative programming. The declarative query language supports general Horn clauses augmented with complex terms, set-grouping, aggregation, negation, and relations with tuples that contain (universally quantified) variables. A CORAL declarative program can be organized as a collection of interacting modules. The CORAL implementation supports a wide range of evaluation strategies, and automatically chooses an efficient evaluation strategy for each module in the program. In addition, users are permitted to guide query optimization, if desired, by selecting from among a wide range of control choices at the level of each module. The CORAL system provides imperative constructs such as update, insert and delete rules. CORAL also has an interface with C++, and users can program in a combination of declarative CORAL and C++ extended with ...
Support for Object Placement in Wide Area Heterogeneous Distributed Systems
, 1996
"... One of the open challenges in distributed computing systems is determining how to place tasks onto processors when they are needed (in the Legion project being developed at UVA the basic computational units are modelled as objects, so the problem is one of object placement). The placement decision i ..."
Abstract
-
Cited by 20 (5 self)
- Add to MetaCart
One of the open challenges in distributed computing systems is determining how to place tasks onto processors when they are needed (in the Legion project being developed at UVA the basic computational units are modelled as objects, so the problem is one of object placement). The placement decision is crucial because it determines the run-time behavior of an object, including performance, cost and whether it can run at all. Many approaches have been developed to address this problem in a distributed system environment, but it is our claim that these efforts do not take the proper approach for supporting the needs of the large wide area heterogeneous virtual computer systems we envision will exist in the future. In particular, the systems developed to date are inadequate because they 1) focus on solutions for a narrow set of application types, environments, or user objectives, and 2) often inadequately support the full complexity and features of large distributed systems. We propose to b...
Requirements For A First Year Object-Oriented Teaching Language
- ACM SIGCSE Bulletin
, 1995
"... Interest in teaching object-oriented programming in first year computer science courses has increased substantially over the last few years. While the theoretical advantages are clear, it is not obvious that the available object-oriented languages are suitable for this purpose. None of the existing ..."
Abstract
-
Cited by 19 (1 self)
- Add to MetaCart
Interest in teaching object-oriented programming in first year computer science courses has increased substantially over the last few years. While the theoretical advantages are clear, it is not obvious that the available object-oriented languages are suitable for this purpose. None of the existing languages is appropriate for teaching objectoriented principles. In this paper we discuss the requirements for an object-oriented teaching language and draw attention to the deficiencies of existing languages. In particular, the paper examines C++, Smalltalk, Eiffel and Sather. Finally we outline characteristics of a new language, specifically designed for teaching purposes. 1 INTRODUCTION Over the last few years the object-oriented approach to system design has become widely accepted in industry as a valuable paradigm and has been adopted by many large companies. Partly as a result of this, and the advantages from a software engineering point of view, the use of object-oriented technology ...
Software Components in a Data Structure Precompiler
, 1993
"... : PREDATOR is a data structure precompiler that generates efficient code for maintaining and querying complex data structures. It embodies a novel component reuse technology that transcends traditional generic data types. In this paper, we explain the concepts of our work and our prototype system. W ..."
Abstract
-
Cited by 19 (9 self)
- Add to MetaCart
: PREDATOR is a data structure precompiler that generates efficient code for maintaining and querying complex data structures. It embodies a novel component reuse technology that transcends traditional generic data types. In this paper, we explain the concepts of our work and our prototype system. We show how complex data structures can be specified as compositions of software building blocks, and present performance results that compare PREDATOR output to hand-optimized programs. Keywords: components, software reuse, compiler, data structures. 1.0 Introduction Designing, writing, and debugging programs is a time-intensive task. Of the different aspects of writing programs of moderate to large complexity, implementing data structures often consumes a disproportionally large fraction of a programmer's time. A data structure compiler is a suite of tools that reduces the burden of programming data structures. There have been several attempts to produce such compilers. Two such compilers...
Double-Checked Locking - An Optimization Pattern for Efficiently Initializing and Accessing Thread-safe Objects
, 1997
"... This paper shows how the canonical implementation [1] of the Singleton pattern does not work correctly in the presence of preemptive multi-tasking or true parallelism. To solve this problem, we present the Double-Checked Locking optimization pattern. This pattern is useful for reducing contention an ..."
Abstract
-
Cited by 17 (0 self)
- Add to MetaCart
This paper shows how the canonical implementation [1] of the Singleton pattern does not work correctly in the presence of preemptive multi-tasking or true parallelism. To solve this problem, we present the Double-Checked Locking optimization pattern. This pattern is useful for reducing contention and synchronization overhead whenever "critical sections" of code should be executed just once. In addition, Double-Checked Locking illustrates how changes in underlying forces (i.e., adding multi-threading and parallelism to the common Singleton use-case) can impact the form and content of patterns used to develop concurrent software. 1Intent The Double-Checked Locking optimization pattern reduces contention and synchronization overhead whenever "critical sections" of code need to acquire locks just once, but must be thread-safe when they do acquire locks. 2 Also Known As Lock Hint [2] 3 Motivation 3.1 The Canonical Singleton Developing correct and efficient concurrent applications is ...

