Path Qualified Data Flow Problems
Program analysis usually computes a meet over all paths solution to a data flow problem. Recent program measurements show that programs actually execute few paths and spend most of their time in a very small subset of ``hot paths''. This paper presents a new technique to refine a data flow problem by computing more precise solutions for hot paths. Our technique selectively duplicates paths before analysis and afterwards eliminates the copies that are unnecessary or unprofitable. On SPEC95 benchmarks, application of our algorithm to constant propagation identified 0--11\% more constants than standard conditional constant propagation with only a small increase in the size of programs' CFGs.
Fun with C++ templates
The template mechanism in C++ was introduced to support generic programming. However, template instantiation requires the C++ compiler to perform \fItype inference\fP. An "unexpected" consequence of this type inference mechanism is that templates become a very powerful \fIcompile-time\fP language that C++ programmers can make use of.
In this talk, I will provide a brief overview of some of these template-based mechanisms, namely, \fItemplate specialization\fP, \fIexpression templates\fP, and \fItemplate metaprograms\fP, and show how they can be used to write interesting C++ programs. .pp The talk should be accessible to anyone with a minimal knowledge of C++.
Comparing Static and Dynamic Optimizations for Object-Oriented Languages
Programs written in dynamically typed object-oriented languages are characterized by a large number of mostly small procedures as well as frequent procedure calls many of which are dynamically dispatched i.e., the destination of the call is not known till runtime. This creates a performance bottleneck since compilers now have a much smaller scope to perform intraprocedural optimizations and they usually do not have enough information to optimize dynamically dispatched calls.
Researchers have experimented with various analysis and optimization techniques to solve these problems. These techniques can be roughly classified as being static (compile-time) or dynamic (run-time) in nature. I will present an overview and comparison of these techniques, which have been implemented in compilers for Self, Cecil, C++ and Java.
Partial Evaluation: Principles and Practice
Partial evaluation specializes a program with respect to a part of its input. It has been used to speed up applications such as pattern matching, computer graphics, database queries, and parsing. More recently, people have started to study partial evaluation for imperative programming languages like C, and have demonstrated potential uses of partial evaluation to speedup "real" systems such as an operating system.
In this talk, I will first describe the basics of partial evaluation. Then I will briefly describe a work by Francois Noel et al at the University of Rennes that uses partial evaluation to conduct run-time specialization for programs written in C. After that, I will describe an approach called optimistic incremental specialization used in the OGI Synthetix operating system which significantly speeds up the representative Unix system call read. Finally, if time permits, I will briefly describe the idea of program adaptation based on program transformation proposed by Charles Consel in which partial evaluation is one of the major tools.
Software Engineering
The goal of this talk is to give an overview of the field of software engineering. I will start off by addressing the following questions:
I will then talk about a couple of software development models. After this, I will discuss in some detail the different steps of the software engineering process: techniques for identifying and specifying requirements, software design methodologies, the implementation process, software testing and verification strategies, software maintenance, project planning and management.