Results 1  10
of
37
Program Analysis and Specialization for the C Programming Language
, 1994
"... Software engineers are faced with a dilemma. They want to write general and wellstructured programs that are flexible and easy to maintain. On the other hand, generality has a price: efficiency. A specialized program solving a particular problem is often significantly faster than a general program. ..."
Abstract

Cited by 535 (0 self)
 Add to MetaCart
Software engineers are faced with a dilemma. They want to write general and wellstructured programs that are flexible and easy to maintain. On the other hand, generality has a price: efficiency. A specialized program solving a particular problem is often significantly faster than a general program. However, the development of specialized software is timeconsuming, and is likely to exceed the production of today’s programmers. New techniques are required to solve this socalled software crisis. Partial evaluation is a program specialization technique that reconciles the benefits of generality with efficiency. This thesis presents an automatic partial evaluator for the Ansi C programming language. The content of this thesis is analysis and transformation of C programs. We develop several analyses that support the transformation of a program into its generating extension. A generating extension is a program that produces specialized programs when executed on parts of the input. The thesis contains the following main results.
MetaML and MultiStage Programming with Explicit Annotations
 Theoretical Computer Science
, 1999
"... . We introduce MetaML, a practicallymotivated, staticallytyped multistage programming language. MetaML is a "real" language. We have built an implementation and used it to solve multistage problems. MetaML allows the programmer to construct, combine, and execute code fragments in a ..."
Abstract

Cited by 242 (30 self)
 Add to MetaCart
. We introduce MetaML, a practicallymotivated, staticallytyped multistage programming language. MetaML is a "real" language. We have built an implementation and used it to solve multistage problems. MetaML allows the programmer to construct, combine, and execute code fragments in a typesafe manner. Code fragments can contain free variables, but they obey the staticscoping principle. MetaML performs typechecking for all stages once and for all before the execution of the first stage. Certain anomalies with our first MetaML implementation led us to formalize an illustrative subset of the MetaML implementation. We present both a bigstep semantics and type system for this subset, and prove the type system's soundness with respect to a bigstep semantics. From a software engineering point of view, this means that generators written in the MetaML subset never generate unsafe programs. A type system and semantics for full MetaML is still ongoing work. We argue that multi...
Accurate BindingTime Analysis For Imperative Languages: Flow, Context, and Return Sensitivity
"... Since a bindingtime analysis determines how an offline partial evaluator will specialize a program, the accuracy of the bindingtime information directly determines the degree of specialization. We have designed and implemented a bindingtime analysis for an imperative language, and integrated it ..."
Abstract

Cited by 37 (4 self)
 Add to MetaCart
Since a bindingtime analysis determines how an offline partial evaluator will specialize a program, the accuracy of the bindingtime information directly determines the degree of specialization. We have designed and implemented a bindingtime analysis for an imperative language, and integrated it into our partial evaluator for C, called Tempo [11]. This bindingtime analysis includes a number of new features, not available in any existing partial evaluator for an imperative language, which are critical when specializing existing programs such as operating system components [27,28]. ffl Flow sensitivity. A different bindingtime description is computed for each program point, allowing the same variable to be considered static at one program point and dynamic at another. ffl Context sensitivity. Each function call is analyzed with the context of the call site, generating multiple bindingtime annotated instances of the same function definition. ffl Return sensitivity. A different bi...
Type and effect systems
 ACM Computing Surveys
, 1999
"... Abstract. The design and implementation of a correct system can benefit from employing static techniques for ensuring that the dynamic behaviour satisfies the specification. Many programming languages incorporate types for ensuring that certain operations are only applied to data of the appropriate ..."
Abstract

Cited by 37 (0 self)
 Add to MetaCart
Abstract. The design and implementation of a correct system can benefit from employing static techniques for ensuring that the dynamic behaviour satisfies the specification. Many programming languages incorporate types for ensuring that certain operations are only applied to data of the appropriate form. A natural extension of type checking techniques is to enrich the types with annotations and effects that further describe intensional aspects of the dynamic behaviour.
Polymorphic Recursion and Subtype Qualifications: Polymorphic BindingTime Analysis in Polynomial Time
 Static Analysis, Second International Symposium, number 983 in Lecture
"... Abstract. The combination of parameter polymorphism, subtyping extended to qualified and polymorphic types, and polymorphic recursion is useful in standard type inference and gives expressive typebased program analyses, but raises difficult algorithmic problems. In a program analysis context we sho ..."
Abstract

Cited by 25 (1 self)
 Add to MetaCart
Abstract. The combination of parameter polymorphism, subtyping extended to qualified and polymorphic types, and polymorphic recursion is useful in standard type inference and gives expressive typebased program analyses, but raises difficult algorithmic problems. In a program analysis context we show how Mycroft’s iterative method of computing principal types for a type system with polymorphic recursion can be generalized and adapted to work in a setting with subtyping. This does not only yield a proof of existence of principal types (most general properties), but also an algorithm for computing them. The punchline of the development is that a very simple modification of the basic algorithm reduces its computational complexity from exponential time to polynomial time relative to the size of the given, explicitly typed program. This solves the open problem of finding an inference algorithm for polymorphic bindingtime analysis [7]. 1
Optimal Representations of Polymorphic Types with Subtyping (Extended Abstract)
 IN PROCEEDINGS TACS'97 THEORETICAL ASPECTS OF COMPUTER SOFTWARE
, 1997
"... Many type inference and program analysis systems include notions of subtyping and parametric polymorphism. When used together, these two features induce equivalences that allow types to be simplified by eliminating quantified variables. Eliminating variables both improves the readability of types an ..."
Abstract

Cited by 19 (3 self)
 Add to MetaCart
Many type inference and program analysis systems include notions of subtyping and parametric polymorphism. When used together, these two features induce equivalences that allow types to be simplified by eliminating quantified variables. Eliminating variables both improves the readability of types and the performance of algorithms whose complexity depends on the number of type variables. We present an algorithm for simplifying quantified types in the presence of subtyping and prove it is sound and complete for nonrecursive and recursive types.
A Categorical Account of TwoLevel Languages
 In MFPS
, 1997
"... We give an account of twolevel languages in terms of indexed categories and universal properties wellknown in the context of categorical logic. This account provides three important insights: establishes precise analogies between twolevel languages and module languages, explains the twolevel lan ..."
Abstract

Cited by 18 (4 self)
 Add to MetaCart
We give an account of twolevel languages in terms of indexed categories and universal properties wellknown in the context of categorical logic. This account provides three important insights: establishes precise analogies between twolevel languages and module languages, explains the twolevel languages used in partial evaluation (see [7]) in terms of those used for code generation (see [16]), suggests extensions that should be valuable for typespecialization (see [9]) and shapeanalysis (see [1]).
A Hybrid Approach to Online and Offline Partial Evaluation
 HigherOrder and Symbolic Computation
, 2002
"... This article presents a hybrid method of partial evaluation (PE), which is exactly as precise as naive online PE and nearly as efficient as stateoftheart offline PE, for a statically typed callbyvalue functional language. ..."
Abstract

Cited by 16 (0 self)
 Add to MetaCart
This article presents a hybrid method of partial evaluation (PE), which is exactly as precise as naive online PE and nearly as efficient as stateoftheart offline PE, for a statically typed callbyvalue functional language.
TypeDirected Flow Analysis for Typed Intermediate Languages
 In Proc. 4th Int’l Static Analysis Symp
, 1997
"... . Flow analysis is especially valuable for optimizing functional languages because controlflow information is not syntactically apparent in higherorder programs. Flow analyses typically operate on untyped languages. However, recent compilers for typed functional languages such as ML and Haskell us ..."
Abstract

Cited by 16 (2 self)
 Add to MetaCart
. Flow analysis is especially valuable for optimizing functional languages because controlflow information is not syntactically apparent in higherorder programs. Flow analyses typically operate on untyped languages. However, recent compilers for typed functional languages such as ML and Haskell use a typed intermediate language to expose data representations for optimization. This paper presents a polyvariant flow analysis framework for the predicative subset of system F , a common basis for typed intermediate languages. Analyses in this framework can take advantage of types to analyze programs more precisely. We study a specific analysis called SRT that uses types to control polyvariance. We prove that SRT respects types: whenever it assigns abstract value v to a variable and the type system assigns type oe to the same variable, then [[v]] ` [[oe]], where [[ \Delta ]] denotes a set of values. SRT does not terminate for some programs. We present several variants of SRT that are bett...
Inference of Polymorphic and Conditional Strictness Properties
 IN CONF. REC. POPL ’98: 25TH ACM SYMP. PRINC. OF PROG. LANGS
, 1998
"... We define an inference system for modular strictness analysis of functional programs by extending a conjunctive strictness logic with polymorphic and conditional properties. This extended set of properties is used to define a syntaxdirected, polymorphic strictness analysis based on polymorphic recu ..."
Abstract

Cited by 16 (0 self)
 Add to MetaCart
We define an inference system for modular strictness analysis of functional programs by extending a conjunctive strictness logic with polymorphic and conditional properties. This extended set of properties is used to define a syntaxdirected, polymorphic strictness analysis based on polymorphic recursion whose soundness is established via a translation from the polymorphic system into the conjunctive system. From the polymorphic analysis, an inference algorithm based on constraint resolution is derived and shown complete for variant of the polymorphic analysis. The algorithm deduces at the same time a property and a set of hypotheses on the free variables of an expression which makes it suitable for analysis of program with module structure.