Results 1 - 10
of
11
Mixin’ Up the ML Module System
"... ML modules provide hierarchical namespace management, as well as fine-grained control over the propagation of type information, but they do not allow modules to be broken up into separately compilable, mutually recursive components. Mixin modules facilitate recursive linking of separately compiled c ..."
Abstract
-
Cited by 8 (3 self)
- Add to MetaCart
ML modules provide hierarchical namespace management, as well as fine-grained control over the propagation of type information, but they do not allow modules to be broken up into separately compilable, mutually recursive components. Mixin modules facilitate recursive linking of separately compiled components, but they are not hierarchically composable and typically do not support type abstraction. We synthesize the complementary advantages of these two mechanisms in a novel module system design we call MixML. A MixML module is like an ML structure in which some of the components are specified but not defined. In other words, it unifies the ML structure and signature languages into one. MixML seamlessly integrates hierarchical composition, translucent ML-style data abstraction, and mixin-style recursive linking. Moreover, the design of MixML is clean and minimalist; it emphasizes how all the salient, semantically interesting features of the ML module system (as well as several proposed extensions to it) can be understood simply as stylized uses of a small set of orthogonal underlying constructs, with mixin composition playing a central role.
Integrating Nominal and Structural Subtyping
, 2007
"... Nominal subtyping (or user-defined subtyping) and structural subtyping each have their own strengths and weaknesses. Nominal subtyping allows programmers to explicitly express design intent, and, when types are associated with run time tags, enables run-time type tests (e.g., downcasts) and external ..."
Abstract
-
Cited by 7 (3 self)
- Add to MetaCart
Nominal subtyping (or user-defined subtyping) and structural subtyping each have their own strengths and weaknesses. Nominal subtyping allows programmers to explicitly express design intent, and, when types are associated with run time tags, enables run-time type tests (e.g., downcasts) and external method dispatch. On the other hand, structural subtyping is flexible and compositional, allowing unanticipated reuse. To date, nearly all object-oriented languages fully support only one subtyping paradigm or the other. In this paper, we describe a core calculus for a language that integrates the key aspects of nominal and structural subtyping in a unified framework. We have also merged the flexibility of structural subtyping with statically typechecked external methods, a novel combination. We prove type safety for this language and illustrate its practical utility through examples that are not easily expressed in other languages. Our work provides a clean foundation for the design of future languages that enjoy the benefits of both nominal and structural subtyping.
Sharing classes between families
- IN: PROC. OF CONF. ON PROGRAMMING LANGUAGE DESIGN AND IMPLEMENTATION
, 2009
"... Class sharing is a new language mechanism for building extensible software systems. Recent work has separately explored two different kinds of extensibility: first, family inheritance, in which an entire family of related classes can be inherited, and second, adaptation, in which existing objects ar ..."
Abstract
-
Cited by 3 (1 self)
- Add to MetaCart
Class sharing is a new language mechanism for building extensible software systems. Recent work has separately explored two different kinds of extensibility: first, family inheritance, in which an entire family of related classes can be inherited, and second, adaptation, in which existing objects are extended in place with new behavior and state. Class sharing integrates these two kinds of extensibility mechanisms. With little programmer effort, objects of one family can be used as members of another, while preserving relationships among objects. Therefore, a family of classes can be adapted in place with new functionality spanning multiple classes. Object graphs can evolve from one family to another, adding or removing functionality even at run time. Several new mechanisms support this flexibility while ensuring type safety. Class sharing has been implemented as an extension to Java, and its utility for evolving and extending software is demonstrated with realistic systems.
A comparison of designs for extensible and extension-oriented compilers
- Master’s thesis, Massachusetts Institute of Technology, Feb 2008. http://pdos.csail.mit.edu/xoc/clements-thesis.pdf. 24 JOURNAL OF OBJECT TECHNOLOGY VOL 8, NO. 4 APPENDIX: SYNTAX AND SEMANTICS OF LINQ
"... Today’s system programmers go to great lengths to extend the languages in which they program. For instance, system-specific compilers find errors in Linux and other systems, and add support for specialized control flow to Qt and event-based programs. These compilers are difficult to build and cannot ..."
Abstract
-
Cited by 3 (0 self)
- Add to MetaCart
Today’s system programmers go to great lengths to extend the languages in which they program. For instance, system-specific compilers find errors in Linux and other systems, and add support for specialized control flow to Qt and event-based programs. These compilers are difficult to build and cannot always understand each other’s language changes. However, they can greatly improve code understandability and correctness, advantages that should be accessible to all programmers. This thesis considers four extensible and extension-oriented compilers: CIL, Polyglot, xtc, and Xoc. These four compilers represent four distinctly different approaches to the problem of bridging the gap between language design and system implementation. Taking an extension author’s point of view, this thesis compares the design of each compiler’s extension interface in terms of extension structure, syntactic analysis, semantic analysis, and rewriting.
Xoc, an Extension-Oriented Compiler for Systems Programming
"... Today’s system programmers go to great lengths to extend the languages in which they program. For instance, system-specific compilers find errors in Linux and other systems, and add support for specialized control flow to Qt and event-based programs. These compilers are difficult to build and cannot ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
Today’s system programmers go to great lengths to extend the languages in which they program. For instance, system-specific compilers find errors in Linux and other systems, and add support for specialized control flow to Qt and event-based programs. These compilers are difficult to build and cannot always understand each other’s language changes. However, they can greatly improve code understandability and correctness, advantages that should be accessible to all programmers. We describe an extension-oriented compiler for C called xoc. An extension-oriented compiler, unlike a conventional extensible compiler, implements new features via many small extensions that are loaded together as needed. Xoc gives extension writers full control over program syntax and semantics while hiding many compiler internals. Xoc programmers concisely define powerful compiler extensions that, by construction, can be combined; even some parts of the base compiler, such as GNU C compatibility, are structured as extensions. Xoc is based on two key interfaces. Syntax patterns allow extension writers to manipulate language fragments using concrete syntax. Lazy computation of attributes allows extension writers to use the results of analyses by other extensions or the core without needing to worry about pass scheduling. Extensions built using xoc include xsparse, a 345-line extension that mimics Sparse, Linux’s C front end, and xlambda, a 170line extension that adds function expressions to C. An evaluation of xoc using these and 13 other extensions shows that xoc extensions are typically more concise than equivalent extensions written for conventional extensible compilers and that it is possible to compose extensions.
unknown title
"... This thesis proposes AspectScope, which is our programming tool for AspectJ. It automatically performs a whole-program analysis and visualizes the result, and shows how aspects affect module interfaces in the program. When an aspect extends a method behavior, it will also extend the specification wh ..."
Abstract
- Add to MetaCart
This thesis proposes AspectScope, which is our programming tool for AspectJ. It automatically performs a whole-program analysis and visualizes the result, and shows how aspects affect module interfaces in the program. When an aspect extends a method behavior, it will also extend the specification which includes its behavior and its signature. In addition, the other methods in the call graph of the advised method are also extended these specifications. It is ideal to write a program only looking at a method specification. One of the typical examles is programming with API (Application Program Interface) in OOP. Developers need not investigate a mehtod implementation because the specification of the method is unchanged and therefore reliable. In AOP, however, the existing specification after deploying aspects are no longer reliable. Based on this notion, AspectScope can have developers look at the extended method specification on its view to let them understand which method is extended by an aspect. A developer who writes an aspect should
Homogeneous Family Sharing
, 2010
"... Recent work has introduced class sharing as a mechanism for adapting a family of related classes with new functionality. This paper introduces homogeneous family sharing, implemented in the J&h language, in which the sharing mechanism is lifted from class-level sharing to true family-level sharing. ..."
Abstract
- Add to MetaCart
Recent work has introduced class sharing as a mechanism for adapting a family of related classes with new functionality. This paper introduces homogeneous family sharing, implemented in the J&h language, in which the sharing mechanism is lifted from class-level sharing to true family-level sharing. Compared to the original (heterogeneous) class sharing mechanism, homogeneous family sharing provides useful new functionality and substantially reduces the annotation burden on programmers by eliminating the need for masked types and sharing declarations. This is achieved through a new mechanism, shadow classes, which permit homogeneous sharing of all related classes in shared families. The new sharing mechanism has a straightforward semantics, which is formalized in the J&h calculus. The soundness of the J&h type system is proved. The J&h language is implemented as an extension to the J & language. To demonstrate the effectiveness of family sharing, the Polyglot compiler framework is ported to J&h.
Composing transformations for instrumentation and incrementalization of real applications ∗
"... This paper describes powerful transformations for instrumenting and incrementalizing real applications, and composition of transformation rules for improving both the transformed programs and the application of transformation rules. The example transformations for instrumentation are for ranking pee ..."
Abstract
- Add to MetaCart
This paper describes powerful transformations for instrumenting and incrementalizing real applications, and composition of transformation rules for improving both the transformed programs and the application of transformation rules. The example transformations for instrumentation are for ranking peers in BitTorrent. The example transformations for incrementalization are for optimizing the instrumentation of BitTorrent, for efficiently computing the quality of network hosts ’ connections using NetFlow, and for generating efficient implementations from formal specifications for Constrained RBAC. We describe instrumentation and incrementalization specified using a high-level language for invariant-driven transformations, and a method for composing transformations by composing transformation rules and optimizing the composed rules. The method allows sophisticated transformations to be specified declaratively as separate transformation rules, and the rules to be composed and applied automatically for efficient instrumentation and effective optimization. The method has been implemented for transforming Python programs. We present experimental results that show the method’s benefits and effectiveness. 1.
Design, Languages, Performance
"... When transforming programs for complex instrumentation and optimization, it is essential to understand the effect of the transformations, to best optimize the transformed programs, and to speedup the transformation process. This paper describes a powerful method for composing transformation rules to ..."
Abstract
- Add to MetaCart
When transforming programs for complex instrumentation and optimization, it is essential to understand the effect of the transformations, to best optimize the transformed programs, and to speedup the transformation process. This paper describes a powerful method for composing transformation rules to achieve these goals. We specify the transformations declaratively as instrumentation rules and invariant rules, the latter for transforming complex queries in instrumentation and in programs into efficient incremental computations. Our method automatically composes the transformation rules and optimizes the composed rules before applying the optimized composed rules. The method allows (1) the effect of transformations to be accumulated in composed rules and thus easy to see, (2) the replacements in composed rules to be optimized without the difficulty of achieving the optimization on large transformed programs, and (3) the transformation process to be sped up by applying a composed rule in one pass of program analyses and transformations instead of applying the original rules in multiple passes. We have implemented the method for Python. We successfully used it for instrumentation, in ranking peers in BitTorrent; and for optimization of complex queries, in the instrumentation of BitTorrent, in evaluating connections of network hosts using NetFlow, and in generating efficient implementations of Constrained RBAC.

