Demo Data from SIGIR 2026 / reviewers in the wild / expert
Manuel Fähndrich
dblp:f/ManuelFahndrich
· DBLP profile ↗
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
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Program analysis
static analysis |
0.2 | 4 | 2012 | 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.2 | 1 | 2014 | Verification modulo versions: towards usable verification · PLDI 2014 |
Programming languages and type systems
type systems |
0.2 | 4 | 2007 | 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.2 | 1 | 2013 | Abstracting Runtime Heaps for Program Understanding · IEEE Trans. Software Eng. 2013 |
Programming languages and type systems › programming environment
live programming |
0.2 | 1 | 2013 | It's alive! continuous feedback in UI programming · PLDI 2013 |
Systems and software security › information flow control
information flow analysis |
0.1 | 1 | 2012 | User-aware privacy control via extended static-information-flow analysis · ASE 2012 |
Usable security
privacy control |
0.1 | 1 | 2012 | User-aware privacy control via extended static-information-flow analysis · ASE 2012 |
Programming languages and type systems
language design |
0.1 | 1 | 2012 | TouchDevelop: app development on mobile devices · SIGSOFT FSE 2012 |
Operating systems › system security › operating system security › protection mechanism › isolation
process isolation |
0.1 | 2 | 2007 | 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.1 | 1 | 2010 | 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.1 | 1 | 2010 | SPUR: a trace-based JIT compiler for CIL · OOPSLA 2010 |
Systems and software security
operating system security |
0.1 | 2 | 2007 | 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.1 | 1 | 2008 | Safer unsafe code for .NET · OOPSLA 2008 |
Systems and software security › memory safety
unsafe code verification |
0.1 | 1 | 2008 | Safer unsafe code for .NET · OOPSLA 2008 |
Program analysis › static analysis
abstract interpretation |
0.1 | 1 | 2008 | Safer unsafe code for .NET · OOPSLA 2008 |
Program verification › security property verification
memory safety verification |
0.1 | 1 | 2008 | Safer unsafe code for .NET · OOPSLA 2008 |
Programming languages and type systems › type systems
object initialization |
0.1 | 1 | 2007 | Establishing object invariants with delayed types · OOPSLA 2007 |
Program verification › code-level verification › object-oriented verification
object invariants |
0.1 | 1 | 2007 | Establishing object invariants with delayed types · OOPSLA 2007 |
Program verification › equivalence checking
regression verification |
0.1 | 1 | 2014 | Verification modulo versions: towards usable verification · PLDI 2014 |
Software maintenance and evolution › software configuration management
version control |
0.1 | 1 | 2014 | Verification modulo versions: towards usable verification · PLDI 2014 |
User interface design and tools
user interface programming |
0.0 | 1 | 2013 | It's alive! continuous feedback in UI programming · PLDI 2013 |
Software maintenance and evolution
program comprehension |
0.0 | 1 | 2013 | Abstracting Runtime Heaps for Program Understanding · IEEE Trans. Software Eng. 2013 |
Interaction techniques and input
touch interaction |
0.0 | 1 | 2012 | TouchDevelop: app development on mobile devices · SIGSOFT FSE 2012 |
Programming languages and type systems › type systems › substructural type systems
linear types |
0.0 | 1 | 2002 | Adoption and Focus: Practical Linear Types for Imperative Programming · PLDI 2002 |
Runtime systems and virtual machines
managed runtime |
0.0 | 1 | 2010 | SPUR: a trace-based JIT compiler for CIL · OOPSLA 2010 |
Program analysis
flow analysis |
0.0 | 1 | 2001 | 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.0 | 1 | 2001 | Type-base flow analysis: from polymorphic subtyping to CFL-reachability · POPL 2001 |
Automata and formal languages › context-free languages
context-free language reachability |
0.0 | 1 | 2001 | Type-base flow analysis: from polymorphic subtyping to CFL-reachability · POPL 2001 |
Graph algorithms and graph theory
graph algorithms |
0.0 | 1 | 2001 | Type-base flow analysis: from polymorphic subtyping to CFL-reachability · POPL 2001 |
Program analysis › data flow analysis
context-sensitive dataflow analysis |
0.0 | 1 | 2000 | 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
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2015 | Global Sequence Protocol: A Robust Abstraction for Replicated Shared StateabstractIn 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 |
ECOOP | 4 |
| 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 runtimeabstractAt 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 |
PEPM | 1 |
| 2014 | Verification modulo versions: towards usable verificationabstractWe 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 |
PLDI | 3 |
| 2013 | It's alive! continuous feedback in UI programmingabstractLive 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 |
PLDI | 2 |
| 2013 | Automatic Inference of Necessary Preconditions
Patrick Cousot, Radhia Cousot, Manuel Fähndrich, Francesco Logozzo |
VMCAI | 3 |
| 2013 | Abstracting Runtime Heaps for Program UnderstandingabstractModern 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 |
APLAS | 3 |
| 2012 | Engage Your Students by Teaching Computer Science Using Only Mobile Devices with TouchDevelopabstractWe 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&T | 4 |
| 2012 | Cloud Types for Eventual Consistency
Sebastian Burckhardt, Manuel Fähndrich, Daan Leijen, Benjamin P. Wood |
ECOOP | 2 |
| 2012 | Eventually Consistent Transactions
Sebastian Burckhardt, Daan Leijen, Manuel Fähndrich, Shmuel Sagiv |
ESOP | 3 |
| 2012 | The future of teaching programming is on mobile devicesabstractFrom 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 |
ITiCSE | 4 |
| 2012 | User-aware privacy control via extended static-information-flow analysisabstractApplications 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 |
ASE | 3 |
| 2012 | Engage your students by teaching programming using only mobile devices with TouchDevelop (abstract only)abstractWe 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 |
SIGCSE | 4 |
| 2012 | TouchDevelop: app development on mobile devicesabstractMobile 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 FSE | 4 |
| 2011 | Prettier concurrency: purely functional concurrent revisionsabstractThis 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 |
Haskell | 2 |
| 2010 | SPUR: a trace-based JIT compiler for CILabstractTracing 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 |
OOPSLA | 3 |
| 2010 | Static Verification for Code Contracts
Manuel Fähndrich |
SAS | 1 |
| 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 |
SAS | 2 |
| 2008 | On the Relative Completeness of Bytecode Analysis Versus Source Code Analysis
Francesco Logozzo, Manuel Fähndrich |
CC | 2 |
| 2008 | Safer unsafe code for .NETabstractThe.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 |
OOPSLA | 3 |
| 2008 | Type-based flow analysis and context-free language reachabilityabstractWe 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 safetyabstractIn 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 |
EuroSys | 3 |
| 2007 | Establishing object invariants with delayed typesabstractMainstream 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 |
OOPSLA | 1 |
| 2006 | Language support for fast and reliable message-based communication in singularity OSabstractMessage-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 |
EuroSys | 1 |
| 2006 | Reflective program generation with patternsabstractRuntime 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 |
GPCE | 1 |
| 2004 | Typestates for Objects
Robert DeLine, Manuel Fähndrich |
ECOOP | 2 |
| 2003 | Declaring and checking non-null types in an object-oriented languageabstractDistinguishing 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 |
OOPSLA | 1 |
| 2002 | Adoption and Focus: Practical Linear Types for Imperative ProgrammingabstractA 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 |
PLDI | 1 |
| 2001 | Enforcing High-Level Protocols in Low-Level SoftwareabstractThe 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 |
PLDI | 2 |
| 2001 | Type-base flow analysis: from polymorphic subtyping to CFL-reachabilityabstractWe 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 |
POPL | 2 |
| 2001 | Estimating the Impact of Scalable Pointer Analysis on Optimization
Manuvir Das, Ben Liblit, Manuel Fähndrich, Jakob Rehof |
SAS | 3 |
| 2000 | Scalable context-sensitive flow analysis using instantiation constraintsabstractThis 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 |
PLDI | 1 |
| 2000 | Projection Merging: Reducing Redundancies in Inclusion Constraint GraphsabstractInclusion-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 |
POPL | 2 |
| 2000 | Polymorphic versus Monomorphic Flow-Insensitive Points-to Analysis for C
Jeffrey S. Foster, Manuel Fähndrich, Alex Aiken |
SAS | 2 |
| 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 QualifiersabstractWe 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 |
PLDI | 2 |
| 1998 | Partial Online Cycle Elimination in Inclusion Constraint GraphsabstractMany 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 |
PLDI | 1 |
| 1998 | Detecting Races in Relay Ladder Logic Programs
Alex Aiken, Manuel Fähndrich, Zhendong Su 0001 |
TACAS | 2 |
| 1997 | Statically Checkable Pattern AbstractionsabstractPattern 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 |
ICFP | 1 |
| 1997 | Program Analysis Using Mixed Term and Set Constraints
Manuel Fähndrich, Alex Aiken |
SAS | 1 |
| 1995 | Better Static Memory Management: Improving Region-Based Analysis of Higher-Order LanguagesabstractStatic 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 |
PLDI | 2 |