Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Manuel Fähndrich

dblp:f/ManuelFahndrich · DBLP profile ↗
← Back
43ranked-venue papers
12as first author
0since 2021 · last 2015
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 37 · 10 first-authorHuman-computer interaction and ubiquitous computing · 3Systems, architecture and hardware · 2 · 1 first-authorTheory of computation · 1 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
19 papers
Program analysis · 31% Programming languages and type systems · 30% Program verification · 17%
Network and information security
4 papers
Systems and software security · 74% Usable security · 26%
Human-computer interaction and pervasive computing
2 papers
User interface design and tools · 68% Interaction techniques and input · 32%

Topics — the 30 heaviest of 44, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program analysis
static analysis
0.242012
Safer unsafe code for .NET · OOPSLA 2008
User-aware privacy control via extended static-information-flow analysis · ASE 2012
Declaring and checking non-null types in an object-oriented language · OOPSLA 2003
Program verification
static verification
0.212014
Verification modulo versions: towards usable verification · PLDI 2014
Programming languages and type systems
type systems
0.242007
Establishing object invariants with delayed types · OOPSLA 2007
Declaring and checking non-null types in an object-oriented language · OOPSLA 2003
Type-base flow analysis: from polymorphic subtyping to CFL-reachability · POPL 2001
Program analysis
dynamic analysis
0.212013
Abstracting Runtime Heaps for Program Understanding · IEEE Trans. Software Eng. 2013
Programming languages and type systems › programming environment
live programming
0.212013
It's alive! continuous feedback in UI programming · PLDI 2013
Systems and software security › information flow control
information flow analysis
0.112012
User-aware privacy control via extended static-information-flow analysis · ASE 2012
Usable security
privacy control
0.112012
User-aware privacy control via extended static-information-flow analysis · ASE 2012
Programming languages and type systems
language design
0.112012
TouchDevelop: app development on mobile devices · SIGSOFT FSE 2012
Operating systems › system security › operating system security › protection mechanism › isolation
process isolation
0.122007
Sealing OS processes to improve dependability and safety · EuroSys 2007
Language support for fast and reliable message-based communication in singularity OS · EuroSys 2006
Runtime systems and virtual machines › dynamic compilation
just-in-time compilation
0.112010
SPUR: a trace-based JIT compiler for CIL · OOPSLA 2010
Runtime systems and virtual machines › dynamic compilation › just-in-time compilation
trace-based compilation
0.112010
SPUR: a trace-based JIT compiler for CIL · OOPSLA 2010
Systems and software security
operating system security
0.122007
Sealing OS processes to improve dependability and safety · EuroSys 2007
Enforcing High-Level Protocols in Low-Level Software · PLDI 2001
Systems and software security
memory safety
0.112008
Safer unsafe code for .NET · OOPSLA 2008
Systems and software security › memory safety
unsafe code verification
0.112008
Safer unsafe code for .NET · OOPSLA 2008
Program analysis › static analysis
abstract interpretation
0.112008
Safer unsafe code for .NET · OOPSLA 2008
Program verification › security property verification
memory safety verification
0.112008
Safer unsafe code for .NET · OOPSLA 2008
Programming languages and type systems › type systems
object initialization
0.112007
Establishing object invariants with delayed types · OOPSLA 2007
Program verification › code-level verification › object-oriented verification
object invariants
0.112007
Establishing object invariants with delayed types · OOPSLA 2007
Program verification › equivalence checking
regression verification
0.112014
Verification modulo versions: towards usable verification · PLDI 2014
Software maintenance and evolution › software configuration management
version control
0.112014
Verification modulo versions: towards usable verification · PLDI 2014
User interface design and tools
user interface programming
0.012013
It's alive! continuous feedback in UI programming · PLDI 2013
Software maintenance and evolution
program comprehension
0.012013
Abstracting Runtime Heaps for Program Understanding · IEEE Trans. Software Eng. 2013
Interaction techniques and input
touch interaction
0.012012
TouchDevelop: app development on mobile devices · SIGSOFT FSE 2012
Programming languages and type systems › type systems › substructural type systems
linear types
0.012002
Adoption and Focus: Practical Linear Types for Imperative Programming · PLDI 2002
Runtime systems and virtual machines
managed runtime
0.012010
SPUR: a trace-based JIT compiler for CIL · OOPSLA 2010
Program analysis
flow analysis
0.012001
Type-base flow analysis: from polymorphic subtyping to CFL-reachability · POPL 2001
Programming languages and type systems › information flow control
type-based flow analysis
0.012001
Type-base flow analysis: from polymorphic subtyping to CFL-reachability · POPL 2001
Automata and formal languages › context-free languages
context-free language reachability
0.012001
Type-base flow analysis: from polymorphic subtyping to CFL-reachability · POPL 2001
Graph algorithms and graph theory
graph algorithms
0.012001
Type-base flow analysis: from polymorphic subtyping to CFL-reachability · POPL 2001
Program analysis › data flow analysis
context-sensitive dataflow analysis
0.012000
Scalable context-sensitive flow analysis using instantiation constraints · PLDI 2000

Methods — techniques the papers use, named apart from their topics

continuous feedback · 0.3tamper analysis · 0.3static information flow analysis · 0.3static analysis · 0.2semantic environment condition inference · 0.2model merging and comparison · 0.2heap dump transformation · 0.2abstract interpretation · 0.2trace recording · 0.1machine code specialization · 0.1numerical abstract domains · 0.1sealing · 0.1static enforcement · 0.0context-free language reachability · 0.0
YearPublicationVenuePosition
2015 Global Sequence Protocol: A Robust Abstraction for Replicated Shared State
abstract
In the age of cloud-connected mobile devices, users want responsive apps that read and write shared data everywhere, at all times, even if network connections are slow or unavailable. The solution is to replicate data and propagate updates asynchronously. Unfortunately, such mechanisms are notoriously difficult to understand, explain, and implement. To address these challenges, we present GSP (global sequence protocol), an operational model for replicated shared data. GSP is simple and abstract enough to serve as a mental reference model, and offers fine control over the asynchronous update propagation (update transactions, strong synchronization). It abstracts the data model and thus applies both to simple key-value stores, and complex structured data. We then show how to implement GSP robustly on a client-server architecture (masking silent client crashes, server crash-recovery failures, and arbitrary network failures) and efficiently (transmitting and storing minimal information by reducing update sequences).
Sebastian Burckhardt, Daan Leijen, Jonathan Protzenko, Manuel Fähndrich
ECOOP4
2015 User-aware privacy control via extended static-information-flow analysis
Xusheng Xiao, Nikolai Tillmann, Manuel Fähndrich, Jonathan de Halleux, Michal Moskal, Tao Xie 0001
Autom. Softw. Eng.3
2014 Lessons from a web-based IDE and runtime
abstract
At Microsoft Research, we have built a purely web-based IDE called TouchDevelop that enables anyone to pick up a device and start programming. The IDE is geared towards touch based devices without keyboards, ranging from phones, over tablets, to large display screens. Programs can be edited and run on the device without an auxiliary PC. Transitioning between programming on one device, and continuing on another device is seamless. The web application also works offline.
Manuel Fähndrich
PEPM1
2014 Verification modulo versions: towards usable verification
abstract
We introduce Verification Modulo Versions (VMV), a new static analysis technique for reducing the number of alarms reported by static verifiers while providing sound semantic guarantees. First, VMV extracts semantic environment conditions from a base program P. Environmental conditions can either be sufficient conditions (implying the safety of P) or necessary conditions (implied by the safety of P). Then, VMV instruments a new version of the program, P', with the inferred conditions. We prove that we can use (i) sufficient conditions to identify abstract regressions of P' w.r.t. P; and (ii) necessary conditions to prove the relative correctness of P' w.r.t. P. We show that the extraction of environmental conditions can be performed at a hierarchy of abstraction levels (history, state, or call conditions) with each subsequent level requiring a less sophisticated matching of the syntactic changes between P' and P. Call conditions are particularly useful because they only require the syntactic matching of entry points and callee names across program versions. We have implemented VMV in a widely used static analysis and verification tool. We report our experience on two large code bases and demonstrate a substantial reduction in alarms while additionally providing relative correctness guarantees.
Francesco Logozzo, Shuvendu K. Lahiri, Manuel Fähndrich, Sam Blackshear
PLDI3
2013 It's alive! continuous feedback in UI programming
abstract
Live programming allows programmers to edit the code of a running program and immediately see the effect of the code changes. This tightening of the traditional edit-compile-run cycle reduces the cognitive gap between program code and execution, improving the learning experience of beginning programmers while boosting the productivity of seasoned ones. Unfortunately, live programming is difficult to realize in practice as imperative languages lack well-defined abstraction boundaries that make live programming responsive or its feedback comprehensible.
Sebastian Burckhardt, Manuel Fähndrich, Jonathan de Halleux, Sean McDirmid, Michal Moskal, Nikolai Tillmann, Jun Kato 0001
PLDI2
2013 Automatic Inference of Necessary Preconditions
Patrick Cousot, Radhia Cousot, Manuel Fähndrich, Francesco Logozzo
VMCAI3
2013 Abstracting Runtime Heaps for Program Understanding
abstract
Modern programming environments provide extensive support for inspecting, analyzing, and testing programs based on the algorithmic structure of a program. Unfortunately, support for inspecting and understanding runtime data structures during execution is typically much more limited. This paper provides a general purpose technique for abstracting and summarizing entire runtime heaps. We describe the abstract heap model and the associated algorithms for transforming a concrete heap dump into the corresponding abstract model as well as algorithms for merging, comparing, and computing changes between abstract models. The abstract model is designed to emphasize high-level concepts about heap-based data structures, such as shape and size, as well as relationships between heap structures, such as sharing and connectivity. We demonstrate the utility and computational tractability of the abstract heap model by building a memory profiler. We use this tool to identify, pinpoint, and correct sources of memory bloat for programs from DaCapo.
Mark Marron, César Sánchez 0001, Zhendong Su 0001, Manuel Fähndrich
IEEE Trans. Software Eng.4
2012 Inference of Necessary Field Conditions with Abstract Interpretation
Mehdi Bouaziz, Francesco Logozzo, Manuel Fähndrich
APLAS3
2012 Engage Your Students by Teaching Computer Science Using Only Mobile Devices with TouchDevelop
abstract
We are experiencing a technology shift: powerful and easy-to-use touchscreen-based mobile devices such as smartphones and tablets are becoming more prevalent than traditional PCs and laptops. Many mobile devices are going to be the first and, in less developed countries, possibly the only computing devices that virtually all people would own and carry with them at all times. We propose to reflect this new reality in how computer science is taught in the classroom. In this tutorial, participants will learn about developing software directly on smartphones without a PC using TouchDevelop on Windows Phone, a novel application-creation environment from Microsoft Research. Its typed, structured programming language is built around the idea of using only a touchscreen as the input device to author code. Easy access to the rich sensor and personal data available on a mobile device results in a fun and engaging programming experience for students.
Nikolai Tillmann, Michal Moskal, Jonathan de Halleux, Manuel Fähndrich, Tao Xie 0001
CSEE&T4
2012 Cloud Types for Eventual Consistency
Sebastian Burckhardt, Manuel Fähndrich, Daan Leijen, Benjamin P. Wood
ECOOP2
2012 Eventually Consistent Transactions
Sebastian Burckhardt, Daan Leijen, Manuel Fähndrich, Shmuel Sagiv
ESOP3
2012 The future of teaching programming is on mobile devices
abstract
From paper to computers, the way that we have been writing down thoughts and performing symbolic computations has been constantly evolving. Teaching methods closely follow this trend, leveraging existing technology to make teaching more effective and preparing students for their later careers with the available technology. Right now, in 2012, we are in the middle of another technology shift: instead of using PCs and laptops, mobile devices are becoming more prevalent for most everyday computing tasks. In fact, never before in human history were incredibly powerful and versatile computing devices such as smartphones available and adopted so broadly. We propose that computer programming, and thus the teaching of programming, can and should be done directly on the mobile devices themselves, without the need for a separate PC or laptop to write code. Programming on smartphones that we carry around with us at all times means instant gratification for students, as they can show their games and applications to their friends, and it means that students can do their homework or additional practicing at all times. We describe TouchDevelop, a novel mobile programming environment, and call out challenges that need to be overcome and opportunities that it creates.
Nikolai Tillmann, Michal Moskal, Jonathan de Halleux, Manuel Fähndrich, Judith Bishop, Arjmand Samuel, Tao Xie 0001
ITiCSE4
2012 User-aware privacy control via extended static-information-flow analysis
abstract
Applications in mobile-marketplaces may leak private user information without notification. Existing mobile platforms provide little information on how applications use private user data, making it difficult for experts to validate applications and for users to grant applications access to their private data. We propose a user-aware privacy control approach, which reveals how private information is used inside applications. We compute static information flows and classify them as safe/unsafe based on a tamper analysis that tracks whether private data is obscured before escaping through output channels. This flow information enables platforms to provide default settings that expose private data only for safe flows, thereby preserving privacy and minimizing decisions required from users. We built our approach into TouchDevelop, an application-creation environment that allows users to write scripts on mobile devices and install scripts published by other users. We evaluate our approach by studying 546 scripts published by 194 users.
Xusheng Xiao, Nikolai Tillmann, Manuel Fähndrich, Jonathan de Halleux, Michal Moskal
ASE3
2012 Engage your students by teaching programming using only mobile devices with TouchDevelop (abstract only)
abstract
We are experiencing a technology shift: Powerful and easy-to-use touchscreen-based mobile devices like smartphones and tablets are becoming more prevalent than traditional PCs and laptops. We propose that computer programming, and thus teaching of programming, can and should be done directly on the mobile devices themselves, without the need for a separate PC or laptop to write code. In this workshop, participants will learn about developing software directly on smartphones without a PC using TouchDevelop, a novel application creation environment on Windows Phone 7 from Microsoft Research (http://touchdevelop.com). Its typed, structured programming language is built around the idea of only using a touchscreen as the input device to author code. A semi-structured code editor makes it easy to navigate between different syntax elements. By inferring types and mining previously written programs, the editor provides highly predictive auto-completion suggestions to the user. The language provides built-in primitives that make it easy to access the rich sensor data available on a mobile device. Programming on mobile devices engages students in new ways, allowing them to access and manipulate programmatically their most personal digital data such as pictures, videos, and music. Programming on smartphones which we carry around with us at all times means instant gratification for students, as they can show their games and applications to their friends, and it means that students can do their homework or additional practicing at all times. For this workshop, a laptop is optional; Windows Phone 7 devices will be provided for exercises.
Nikolai Tillmann, Michal Moskal, Jonathan de Halleux, Manuel Fähndrich, Tao Xie 0001
SIGCSE4
2012 TouchDevelop: app development on mobile devices
abstract
Mobile devices are becoming the prevalent computing platform for most people. TouchDevelop is a new mobile development environment that enables anyone with a Windows Phone to create new apps directly on the smartphone, without a PC or a traditional keyboard. At the core is a new mobile programming language and editor that was designed with the touchscreen as the only input device in mind. Programs written in TouchDevelop can leverage all phone sensors such as GPS, cameras, accelerometer, gyroscope, and stored personal data such as contacts, songs, pictures. Thousands of programs have already been written and published with TouchDevelop.
Nikolai Tillmann, Michal Moskal, Jonathan de Halleux, Manuel Fähndrich, Sebastian Burckhardt
SIGSOFT FSE4
2011 Prettier concurrency: purely functional concurrent revisions
abstract
This article presents an extension to the work of Launchbury and Peyton-Jones on the ST monad. Using a novel model for concurrency, called concurrent revisions [3,5], we show how we can use concurrency together with imperative mutable variables, while still being able to safely convert such computations (in the Rev monad) into pure values again.
Daan Leijen, Manuel Fähndrich, Sebastian Burckhardt
Haskell2
2010 SPUR: a trace-based JIT compiler for CIL
abstract
Tracing just-in-time compilers (TJITs) determine frequently executed traces (hot paths and loops) in running programs and focus their optimization effort by emitting optimized machine code specialized to these traces. Prior work has established this strategy to be especially beneficial for dynamic languages such as JavaScript, where the TJIT interfaces with the interpreter and produces machine code from the JavaScript trace.
Michael Bebenita, Florian Brandner, Manuel Fähndrich, Francesco Logozzo, Wolfram Schulte, Nikolai Tillmann, Herman Venter
OOPSLA3
2010 Static Verification for Code Contracts
Manuel Fähndrich
SAS1
2010 Pentagons: A weakly relational abstract domain for the efficient validation of array accesses
Francesco Logozzo, Manuel Fähndrich
Sci. Comput. Program.2
2009 Inferring Dataflow Properties of User Defined Table Processors
Songtao Xia, Manuel Fähndrich, Francesco Logozzo
SAS2
2008 On the Relative Completeness of Bytecode Analysis Versus Source Code Analysis
Francesco Logozzo, Manuel Fähndrich
CC2
2008 Safer unsafe code for .NET
abstract
The.NET intermediate language (MSIL) allows expressing both statically verifiable memory and type safe code (typi-cally called managed), as well as unsafe code using direct pointer manipulations. Unsafe code can be expressed in C# by marking regions of code as unsafe. Writing unsafe code can be useful where the rules of managed code are too strict. The obvious drawback of unsafe code is that it opens the door to programming errors typical of C and C++, namely memory access errors such as buffer overruns. Worse, a sin-gle piece of unsafe code may corrupt memory and destabi-lize the entire runtime or allow attackers to compromise the security of the platform. We present a new static analysis based on abstract in-terpretation to check memory safety for unsafe code in the.NET framework. The core of the analysis is a new numeri-cal abstract domain, Strp, which is used to efficiently com-pute memory invariants. Strp is combined with lightweight abstract domains to raise the precision, yet achieving scala-bility. We implemented this analysis in Clousot, a generic static analyzer for.NET. In combination with contracts ex-pressed in FoxTrot, an MSIL based annotation language for.NET, our analysis provides static safety guarantees on memory accesses in unsafe code. We tested it on all the as-semblies of the.NET framework. We compare our results with those obtained using existing domains, showing how they are either too imprecise (e.g., Intervals or Octagons) or too expensive (Polyhedra) to be used in practice.
Pietro Ferrara 0001, Francesco Logozzo, Manuel Fähndrich
OOPSLA3
2008 Type-based flow analysis and context-free language reachability
abstract
We present a novel approach to computing the context-sensitive flow of values through procedures and data structures. Our approach combines and extends techniques from two seemingly disparate areas: polymorphic subtyping and interprocedural dataflow analysis based on context-free language reachability. The resulting technique offers several advantages over previous approaches: it works directly on higher-order programs; provides demand-driven interprocedural queries; and improves the asymptotic complexity of a known algorithm based on polymorphic subtyping fromO(n8) toO(n3) for computing all queries. For intra-procedural flow restricted to equivalence classes, our algorithm yields linear inter-procedural flow queries.
Manuel Fähndrich, Jakob Rehof
Math. Struct. Comput. Sci.1
2007 Sealing OS processes to improve dependability and safety
abstract
In most modern operating systems, a process is a hardware-protected abstraction for isolating code and data. This protection, however, is selective. Many common mechanisms---dynamic code loading, run-time code generation, shared memory, and intrusive system APIs---make the barrier between processes very permeable. This paper argues that this traditional open process architecture exacerbates the dependability and security weaknesses of modern systems.
Galen C. Hunt, Mark Aiken, Manuel Fähndrich, Chris Hawblitzel, Orion Hodson, James R. Larus, Steven Levi, Bjarne Steensgaard, David Tarditi, Ted Wobber
EuroSys3
2007 Establishing object invariants with delayed types
abstract
Mainstream object-oriented languages such as C# and Java provide an initialization model for objects that does not guarantee programmer controlled initialization of fields. Instead, all fields are initialized to default values (0 for scalars and null for non-scalars) on allocation. This is in stark contrast to functional languages, where all parts of an allocation are initialized to programmer-provided values. These choices have a direct impact on two main issues: 1) the prevalence of null in object oriented languages (and its general absence in functional languages), and 2) the ability to initialize circular data structures. This paper explores connections between these differing approaches and proposes a fresh look at initialization. Delayed types are introduced to express and formalize prevalent initialization patterns in object-oriented languages.
Manuel Fähndrich, Songtao Xia
OOPSLA1
2006 Language support for fast and reliable message-based communication in singularity OS
abstract
Message-based communication offers the potential benefits of providing stronger specification and cleaner separation between components. Compared with shared-memory interactions, message passing has the potential disadvantages of more expensive data exchange (no direct sharing) and more complicated programming.In this paper we report on the language, verification, and run-time system features that make messages practical as the sole means of communication between processes in the Singularity operating system. We show that using advanced programming language and verification techniques, it is possible to provide and enforce strong system-wide invariants that enable efficient communication and low-overhead software-based process isolation. Furthermore, specifications on communication channels help in detecting programmer mistakes early---namely at compile-time---thereby reducing the difficulty of the message-based programming model.The paper describes our communication invariants, the language and verification features that support them, as well as implementation details of the infrastructure. A number of benchmarks show the competitiveness of this approach.
Manuel Fähndrich, Mark Aiken, Chris Hawblitzel, Orion Hodson, Galen C. Hunt, James R. Larus, Steven Levi
EuroSys1
2006 Reflective program generation with patterns
abstract
Runtime reflection facilities, as present in Java and.NET, are powerful mechanisms for inspecting existing code and metadata, as well as generating new code and metadata on the fly. Such power does come at a high price though. The runtime reflection support in Java and.NET imposes a cost on all programs, whether they use reflection or not, simply by the necessity of keeping all metadata around and the inability to optimize code because of future possible code changes. A second—often overlooked—cost is the difficulty of writing correct reflection code to inspect or emit new metadata and code and the risk that the emitted code is not well-formed. In this paper we examine a subclass of problems that can be addressed using a simpler mechanism than runtime reflection, which we call compile-time reflection. We argue for a high-level construct called a transform that allows programmers to write inspection and generation code in a pattern matching and template style, avoiding at the same time the complexities of reflection APIs and providing the benefits of staged compilation in that the generated code and metadata is known to be well-formed and type safe ahead of time.
Manuel Fähndrich, Michael Carbin, James R. Larus
GPCE1
2004 Typestates for Objects
Robert DeLine, Manuel Fähndrich
ECOOP2
2003 Declaring and checking non-null types in an object-oriented language
abstract
Distinguishing non-null references from possibly-null references at the type level can detect null-related errors in object-oriented programs at compile-time. This paper gives a proposal for retrofitting a language such as C# or Java with non-null types. It addresses the central complications that arise in constructors, where declared non-null fields may not yet have been initialized, but the partially constructed object is already accessible. The paper reports experience with an implementation for annotating and checking null-related properties in C# programs.
Manuel Fähndrich, K. Rustan M. Leino
OOPSLA1
2002 Adoption and Focus: Practical Linear Types for Imperative Programming
abstract
A type system with linearity is useful for checking software protocols andresource management at compile time. Linearity provides powerful reasoning about state changes, but at the price of restrictions on aliasing. The hard division between linear and nonlinear types forces the programmer to make a trade-off between checking a protocol on an object and aliasing the object. Most onerous is the restriction that any type with a linear component must itself be linear. Because of this, checking a protocol on an object imposes aliasing restrictions on any data structure that directly or indirectly points to the object. We propose a new type system that reduces these restrictions with the adoption and focus constructs. Adoption safely allows a programmer to alias objects on which she is checking protocols, and focus allows the reverse. A programmer can alias data structures that point to linear objects and use focus for safe access to those objects. We discuss how we implemented these ideas in the Vault programming language.
Manuel Fähndrich, Robert DeLine
PLDI1
2001 Enforcing High-Level Protocols in Low-Level Software
abstract
The reliability of infrastructure software, such as operating sys-tems and web servers, is often hampered by the mismanagement of resources, such as memory and network connections. The Vault programming language allows a programmer to describe resource management protocols that the compiler can statically enforce. Such a protocol can specify that operations must be performed in a certain order and that certain operations must be performed before accessing a given data object. Furthermore, Vault enforces stati-cally that resources cannot be leaked. We validate the utility of our approach by enforcing protocols present in the interface between the Windows 2000 kernel and its device drivers. 1.
Robert DeLine, Manuel Fähndrich
PLDI2
2001 Type-base flow analysis: from polymorphic subtyping to CFL-reachability
abstract
We present a novel approach to scalable implementation of type-based flow analysis with polymorphic subtyping. Using a new presentation of polymorphic subytping with instantiation constraints, we are able to apply context-free language (CFL) reachability techniques to type-based flow analysis. We develop a CFL-based algorithm for computing flow-information in time O(n³), where n is the size of the typed program. The algorithm substantially improves upon the best previously known algorithm for flow analysis based on polymorphic subtyping with complexity O(n8). Our technique also yields the first demand-driven algorithm for polymorphic subtype-based flow-computation. It works directly on higher-order programs with structured data of finite type (unbounded data structures are incorporated via finite approximations), supports context-sensitive, global flow summariztion and includes polymorphic recursion.
Jakob Rehof, Manuel Fähndrich
POPL2
2001 Estimating the Impact of Scalable Pointer Analysis on Optimization
Manuvir Das, Ben Liblit, Manuel Fähndrich, Jakob Rehof
SAS3
2000 Scalable context-sensitive flow analysis using instantiation constraints
abstract
This paper shows that a type graph (obtained via polymorphic type inference) harbors explicit directional flow paths between functions. These flow paths arise from the instantiations of polymorphic types and correspond to call-return sequences in first-order programs. We show that flow information can be computed efficiently while considering only paths with well matched call-return sequences, even in the higher-order case. Furthermore, we present a practical algorithm for inferring type instantiation graphs and provide empirical evidence to the scalability of the presented techniques by applying them in the context of points-to analysis for C programs.
Manuel Fähndrich, Jakob Rehof, Manuvir Das
PLDI1
2000 Projection Merging: Reducing Redundancies in Inclusion Constraint Graphs
abstract
Inclusion-based program analyses are implemented by adding new edges to directed graphs. In most analyses, there are many different ways to add a transitive edge between two nodes, namely through each different path connecting the nodes. This path redundancy limits the scalability of these analyses. We present projection merging, a technique to reduce path redundancy. Combined with cycle elimination [7], projection merging achieves orders of magnitude speedup of analysis time on programs over that of using cycle elimination alone.
Zhendong Su 0001, Manuel Fähndrich, Alex Aiken
POPL2
2000 Polymorphic versus Monomorphic Flow-Insensitive Points-to Analysis for C
Jeffrey S. Foster, Manuel Fähndrich, Alex Aiken
SAS2
2000 Detecting races in Relay Ladder Logic programs
Alex Aiken, Manuel Fähndrich, Zhendong Su 0001
Int. J. Softw. Tools Technol. Transf.2
1999 A Theory of Type Qualifiers
abstract
We describe a framework for adding type qualifiers to a language. Type qualifiers encode a simple but highly useful form of subtyping. Our framework extends standard type rules to model the flow of qualifiers through a program, where each qualifier or set of qualifiers comes with additional rules that capture its semantics. Our framework allows types to be polymorphic in the type qualifiers. We present a const-inference system for C as an example application of the framework. We show that for a set of real C programs, many more consts can be used than are actually present in the original code.
Jeffrey S. Foster, Manuel Fähndrich, Alex Aiken
PLDI2
1998 Partial Online Cycle Elimination in Inclusion Constraint Graphs
abstract
Many program analyses are naturally formulated and implemented using inclusion constraints. We present new results on the scalable implementation of such analyses based on two insights: first, that online elimination of cyclic constraints yields orders-of-magnitude improvements in analysis time for large problems; second, that the choice of constraint representation affects the quality and efficiency of online cycle elimination. We present an analytical model that explains our design choices and show that the model's predictions match well with results from a substantial experiment.
Manuel Fähndrich, Jeffrey S. Foster, Zhendong Su 0001, Alex Aiken
PLDI1
1998 Detecting Races in Relay Ladder Logic Programs
Alex Aiken, Manuel Fähndrich, Zhendong Su 0001
TACAS2
1997 Statically Checkable Pattern Abstractions
abstract
Pattern abstractions increase the expressiveness of pattern matching, enabling the programmer to describe a broader class of regular forests with patterns. Furthermore, pattern abstractions support code reuse and code factoring, features that facilitate maintenance and evolution of code. Past research on pattern abstractions has generally ignored the aspect of compile-time checks for exhaustiveness and redundancy. In this paper we propose a class of expressive patterns that admits these compile-time checks.
Manuel Fähndrich, John Tang Boyland
ICFP1
1997 Program Analysis Using Mixed Term and Set Constraints
Manuel Fähndrich, Alex Aiken
SAS1
1995 Better Static Memory Management: Improving Region-Based Analysis of Higher-Order Languages
abstract
Static memory management replaces runtime garbage collection with compile-time annotations that make all memory allocation and deallocation explicit in a program. We improve upon the Tofte/Talpin region-based scheme for compile-time memory management[TT94]. In the Tofte/Talpin approach, all values, including closures, are stored in regions. Region lifetimes coincide with lexical scope, thus forming a runtime stack of regions and eliminating the need for garbage collection. We relax the requirement that region lifetimes be lexical. Rather, regions are allocated late and deallocated as early as possible by explicit memory operations. The placement of allocation and deallocation annotations is determined by solving a system of constraints that expresses all possible annotations. Experiments show that our approach reduces memory requirements significantly, in some cases asymptotically.
Alex Aiken, Manuel Fähndrich, Raph Levien
PLDI2