A trait is a unit of behaviour that can be composed with other traits and used by classes. Traits offer an alternative to multiple inheritance. Conflict resolution of traits, while flexible, does not completely handle...
详细信息
ISBN:
(纸本)9781595937865
A trait is a unit of behaviour that can be composed with other traits and used by classes. Traits offer an alternative to multiple inheritance. Conflict resolution of traits, while flexible, does not completely handle accidental method name conflicts: if a trait with method m is composed with another trait defining a different method m then resolving the conflict may prove delicate or infeasible in cases where both versions of m are still needed. In this paper we present freezeable traits, which provide an expressive composition mechanism to support unanticipated method composition conflicts. Our solution introduces private trait methods and lets the class composer change method visibility at composition time (from public to private and vice versa). Moreover two class composers may use different composition policies for the same trait, something which is not possible in mainstream languages. This approach respects the two main design principles of traits: the class composer is empowered and traits can be flattened away. We present an implementation of freezable traits in Smalltalk. As a side-effect of this implementation we introduced private (early-bound and invisible) methods to Smalltalk by distinguishing object-sends from self-sends. Our implementation uses compile-time bytecode manipulation and, as such, introduces no run-time penalties.
Developing a general component system for a statically typed, object-oriented language is a challenging design problem for two reasons. First, mutually recursive references across components are common in object-orien...
详细信息
ISBN:
(纸本)9781595937865
Developing a general component system for a statically typed, object-oriented language is a challenging design problem for two reasons. First, mutually recursive references across components are common in object-oriented programs - an issue that has proven troublesome in the context of component systems for functional and procedural languages. Second, inheritance across component boundaries can cause accidental method overrides. Our recent research shows that a component framework can be constructed for a nominally typed object-oriented language supporting first-class(1) generic types simply by adding appropriate annotations, syntactic sugar, and component-level type-checking. The fundamental semantic building blocks for constructing, type-checking and manipulating components are provided by the underlying first-class generic type system. To demonstrate the simplicity and utility of this approach we have designed and implemented an extension of Java called Component NEXTGEN (CGEN). CGEN, which is based on the Sun Java 5.0 javac compiler, is backwards compatible with existing Java binary code and runs on current Java Virtual Machines. The primary contribution of this paper is a technical analysis of the subtle design issues involved in building a component framework for a nominally typed object-oriented language supporting first-class generics. In contrast to component systems for structurally typed languages, mutual recursion among components is accommodated in the type system and semantics without incorporating any special machinery. Our analysis includes a presentation of Core CGEN (CCG), a small, core language modeling the CGEN framework. It is based on Featherweight GJ and incorporates some ideas from MIXGEN. CCG adds the essential features to support components, but nothing more. Our discussion includes the type rules and semantics for CCG, as well as a proof of type safety.
Existing languages provide good support for typeful programming of stand-alone programs. In a distributed system, however, there may be interaction between multiple instances of many distinct programs, sharing some (b...
详细信息
Existing languages provide good support for typeful programming of stand-alone programs. In a distributed system, however, there may be interaction between multiple instances of many distinct programs, sharing some (but not necessarily all) of their module structure, and with some instances rebuilt with new versions of certain modules as time goes on. In this paper, we discuss programming-language support for such systems, focussing on their typing and naming issues. We describe an experimental language, Acute, which extends an ML core to support distributed development, deployment, and execution, allowing type-safe interaction between separately built programs. The main features are (1) type-safe marshalling of arbitrary values;(2) type names that are generated (freshly and by hashing) to ensure that type equality tests suffice to protect the invariants of abstract types, across the entire distributed system;(3) expression-level names generated to ensure that name equality tests suffice for type safety of associated values, for example, values carried on named channels;(4) controlled dynamic rebinding of marshalled values to local resources;and (5) thunkification of threads and mutexes to support computation mobility. These features are a large part of what is needed for typeful distributed programming. They are a relatively lightweight extension of ML, should be efficiently implementable, and are expressive enough to enable a wide variety of distributed infrastructure layers to be written as simple library code above the byte-string network and persistent store APIs. This disentangles the language run-time from communication intricacies. This paper highlights the main design choices in Acute. It is supported by a full language definition (of typing, compilation, and operational semantics), by a prototype implementation, and by example distribution libraries.
The proceedings contain 29 papers. The topics discussed include: a truly implementation independent GUI development tool;ada, model railroading, and real-time software engineering education;building Tcl-Tk GUIs for HR...
ISBN:
(纸本)1581131275
The proceedings contain 29 papers. The topics discussed include: a truly implementation independent GUI development tool;ada, model railroading, and real-time software engineering education;building Tcl-Tk GUIs for HRT-HOOD systems;interfacing low-level C device drivers with Ada 95;experiences using Ada in a real-time and distributed;Ada+SQL - an overview;integrating a software engineering approach into an Ada closed laboratory;optimizing Ada on the fly;and predicting the future of computer systems and software engineering.
The JastAdd Extensible Java Compiler is a high quality Java that is easy to extend in order to build static analysis for Java, and to extend Java with new language constructs. built modularly, with a Java 1.4 compiler...
详细信息
Stream architecture is a novel microprocessor architecture with wide application potential. But as for whether it can be used efficiently in scientific computing, many issues await further study. This paper first give...
详细信息
ISBN:
(纸本)9781595937063
Stream architecture is a novel microprocessor architecture with wide application potential. But as for whether it can be used efficiently in scientific computing, many issues await further study. This paper first gives the design and implementation of a 64-bit stream processor, FT64 (Fei Teng 64), for scientific computing. The carrying out of 64-bit extension design and scientific computing oriented optimization are described in such aspects as instruction set architecture, stream controller, micro controller, ALU cluster, memory hierarchy and interconnection interface here. Second, two kinds of communications as message passing and stream communications are put forward. An interconnection based on the communications is designed for FT64-based high performance computers. Third, a novel stream programminglanguage, SF95 (Stream FORTRAN95), and its compiler, SF95Compiler (Stream FORTRAN95 Compiler), are developed to facilitate the development of scientific applications. Finally, nine typical scientific application kernels are tested and the results show the efficiency of stream architecture for scientific computing.
The proceedings contain 36 papers. The topics discussed include: optimizing memory transactions;compiler and runtime support for efficient software transactional memory;better extensibility through modular syntax;fast...
详细信息
ISBN:
(纸本)1595933743
The proceedings contain 36 papers. The topics discussed include: optimizing memory transactions;compiler and runtime support for efficient software transactional memory;better extensibility through modular syntax;fast and flexible instruction selection with on-demand tree-parsing automata;a framework for unrestricted whole-program optimization;practical dynamic software updating for C;an experimental analysis of self-adjusting computation;shared memory programming for large scale machines;optimizing data permutations for SIMD devices;auto-vectorization of interleaved data for SIMD;pruning dynamic slices with confidence;context-sensitive domain-independent algorithm composition and selection;reducing NoC energy consumption through compiler-directed channel voltage scaling;a global progressive register allocator;and automatic instruction scheduler retargeting by reverse-engineering.
The proceedings contain 29 papers. The topic discussed include: a serializability violation detector for shared-memory server programs;path slicing;checking type safety of foreign function calls;permission-based owner...
详细信息
The proceedings contain 29 papers. The topic discussed include: a serializability violation detector for shared-memory server programs;path slicing;checking type safety of foreign function calls;permission-based ownership: encapsulating state in higher-order typed languages;code placement for improving dynamic branch prediction accuracy;garbage collection without paging;register allocation for software pipelined multi-dimensional loops;automatically partitioning packet processing applications for pipelined architectures;programming ad-hoc networks of mobile and resource-constrained devices;composing security policies with polymer;and formal loop merging for signal transforms.
We present a novel technique for static race detection in Java programs, comprised of a series of stages that employ a combination of static analyses to successively reduce the pairs of memory accesses potentially inv...
详细信息
Atomos is the first programminglanguage with implicit transactions, strong atomicity, and a scalable multiprocessor implementation. Atomos is derived from Java, but replaces its synchronization and conditional wailin...
详细信息
暂无评论