Results 1 - 10
of
18
The Design and Implementation of the SELF Compiler, an Optimizing Compiler for Object-Oriented Programming Languages
, 1992
"... Object-oriented programming languages promise to improve programmer productivity by supporting abstract data types, inheritance, and message passing directly within the language. Unfortunately, traditional implementations of object-oriented language features, particularly message passing, have been ..."
Abstract
-
Cited by 120 (15 self)
- Add to MetaCart
Object-oriented programming languages promise to improve programmer productivity by supporting abstract data types, inheritance, and message passing directly within the language. Unfortunately, traditional implementations of object-oriented language features, particularly message passing, have been much slower than traditional implementations of their non-object-oriented counterparts: the fastest existing implementation of Smalltalk-80 runs at only a tenth the speed of an optimizing C implementation. The dearth of suitable implementation technology has forced most object-oriented languages to be designed as hybrids with traditional non-object-oriented languages, complicating the languages and making programs harder to extend and reuse. This dissertation describes a collection of implementation techniques that can improve the run-time performance of object-oriented languages, in hopes of reducing the need for hybrid languages and encouraging wider spread of purely object-oriented langu...
A Paradigmatic Object-Oriented Programming Language: Design, Static Typing and Semantics
- Journal of Functional Programming
, 1993
"... In order to illuminate the fundamental concepts involved in object-oriented programming languages, we describe the design of TOOPL, a paradigmatic, statically-typed, functional, object-oriented programming language which supports classes, objects, methods, hidden instance variables, subtypes, and in ..."
Abstract
-
Cited by 110 (9 self)
- Add to MetaCart
In order to illuminate the fundamental concepts involved in object-oriented programming languages, we describe the design of TOOPL, a paradigmatic, statically-typed, functional, object-oriented programming language which supports classes, objects, methods, hidden instance variables, subtypes, and inheritance. It has proven to be quite difficult to design such a language which has a secure type system. A particular problem with statically type checking object-oriented languages is designing type-checking rules which ensure that methods provided in a superclass will continue to be type correct when inherited in a subclass. The type-checking rules for TOOPL have this feature, enabling library suppliers to provide only the interfaces of classes with actual executable code, while still allowing users to safely create subclasses. In order to achieve greater expressibility while retaining type-safety, we choose to separate the inheritance and subtyping hierarchy in the language. The design of...
The Cecil Language, Specification and Rationale
, 1993
"... Cecil is a new purely object-oriented language intended to support rapid construction of highquality, extensible software. Cecil combines multi-methods with a classless object model, object-based encapsulation, and optional static type checking. Cecil's static type system distinguishes between subty ..."
Abstract
-
Cited by 109 (20 self)
- Add to MetaCart
Cecil is a new purely object-oriented language intended to support rapid construction of highquality, extensible software. Cecil combines multi-methods with a classless object model, object-based encapsulation, and optional static type checking. Cecil's static type system distinguishes between subtyping and code inheritance, but Cecil enables these two graphs to be described with a single set of declarations, optimizing the common case where the two graphs are parallel. Cecil includes a fairly flexible form of parameterization, including both explicitly parameterized objects, types, and methods and implicitly parameterized methods related to the polymorphic functions commonly found in functional languages. By making type declarations optional, Cecil aims to support mixed exploratory and production programming styles. This document describes the design of the Cecil language as of March, 1993. It mixes the specification of the language with discussions of design issues and explanations of...
Strongtalk: Typechecking Smalltalk in a Production Environment
, 1993
"... Strongtalk TM is a typechecker for a downward compatible Smalltalk dialect. It is designed for large-scale production software development, and incorporates a strong, modern structural type system. It not only separates the notions of type and class, but also deals with the more difficult issue of s ..."
Abstract
-
Cited by 74 (3 self)
- Add to MetaCart
Strongtalk TM is a typechecker for a downward compatible Smalltalk dialect. It is designed for large-scale production software development, and incorporates a strong, modern structural type system. It not only separates the notions of type and class, but also deals with the more difficult issue of separating inheritance and subtyping using the notion of inherited types [CHC90, Bru93a] to preserve encapsulation. Strongtalk integrates inherited types, metaclasses, blocks and polymorphic methods into a highly usable, full-scale language. 1 Introduction It is widely accepted that a strong, static type system for a programming language has important benefits, including increased reliability, readability, and (potentially) performance. However, an inadequate type system can constrain the flexibility of a language, and thus its expressiveness. Static typing allows the type safety of source code to be completely determined before execu- 0TM Strongtalk is a trademark of Horizon Technologies...
The Cecil language -- specification and rationale: Version 3.2
, 2004
"... Cecil is a purely object-oriented language intended to support rapid construction of high-quality, extensible software. Cecil combines multi-methods with a simple classless object model, a kind of dynamic inheritance, modules, and optional static type checking. Instance variables in Cecil are access ..."
Abstract
-
Cited by 49 (4 self)
- Add to MetaCart
Cecil is a purely object-oriented language intended to support rapid construction of high-quality, extensible software. Cecil combines multi-methods with a simple classless object model, a kind of dynamic inheritance, modules, and optional static type checking. Instance variables in Cecil are accessed solely through messages, allowing instance variables to be replaced or overridden by methods and vice versa. Cecil’s predicate objects mechanism allows an object to be classified automatically based on its run-time (mutable) state. Cecil’s static type system distinguishes between subtyping and code inheritance, but Cecil enables these two graphs to be described with a single set of declarations, streamlining the common case where the two graphs are parallel. Cecil includes a fairly flexible form of parameterization, including explicitly parameterized objects, types, and methods, as well as implicitly parameterized methods related to the polymorphic functions commonly found in functional languages. By making type declarations optional, Cecil aims to allow mixing of and migration between exploratory and production programming styles. Cecil supports a module mechanism that enables independently-developed subsystems to be encapsulated, allowing them to be type-checked and reasoned about in isolation despite the presence of multi-methods and subclassing. Objects can be extended externally with additional
Typing in object-oriented languages: Achieving expressiveness and safety
- Computing Surveys
, 1996
"... While simple static-typing disciplines exist for object-oriented languages like C++, Java, and Object Pascal, they are often so inflexible that programmers are forced to use type casts to get around the restrictions. At the other extreme are languages like Beta and Eiffel, which allow more freedom, ..."
Abstract
-
Cited by 29 (1 self)
- Add to MetaCart
While simple static-typing disciplines exist for object-oriented languages like C++, Java, and Object Pascal, they are often so inflexible that programmers are forced to use type casts to get around the restrictions. At the other extreme are languages like Beta and Eiffel, which allow more freedom, but require run-time or link-time checking to pick up the type errors that their type systems are unable to detect at compile time. This paper presents a collection of sample programs which illustrate problems with existing type systems, and suggests ways of improving the expressiveness of these systems while retaining static type safety. In particular we will discuss the motivations behind introducing "MyType", "matching", and "match-bounded polymorphism" into these type systems. We also suggest a way of simplifying the resulting type system by replacing subtyping by a type system with a new type construct based on matching. Both systems provide for binary methods, which are often difficult...
Encapsulating Plurality
, 1993
"... This paper describes the Gaggle, a mechanism for grouping and naming objects in an object-oriented distributed system. Using Gaggles, client objects can access distributed replicated services without regard for the number of objects that provide the service. Gaggles are not themselves a replicati ..."
Abstract
-
Cited by 18 (2 self)
- Add to MetaCart
This paper describes the Gaggle, a mechanism for grouping and naming objects in an object-oriented distributed system. Using Gaggles, client objects can access distributed replicated services without regard for the number of objects that provide the service. Gaggles are not themselves a replication mechanism; instead they enable programmers to construct their own replicated distributed services in whatever way is appropriate for the application at hand, and then to encapsulate the result. From the point
Parallel Sets: An Object-Oriented Methodology for Massively Parallel Programming
, 1992
"... Parallel programming has become the focus of much research in the past decade. As the limits of VLSI technology are tested, it becomes more apparent that parallel processors will be responsible for the next quantum leap in performance. Already parallel programming is responsible for significant adva ..."
Abstract
-
Cited by 12 (3 self)
- Add to MetaCart
Parallel programming has become the focus of much research in the past decade. As the limits of VLSI technology are tested, it becomes more apparent that parallel processors will be responsible for the next quantum leap in performance. Already parallel programming is responsible for significant advances not so much in the speed of solving problems, but in the size of problems that can be solved. Carefully crafted parallel programs are solving problems magnitudes larger than could be considered for serial machines. Object-oriented programming has also become popular in academia and perhaps even moreso in industry. O-O holds out the promise of being able to efficiently build large systems that are understandable, maintainable, and more robust. The programs targetted by O-O are different than those typically found running on a computer such as the Connection Machine. Parallel programs are often designed for very specific tasks; O-O programs' strengths are that they handle a wide variety ...
Getting Class Correctness and System Correctness Equivalent - How to Get Covariance Right
, 1992
"... Covariant typing policies, as they are available in Eiffel or Sather, result in a type system in which the correct typing of a system is not implied by the correct typing of each class. This hinders a secure, incremental development of class libraries in these object-oriented languages. Classes whic ..."
Abstract
-
Cited by 10 (0 self)
- Add to MetaCart
Covariant typing policies, as they are available in Eiffel or Sather, result in a type system in which the correct typing of a system is not implied by the correct typing of each class. This hinders a secure, incremental development of class libraries in these object-oriented languages. Classes which are added to a library may invalidate others that are already in the library. The paper shows how a covariant typing policy may be omitted without losing flexibility. As a consequence we regain the equivalence of class correctness and system correctness (and hence class validity and system validity). The approach taken in this paper is based on the observation that inheritance is used either for the integration of subsystems or for the adaptation of general problem solutions to specific situations. It turns out that covariant typing policies are used for the latter situation. We show how adaptation may be solved by instantiation of schemes similar to generics. We give rules how such classe...
Increasing Cross-Domain Call Batching using Promises and Batched Control Structures
- MASSACHUSETTS INSTITUTE OF TECHNOLOGY
, 1995
"... In a client-server system, it may be possible for the client to corrupt server data through unsafe access methods or programming errors. A common method for protecting the server data is to separate the client and server into distinct protection domains, e.g. Unix processes. Communication between cl ..."
Abstract
-
Cited by 10 (1 self)
- Add to MetaCart
In a client-server system, it may be possible for the client to corrupt server data through unsafe access methods or programming errors. A common method for protecting the server data is to separate the client and server into distinct protection domains, e.g. Unix processes. Communication between client and server is restricted to a well-defined set of crossdomain calls and results are passed as opaque pointers to server data. Unfortunately, cross-domain calls are expensive and seriously affect the performance of the system. In his work on Batched Futures, Bogle presents a mechanism for batching cross-domain calls, thus amortizing the overhead of the domain crossing across the batch. Bogle showed that the improvement in performance is directly proportional to the average size of a batch (batching factor). This thesis describes two mechanisms that can be used to improve the batching factor: basic value promises and batched control structures. Basic value promises allow the batching of calls that return basic values (e.g. integer, boolean, character and real). Batched control structures allow the batching of simple control flow statements such as if statements, while loops and for loops. Both mechanisms have been implemented in Thor, an object-oriented database system. This thesis presents performance results showing the e#ectiveness of both mechanisms in increasing the performance of cross-domain calls.

