Several recent studies have introduced lightweight versions of Java: reduced languages in which complex features like threads and reflection are dropped to enable rigorous arguments about key properties such as type s...
详细信息
ISBN:
(纸本)9781581132380
Several recent studies have introduced lightweight versions of Java: reduced languages in which complex features like threads and reflection are dropped to enable rigorous arguments about key properties such as type safety. We carry this process a step further, omitting almost all features of the full language (including interfaces and even assignment) to obtain a small calculus, Featherweight Java, for which rigorous proofs are not only possible but *** Java bears a similar relation to full Java as the lambda-calculus does to languages such as ML and Haskell. It offers a similar computational “feel,” providing classes, methods, fields, inheritance, and dynamic typecasts, with a semantics closely following Java's. A proof of type safety for Featherweight Java thus illustrates many of the interesting features of a safety proof for the full language, while remaining pleasingly compact. the syntax, type rules, and operational semantics of Featherweight Java fit on one page, making it easier to understand the consequences of extensions and *** an illustration of its utility in this regard, we extend Featherweight Java with generic classes in the style of GJ (Bracha, Odersky, Stoutamire, and Wadler) and sketch a proof of type safety. the extended system formalizes for the first time some of the key features of GJ.
We present GJ, a designthat extends the Java programminglanguage with generic types and methods. these are both explained and implemented by translation into the unextended language. the translation closely mimics t...
ISBN:
(纸本)9781581130058
We present GJ, a designthat extends the Java programminglanguage with generic types and methods. these are both explained and implemented by translation into the unextended language. the translation closely mimics the way generics are emulated by programmers: it erases all type parameters, maps type variables to their bounds, and inserts casts where needed. Some subtleties of the translation are caused by the handling of *** increases expressiveness and safety: code utilizing generic libraries is no longer buried under a plethora of casts, and the corresponding casts inserted by the translation are guaranteed to not *** is designed to be fully backwards compatible withthe current Java language, which simplifies the transition from non-generic to generic programming. In particular, one can retrofit existing library classes with generic interfaces without changing their *** implementation of GJ has been written in GJ, and is freely available on the web.
A number of inadequacies of existing implementation techniques for extending Java™ with parametric polymorphism are revealed. Homogeneous translations are the most space-efficient but they are not compatible...
详细信息
ISBN:
(纸本)9781581130058
A number of inadequacies of existing implementation techniques for extending Java™ with parametric polymorphism are revealed. Homogeneous translations are the most space-efficient but they are not compatible with reflection, some models of persistence, and multiple dispatch. Heterogeneous translations, on the other hand, can potentially produce large amounts of redundant information. implementation techniques that address these concerns are developed. In languages that support run-time reflection, an adequate implementation of parametric, bounded and F-bounded polymorphism is shown to require (reflective) run-time support. In Java, extensions to the core classes are needed. this is in spite of the fact that parametric polymorphism is intended to be managed statically.
this paper describes a lightweight yet powerful approach for writing distributed applications using shared variables. Our approach, called SHAREHOLDER, is inspired by the flexible and intuitive model of information ac...
详细信息
ISBN:
(纸本)9781581130058
this paper describes a lightweight yet powerful approach for writing distributed applications using shared variables. Our approach, called SHAREHOLDER, is inspired by the flexible and intuitive model of information access common to the World Wide Web. the distributed applications targeted by our approach all share a weak consistency model and loose transaction semantics, similar to a user's model of accessing email, bulletin boards, chat rooms, etc. on the Internet. the SHAREHOLDER infrastructure has several advantages. Its highly object-oriented view of shared variables simplifies their initialization and configuration. A shared variable's distribution mechanism is specified through an associated configuration object, and the programmer does not need to write any extra code to implement the sharing mechanism. these configuration objects can be initialized at run-time, allowing tremendous flexibility in dynamic control of distribution of shared variables. Finally, the programmer can treat shared variables and local variables interchangeably, thus simplifying conversion of a serial application into a distributed application.
Java offers the real possibility that most programs can be written in a type-safe language. However, for Java to be broadly useful, it needs additional expressive power. this paper extends Java in one area where more ...
详细信息
Java offers the real possibility that most programs can be written in a type-safe language. However, for Java to be broadly useful, it needs additional expressive power. this paper extends Java in one area where more power is needed: support for parametric polymorphism, which allows the definition and implementation of generic abstractions. We discuss boththe rationale for our design decisions and the impact of the extension on other parts of Java, including arrays and the class library. We also describe optional extensions to the Java virtual machine to allow parameterized bytecodes, and how to verify them efficiently. We have extended the Jave bytecode interpreter to provide good performance for parameterized code in both execution speed and code size, without slowing down non-parameterized code.
Open implementation Analysis and design (OIA/D) has been introduced as a design methodology for object-oriented software systems, and in particular for substrate software. In this paper we detail our experiences with ...
ISBN:
(纸本)9780897919081
Open implementation Analysis and design (OIA/D) has been introduced as a design methodology for object-oriented software systems, and in particular for substrate software. In this paper we detail our experiences with using OIA/D to design and implement a common substrate component for parallel language runtime systems: a lightweight threads package. We show how existing thread packages employ a "black-box" design, hiding crucial design decisions that drastically reduce their ability to be re-used. We detail these design decisions (dilemmas) and show how an implementation based on OIA/D principles results in a thread package that is flexible, efficient, portable, and re-usable.
Large software systems are often built on system platforms that support or enforce specific characteristics of the source code or actual design. these characteristics are either captured informally in design guideline...
详细信息
ISBN:
(纸本)9780897917889
Large software systems are often built on system platforms that support or enforce specific characteristics of the source code or actual design. these characteristics are either captured informally in design guideline documents or in specialized design and implementationlanguages. In our view, both approaches are unsatisfactory. Informal descriptions do not allow automated analysis and lead to vague constraint descriptions. the language-based approach leads to different languages for different platforms and even for different versions of the same basic platform. Our approach is to describe and name the constraints separately in a design constraint language called CDL, which is based on an extraordinarily concise logic of parse trees. designs are then annotated withthe names of the constraints they are supposed to satisfy. We discuss how the design constraint language is integrated into a designlanguage environment. We exhibit industrial and experimental evidence that our choice of design constraint language allows us to formalize naturally and succinctly common design characteristics.
In this paper we present a method of code implementationthat works in conjunction with collaboration and responsibility based analysis modeling techniques to achieve better code reuse and resilience to change. Our ap...
详细信息
ISBN:
(纸本)089791788X
In this paper we present a method of code implementationthat works in conjunction with collaboration and responsibility based analysis modeling techniques to achieve better code reuse and resilience to change. Our approach maintains a closer mapping from responsibilities in the analysis model to entities in the implementation. In so doing, it leverages the features of flexible design and design reuse found in collaboration-based design models to provide similar adaptability and reuse in the implementation. Our approach requires no special development tools and uses only standard features available in the C++ language. In an earlier paper we described the basic mechanisms used by our approach and discussed its advantages in comparison to the framework approach. In this paper we show how our approach combines code and design reuse, describing specific techniques that can be used in the development of larger applications.
Compile-time type information should be valuable in efficient compilation of statically typed functional languages such as Standard ML. But how should type-directed compilation work in real compilers, and how much per...
详细信息
Every problem has a context, which can include l community and culture implementation constraints language and system and probably other things too. A good design will take its context into account. If the culture dem...
详细信息
ISBN:
(纸本)0897917219
Every problem has a context, which can include l community and culture implementation constraints language and system and probably other things too. A good design will take its context into account. If the culture demands it, that may mean, for example, using object-oriented techniques where they don't really apply or not using them in a case that seems to cry out for them. It may mean choosing a programminglanguage without regard for its usual advantages or disadvantages. It may mean using a set of tools that some people may find cumbersome or outdated, It may call for all kinds of things that may seem nonsensical when viewed in isolation. But software systems do not exist in isolation. they would not be systems if they did. Any useful system must take its context into account. Unless we can answer the question "Good for what?" we cannot say whether or not a design is good.
暂无评论