Results 1 -
5 of
5
Equal Rights for Functional Objects or, The More Things Change, The More They Are the Same
, 1993
"... DATA TYPES A. Comparing Type Objects There has been as much confusion over type identity as there has been over object identity, although the type identity problem is usually referred to as the type equivalence problem [Aho86,s.6.3] [Wegbreit74] [Welsh77]. The type identity problem is to determine ..."
Abstract
-
Cited by 20 (7 self)
- Add to MetaCart
DATA TYPES A. Comparing Type Objects There has been as much confusion over type identity as there has been over object identity, although the type identity problem is usually referred to as the type equivalence problem [Aho86,s.6.3] [Wegbreit74] [Welsh77]. The type identity problem is to determine when two types are equal, so that type checking can be done in a programming language. 22 Algol-68 takes the point of view of "structural" equivalence, in which nonrecursive types that are built up from primitive types using the same type constructors in the same order should compare equal, while Ada takes the point of view of "name" equivalence, in which types are equivalent if and only if they have the same name. We will ignore the software engineering issues of which kind of type equivalence makes for better-engineered programs, and focus on the basic issue of type equivalence itself. We note that if a type system offers the type TYPE---i.e., it offers first-class representations of typ...
The Gabriel 'Triangle' Benchmark at Warp Speed
- ACM Lisp Pointers V,3 (Jul-Sep
, 1992
"... INTRODUCTION The "Triangle" benchmark is typically the longest of the Gabriel Lisp benchmarks, taking between 14.44 seconds on the Cray-1 and 1510 seconds on the Xerox Dolphin [Gabriel85]. 1 Triangle performs a classical AI task, in that it solves a puzzle game using a combinatorial search. Unfor ..."
Abstract
-
Cited by 2 (1 self)
- Add to MetaCart
INTRODUCTION The "Triangle" benchmark is typically the longest of the Gabriel Lisp benchmarks, taking between 14.44 seconds on the Cray-1 and 1510 seconds on the Xerox Dolphin [Gabriel85]. 1 Triangle performs a classical AI task, in that it solves a puzzle game using a combinatorial search. Unfortunately, the standard implementation of the Triangle benchmark is an embarrassment to the AI and Lisp communities, because it does not utilize the best algorithm, and therefore continues to perpetuate the myth that "Lisp is slow". We show how to speed up Triangle through a combination of memoizing [Bird80] and bit-vector techniques [Baker90], to yield a time of 0.07 seconds on a modern RISC workstation (the 80860-based OKIstation^TM), which is 206 times faster than the Cray-1 speed in [Gabriel85]. Our techniques eliminate redundancy from the computation, which has the effect of eliminating potential parallelism, as well. B. THE STANDARD TRIA
The Efficient Implementation of Common Lisp's SEARCH Function on Bit-vectors
- Internal Memorandum, Nimble Computer Corporation
, 1989
"... The efficient implementation of Common Lisp's SEARCH function specialized to bit-vectors is discussed. With its non-word-aligned search patterns and its small 2-element alphabet, a bit-vector SEARCH can often be the most inefficient of all SEARCH'es. Techniques, some of which we believe are novel, a ..."
Abstract
-
Cited by 1 (1 self)
- Add to MetaCart
The efficient implementation of Common Lisp's SEARCH function specialized to bit-vectors is discussed. With its non-word-aligned search patterns and its small 2-element alphabet, a bit-vector SEARCH can often be the most inefficient of all SEARCH'es. Techniques, some of which we believe are novel, are discussed for overcoming these problems and achieving excellent performance on standard computer hardware. To reduce the amortized pattern pre-processing costs, we use four distinct search algorithms for pattern lengths of 1, 2 to w, w+1 to 2w-2, and larger, where w is the algorithm byte size. Fast searching of a bit-string for an exact match of a shorter pattern bit-string can be required for some "bit-stuffing" communication protocols, and for the 1-dimensional portion of a 2-dimensional search within a binary image, such as those found on a bit-mapped display or transmitted by facsimile. Some of the techniques discussed are also relevant for searching with other small alphabets, e.g.,...
The Nimble Type Inferencer for Common Lisp-84
- Tech. Rept., Nimble Comp
, 1990
"... data types model the semantic intent of the programmer with respect to individual variable values, so that global properties of these individual values (e.g., evenness or primeness of an integer value) are maintained. The assert construct allows for the specification of complex relationships among s ..."
Abstract
- Add to MetaCart
data types model the semantic intent of the programmer with respect to individual variable values, so that global properties of these individual values (e.g., evenness or primeness of an integer value) are maintained. The assert construct allows for the specification of complex relationships among several variables. However, since we are interested in improving run-time efficiency, we will assume that the program is already semantically correct, and will therefore concern ourselves only with the determination of tight lattice bounds on the values of variables. Performing type inference requires proving many small theorems about programs, and therefore runs the risk of being confused with the more difficult task of theorem-proving for the purpose of proving programs correct relative to some external criteria. While some of the techniques may be similar to both tasks, the goals are completely different. For example, it is considered acceptable and routine for correctness provers to inte...
Speeding up the 'Puzzle' Benchmark a 'Bit'
"... INTRODUCTION Baskett's "Puzzle" benchmark has been used for almost a decade for the evaluation of hardware architectures, and was included in the "Gabriel" suite of Lisp benchmarks [Gabriel85]. "Puzzle" solves a 3-dimensional packing problem by attempting to pack pieces of 4 different types into a ..."
Abstract
- Add to MetaCart
INTRODUCTION Baskett's "Puzzle" benchmark has been used for almost a decade for the evaluation of hardware architectures, and was included in the "Gabriel" suite of Lisp benchmarks [Gabriel85]. "Puzzle" solves a 3-dimensional packing problem by attempting to pack pieces of 4 different types into a 5x5x5 cube. The class of such packing problems is closely related to the "bin-packing" and "knapsack" problems of complexity theory, which are known to be NP-complete [Baase78]. Thus, while it is unlikely that clever programming will allow us to escape the asymptotic exponential behavior of these problems, it can gain us some very real performance improvements. It is worth studying packing problems because of their ubiquity in the real world. In addition to the obvious examples from business---e.g., freight loading---there are similarities with real problems in biochemical bonding. The standard version of Puzzle found in the Gabriel benchmark suite is an embarrassment for the Lisp

