Results 1  10
of
28
Concrete Type Inference: Delivering ObjectOriented Applications
, 1995
"... Unlimited copying without fee is permitted provided that the copies are not made nor distributed for direct commercial advantage, and credit to the source is given. Otherwise, no part of this work covered by copyright hereon may be reproduced in any form or by any means graphic, electronic, or mecha ..."
Abstract

Cited by 52 (0 self)
 Add to MetaCart
Unlimited copying without fee is permitted provided that the copies are not made nor distributed for direct commercial advantage, and credit to the source is given. Otherwise, no part of this work covered by copyright hereon may be reproduced in any form or by any means graphic, electronic, or mechanical, including photocopying, recording, taping, or storage in an information retrieval system, without the prior written permission of the copyright owner. TRADEMARKS Sun, Sun Microsystems, and the Sun logo are trademarks or registered trademarks of Sun Microsystems, Inc. UNIX is a registered trademark in the United States and other countries, exclusively licensed through X/Open Company, Ltd. All SPARC trademarks, including the SCD Compliant Logo, are trademarks or registered trademarks of SPARC International, Inc. SPARCstation, SPARCserver, SPARCengine, SPARCworks, and SPARCompiler are licensed exclusively to Sun Microsystems, Inc. All other product names mentioned herein are the trademarks of their respective owners.
Dynamic Ordered Sets with Exponential Search Trees
 Combination of results presented in FOCS 1996, STOC 2000 and SODA
, 2001
"... We introduce exponential search trees as a novel technique for converting static polynomial space search structures for ordered sets into fullydynamic linear space data structures. This leads to an optimal bound of O ( √ log n/log log n) for searching and updating a dynamic set of n integer keys i ..."
Abstract

Cited by 26 (1 self)
 Add to MetaCart
We introduce exponential search trees as a novel technique for converting static polynomial space search structures for ordered sets into fullydynamic linear space data structures. This leads to an optimal bound of O ( √ log n/log log n) for searching and updating a dynamic set of n integer keys in linear space. Here searching an integer y means finding the maximum key in the set which is smaller than or equal to y. This problem is equivalent to the standard text book problem of maintaining an ordered set (see, e.g., Cormen, Leiserson, Rivest, and Stein: Introduction to Algorithms, 2nd ed., MIT Press, 2001). The best previous deterministic linear space bound was O(log n/log log n) due Fredman and Willard from STOC 1990. No better deterministic search bound was known using polynomial space.
A case study of C source code verification: the SchorrWaite algorithm
 In 3rd IEEE Intl. Conf. SEFM’05
, 2005
"... We describe an experiment of formal verification of C source code, using the CADUCEUS tool. We performed a full formal proof of the classical SchorrWaite graphmarking algorithm, which has already been used several times as a case study for formal reasoning on pointer programs. Our study is origina ..."
Abstract

Cited by 13 (0 self)
 Add to MetaCart
We describe an experiment of formal verification of C source code, using the CADUCEUS tool. We performed a full formal proof of the classical SchorrWaite graphmarking algorithm, which has already been used several times as a case study for formal reasoning on pointer programs. Our study is original with respect to previous experiments for several reasons. First, we use a generalpurpose tool for C programs: we start from a real source code written in C, specified using an annotation language for arbitrary C programs. Second, we use several theorem provers as backends, both automatic and interactive. Third, we indeed formally establish more properties of the algorithm than previous works, in particular a formal proof of termination is made 1. Keywords: Formal verification, FloydHoare logic, Pointer programs, Aliasing, C programming language. The SchorrWaite algorithm is the first moutain that any formalism for pointer aliasing should climb. — Richard Bornat ([4], page 121) 1.
Optimally Profiling and Tracing
 In Proceedings of the Conference on Principles of Programming Languages
, 1992
"... This paper describes algorithms for inserting monitoring code to profile and trace programs. These algorithms greatly reduce the cost of measuring programs with respect to the commonly used technique of placing code in each basic block. Program profiling counts the number of times each basic block i ..."
Abstract

Cited by 12 (0 self)
 Add to MetaCart
This paper describes algorithms for inserting monitoring code to profile and trace programs. These algorithms greatly reduce the cost of measuring programs with respect to the commonly used technique of placing code in each basic block. Program profiling counts the number of times each basic block in a program executes. Instruction tracing records the sequence of basic blocks traversed in a program execution. The algorithms optimize the placement of counting/tracing code with respect to the expected or measured frequency of each block or edge in a program’s controlflow graph. We have implemented the algorithms in a profiling/tracing tool, and they substantially reduce the overhead of profiling and tracing. We also define and study the hierarchy of profiling problems. These problems have two dimensions: what is profiled (i.e., vertices (basic blocks) or edges in a controlflow graph) and where the instrumentation code is placed (in blocks or along edges). We compare the optimal solutions to the profiling problems and describe a new profiling problem: basicblock profiling with edge counters. This problem is important because an optimal solution to any other profiling problem (for a given controlflow graph) is never better than an optimal solution to this problem. Unfortunately, finding an optimal placement of edge counters for vertex profiling appears to be a
String hashing for linear probing
 In Proc. 20th SODA
, 2009
"... Linear probing is one of the most popular implementations of dynamic hash tables storing all keys in a single array. When we get a key, we first hash it to a location. Next we probe consecutive locations until the key or an empty location is found. At STOC’07, Pagh et al. presented data sets where t ..."
Abstract

Cited by 8 (3 self)
 Add to MetaCart
Linear probing is one of the most popular implementations of dynamic hash tables storing all keys in a single array. When we get a key, we first hash it to a location. Next we probe consecutive locations until the key or an empty location is found. At STOC’07, Pagh et al. presented data sets where the standard implementation of 2universal hashing leads to an expected number of Ω(log n) probes. They also showed that with 5universal hashing, the expected number of probes is constant. Unfortunately, we do not have 5universal hashing for, say, variable length strings. When we want to do such complex hashing from a complex domain, the generic standard solution is that we first do collision free hashing (w.h.p.) into a simpler intermediate domain, and second do the complicated hash function on this intermediate domain. Our contribution is that for an expected constant number of linear probes, it is suffices that each key has O(1) expected collisions with the first hash function, as long as the second hash function is 5universal. This means that the intermediate domain can be n times smaller, and such a smaller intermediate domain typically means that the overall hash function can be made simpler and at least twice as fast. The same doubling of hashing speed for O(1) expected probes follows for most domains bigger than 32bit integers, e.g., 64bit integers and fixed length strings. In addition, we study how the overhead from linear probing diminishes as the array gets larger, and what happens if strings are stored directly as intervals of the array. These cases were not considered by Pagh et al. 1
Dependency Analysis for Standard ML
 ACM Transactions on Programming Languages and Systems
, 1998
"... Automatic dependency analysis is a useful addition to a system like CM, our compilation manager for Standard ML of New Jersey. It relieves the programmer from the tedious and errorprone task of having to specify compilation dependencies by hand and thereby makes its usage more userfriendly. But de ..."
Abstract

Cited by 7 (2 self)
 Add to MetaCart
Automatic dependency analysis is a useful addition to a system like CM, our compilation manager for Standard ML of New Jersey. It relieves the programmer from the tedious and errorprone task of having to specify compilation dependencies by hand and thereby makes its usage more userfriendly. But dependency analysis is not easy as the general problem for Standard ML is NPcomplete. Therefore, CM has to impose certain restrictions on the programming language to recover tractability. We prove the NPcompleteness result, discuss the restrictions on ML that are used by CM, and provide the resulting analysis algorithms. 1 Introduction For programs written in Standard ML [MTH90, MTHM97], the order of compilation matters. But the task of maintaining order within collections of sources can be tedious. Therefore, CM [Blu95], the compilation manager for Standard ML of New Jersey [AM91], o#ers automatic dependency analysis. CM provides a language for specifying the semantic structure of large pr...
The Static and Dynamic Semantics of C
, 2000
"... Montages are a semivisual formalism for defining the static and dynamic semantics of a programming language using Gurevich's Abstract State Machines (ASMs). We describe an application of Montages to describe the static and dynamic semantics of the C programming language. ..."
Abstract

Cited by 5 (0 self)
 Add to MetaCart
Montages are a semivisual formalism for defining the static and dynamic semantics of a programming language using Gurevich's Abstract State Machines (ASMs). We describe an application of Montages to describe the static and dynamic semantics of the C programming language.
A Survey of Basic Issues of Parallel Execution on a Distributed System
 School of Computing and Mathematics, Deakin Universtiy
, 1995
"... This report examines the basic issues involved in implementing parallel execution in a distributed computational environment. The study was carried out by considering our claim that both a compiler should be directly involved in detecting processes of a program to run in parallel on a distributed sy ..."
Abstract

Cited by 2 (1 self)
 Add to MetaCart
This report examines the basic issues involved in implementing parallel execution in a distributed computational environment. The study was carried out by considering our claim that both a compiler should be directly involved in detecting processes of a program to run in parallel on a distributed system, and that a distributing operating system, in particular global scheduling should provide a support for such parallel execution. For this purpose, first of all the issues of parallelism of a program’s processes has been examined. Issues such as the granularity of parallelism, use of parallelism, the generality of parallelism and the programmer’s actions when writing parallel programs have been addressed. Possible future developments are then presented. Following this a support for parallel execution in distributed systems has also been discussed. In particular the issues of interprocess communication, process synchronisation, memory management, process management including global scheduling, reliability and distributed applications have been addressed. This report concludes with the major issues that need to be studied and implemented in future compilers and distributed operating system to allow transparent distributed processing to occur, and the benefits of such systems. Page 1 1
The triVM intermediate language reference manual
, 2002
"... this report . . . . . . . . . . . . . . . . . . . . . . . 7 2 The triVM Virtual Machine 9 2.1 Virtual Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2 Condition Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3 Memory Hierarchy . . . . . . . . . . . . . . . . . ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
this report . . . . . . . . . . . . . . . . . . . . . . . 7 2 The triVM Virtual Machine 9 2.1 Virtual Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.2 Condition Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3 Memory Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.4 Addressing Modes . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.5 Procedure Calling Mechanism . . . . . . . . . . . . . . . . . . . . 13 3 Number Formats and Data Storage 16 3.1 Integer Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2 Floating Point Numbers . . . . . . . . . . . . . . . . . . . . . . . 17 3.3 Accessing Multibyte Data . . . . . . . . . . . . . . . . . . . . . . 17 4 Single Assignment Behaviour 19 4.1 Conversion into SSA Form . . . . . . . . . . . . . . . . . . . . . . 19 4.2 Variable Renaming . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.3 Control Flow and PhiFunctions . . . . . . . . . . . . . . . . . . 20 5 Intermediate Language Directives 22 5.1 Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.2 Structural Directives . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.3 Data Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.4 Complete Scoping Example . . . . . . . . . . . . . . . . . . . . . 24 5.5 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 6 The Virtual Instruction Set 27 6.1 Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 6.2 add  integer add . . . . . . . . . . . . . . . . . . . . . . . . . . 29 6.3 and  bitwise AND . . . . . . . . . . . . . . . . . . . . . . . . . 30 6.4 asr  arithmetic shift right . . . . . . . . . . . . . . . . . . . . . 31 6.5 bae  branch if...
Analyzing the Effect of Preprocessor Annotations on Code Clones
"... The C preprocessor cpp is a powerful and languageindependent tool, widely used to implement variable software in different programming languages (C, C++) using conditional compilation. Preprocessor annotations can used on different levels of granularity such as functions or statements. In this pape ..."
Abstract

Cited by 1 (1 self)
 Add to MetaCart
The C preprocessor cpp is a powerful and languageindependent tool, widely used to implement variable software in different programming languages (C, C++) using conditional compilation. Preprocessor annotations can used on different levels of granularity such as functions or statements. In this paper, we investigate whether there is a relation between code clones and preprocessor annotations. Specifically, we address the question whether the discipline of annotation has an effect on code clones. To this end, we perform a case study on fifteen different C programs and analyze them regarding code clones and #ifdef occurrences. We found only minor effects of annotations on code clones, but a relationship between annotations that align with the code structure (and code clones). With this work, we provide new insights why code clones occur in C programs. Furthermore, the results can support the decision whether or not it is beneficial to remove clones. 1.