Marianna Rapoport

dblp:148/3254 · DBLP profile ↗
← Back
10ranked-venue papers
5as first author
1since 2021 · last 2025
—ORCID · none

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

Software engineering, systems software and programming languages · 10 · 5 first-author · 1 since 2021Databases, data management, data science and information retrieval · 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
5 papers
Programming languages and type systems · 53% Program verification · 34% Program analysis · 9%
Computer architecture, parallel and distributed computing, and storage systems
1 paper
Distributed systems · 100%

Topics — the 14 heaviest of 16, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Programming languages and type systems › type systems
type soundness
0.722019
A path to DOT: formalizing fully path-dependent types · Proc. ACM Program. Lang. 2019
A simple soundness proof for dependent object types · Proc. ACM Program. Lang. 2017
Programming languages and type systems
type theory
0.722019
A path to DOT: formalizing fully path-dependent types · Proc. ACM Program. Lang. 2019
A simple soundness proof for dependent object types · Proc. ACM Program. Lang. 2017
Program verification › program logic
hoare logic
0.412020
The future is ours: prophecy variables in separation logic · Proc. ACM Program. Lang. 2020
Program verification
prophecy variables
0.412020
The future is ours: prophecy variables in separation logic · Proc. ACM Program. Lang. 2020
Program verification › program logic
separation logic
0.412020
The future is ours: prophecy variables in separation logic · Proc. ACM Program. Lang. 2020
Programming languages and type systems › type theory › dependent types
path-dependent types
0.412019
A path to DOT: formalizing fully path-dependent types · Proc. ACM Program. Lang. 2019
Programming languages and type systems › type theory › dependent types
dependent object types
0.312017
A simple soundness proof for dependent object types · Proc. ACM Program. Lang. 2017
Program verification › formal proof
soundness proof
0.312017
A simple soundness proof for dependent object types · Proc. ACM Program. Lang. 2017
Program analysis › static analysis
call graph construction
0.212015
Type-Based Call Graph Construction Algorithms for Scala · ACM Trans. Softw. Eng. Methodol. 2015
Program analysis
static analysis
0.212015
Type-Based Call Graph Construction Algorithms for Scala · ACM Trans. Softw. Eng. Methodol. 2015
Programming languages and type systems
type systems
0.212015
Type-Based Call Graph Construction Algorithms for Scala · ACM Trans. Softw. Eng. Methodol. 2015
Programming languages and type systems › functional language
scala
0.222019
A path to DOT: formalizing fully path-dependent types · Proc. ACM Program. Lang. 2019
A simple soundness proof for dependent object types · Proc. ACM Program. Lang. 2017
Concurrent programming › atomicity
linearizability
0.112020
The future is ours: prophecy variables in separation logic · Proc. ACM Program. Lang. 2020
Programming languages and type systems › language semantics
core calculus
0.112017
A simple soundness proof for dependent object types · Proc. ACM Program. Lang. 2017

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

shadow testing · 1.7differential testing · 1.7dafny · 1.7iris · 0.4coq · 0.4auxiliary variables · 0.4singleton types · 0.4coq mechanization · 0.4modular proof strategy · 0.3featherweight scala · 0.2
YearPublicationVenuePosition
2025 Formally Verified Cloud-Scale Authorization
abstract
All critical systems must evolve to meet the needs of a growing and diversifying user base. But supporting that evolution is challenging at increasing scale: Maintainers must find a way to ensure that each change does only what is intended, and will not inadvertently change behavior for existing users. This paper presents how we addressed this challenge for the Amazon Web Services (AWS) authorization engine, invoked 1 billion times per second, by using formal verification. Over a period of four years, we built a new authorization engine, one that behaves functionally the same as its predecessor, using the verification-aware programming language Dafny. We can now confidently deploy enhancements and optimizations while maintaining the highest assurance of both correctness and backward compatibility. We deployed the new engine in 2024 without incident and customers immediately enjoyed a threefold performance improvement. The methodology we followed to build this new engine was not an off-the-shelf application of an existing verification tool, and this paper presents several key insights: 1) Rather than prove correct the existing engine, written in Java, we found it more effective to write a new engine in Dafny, a language built for verification from the ground up, and then compile the result to Java. 2) To ensure performance, debuggability, and to gain trust from stakeholders, we needed to generate readable, idiomatic Java code, essentially a transliteration of the source Dafny. 3) To ensure that the specification matches the system's actual behavior, we performed extensive differential and shadow testing throughout the development process, ultimately comparing against 1015production samples prior to deployment. Our approach demonstrates how formal verification can be effectively applied to evolve critical legacy software at scale.
Aleks Chakarov, Jaco Geldenhuys, Matthew Heck, Michael Hicks 0001, Sam Huang, Georges-Axel Jaloyan, Anjali Joshi, K. Rustan M. Leino, Mikael Mayer, Sean McLaughlin, Akhilesh Mritunjai, Clément Pit-Claudel, Sorawee Porncharoenwase, Florian Rabe 0001, Marianna Rapoport, Giles Reger, Cody Roux, Neha Rungta, Robin Salkeld, Matthias Schlaipfer, Daniel Schoepe, Johanna Schwartzentruber, Serdar Tasiran, Aaron Tomb, Emina Torlak, Jean-Baptiste Tristan, Lucas G. Wagner, Michael W. Whalen, Remy Willems, Tongtong Xiang, Taejoon Byun, Joshua M. Cohen, Ruijie Fang, Junyoung Jang 0001, Jakob Rath, Syeda Hira Taqdees, Dominik Wagner 0001, Yongwei Yuan
ICSE15
2020 Blame for Null
Abel Nieto, Marianna Rapoport, Gregor Richards, Ondrej Lhoták
ECOOP2
2020 The future is ours: prophecy variables in separation logic
abstract
Early in the development of Hoare logic, Owicki and Gries introduced auxiliary variables as a way of encoding information about the history of a program’s execution that is useful for verifying its correctness. Over a decade later, Abadi and Lamport observed that it is sometimes also necessary to know in advance what a program will do in the future . To address this need, they proposed prophecy variables , originally as a proof technique for refinement mappings between state machines. However, despite the fact that prophecy variables are a clearly useful reasoning mechanism, there is (surprisingly) almost no work that attempts to integrate them into Hoare logic. In this paper, we present the first account of prophecy variables in a Hoare-style program logic that is flexible enough to verify logical atomicity (a relative of linearizability) for classic examples from the concurrency literature like RDCSS and the Herlihy-Wing queue. Our account is formalized in the Iris framework for separation logic in Coq. It makes essential use of ownership to encode the exclusive right to resolve a prophecy, which in turn enables us to enforce soundness of prophecies with a very simple set of proof rules.
Ralf Jung 0002, Rodolphe Lepigre, Gaurav Parthasarathy, Marianna Rapoport, Amin Timany, Derek Dreyer, Bart Jacobs 0002
Proc. ACM Program. Lang.4
2019 A path to DOT: formalizing fully path-dependent types
abstract
The Dependent Object Types (DOT) calculus aims to formalize the Scala programming language with a focus on path-dependent types — types such as x . a 1 … a n . T that depend on the runtime value of a path x . a 1 … a n to an object. Unfortunately, existing formulations of DOT can model only types of the form x . A which depend on variables rather than general paths. This restriction makes it impossible to model nested module dependencies. Nesting small components inside larger ones is a necessary ingredient of a modular, scalable language. DOT’s variable restriction thus undermines its ability to fully formalize a variety of programming-language features including Scala’s module system, family polymorphism, and covariant specialization. This paper presents the pDOT calculus, which generalizes DOT to support types that depend on paths of arbitrary length, as well as singleton types to track path equality. We show that naive approaches to add paths to DOT make it inherently unsound, and present necessary conditions for such a calculus to be sound. We discuss the key changes necessary to adapt the techniques of the DOT soundness proofs so that they can be applied to pDOT. Our paper comes with a Coq-mechanized type-safety proof of pDOT. With support for paths of arbitrary length, pDOT can realize DOT’s full potential for formalizing Scala-like calculi.
Marianna Rapoport, Ondrej Lhoták
Proc. ACM Program. Lang.1
2017 Mutable WadlerFest DOT
abstract
The Dependent Object Types (DOT) calculus aims to model the essence of Scala, with a focus on abstract type members, path-dependent types, and subtyping. Other Scala features could be defined by translation to DOT.
Marianna Rapoport, Ondrej Lhoták
FTfJP@ECOOP1
2017 Who you gonna call?: analyzing web requests in Android applications
abstract
Relying on ubiquitous Internet connectivity, applications on mobile devices frequently perform web requests during their execution. They fetch data for users to interact with, invoke remote functionalities, or send user-generated content or meta-data. These requests collectively reveal common practices of mobile application development, like what external services are used and how, and they point to possible negative effects like security and privacy violations, or impacts on battery life. In this paper, we assess different ways to analyze what web requests Android applications make. We start by presenting dynamic data collected from running 20 randomly selected Android applications and observing their network activity. Next, we present a static analysis tool, Stringoid, that analyzes string concatenations in Android applications to estimate constructed URL strings. Using Stringoid, we extract URLs from 30, 000 Android applications, and compare the performance with a simpler constant extraction analysis. Finally, we present a discussion of the advantages and limitations of dynamic and static analyses when extracting URLs, as we compare the data extracted by Stringoid from the same 20 applications with the dynamically collected data.
Marianna Rapoport, Philippe Suter, Erik Wittern, Ondrej Lhoták, Julian Dolby
MSR1
2017 A simple soundness proof for dependent object types
abstract
Dependent Object Types (DOT) is intended to be a core calculus for modelling Scala. Its distinguishing feature is abstract type members, fields in objects that hold types rather than values. Proving soundness of DOT has been surprisingly challenging, and existing proofs are complicated, and reason about multiple concepts at the same time (e.g. types, values, evaluation). To serve as a core calculus for Scala, DOT should be easy to experiment with and extend, and therefore its soundness proof needs to be easy to modify. This paper presents a simple and modular proof strategy for reasoning in DOT. The strategy separates reasoning about types from other concerns. It is centred around a theorem that connects the full DOT type system to a restricted variant in which the challenges and paradoxes caused by abstract type members are eliminated. Almost all reasoning in the proof is done in the intuitive world of this restricted type system. Once we have the necessary results about types, we observe that the other aspects of DOT are mostly standard and can be incorporated into a soundness proof using familiar techniques known from other calculi.
Marianna Rapoport, Ifaz Kabir, Paul He 0002, Ondrej Lhoták
Proc. ACM Program. Lang.1
2015 Precise Data Flow Analysis in the Presence of Correlated Method Calls
Marianna Rapoport, Ondrej Lhoták, Frank Tip
SAS1
2015 Type-Based Call Graph Construction Algorithms for Scala
abstract
Call graphs have many applications in software engineering. For example, they serve as the basis for code navigation features in integrated development environments and are at the foundation of static analyses performed in verification tools. While many call graph construction algorithms have been presented in the literature, we are not aware of any that handle Scala features such as traits and abstract type members. Applying existing algorithms to the JVM bytecodes generated by the Scala compiler produces very imprecise results because type information is lost during compilation. We adapt existing type-based call graph construction algorithms to Scala and present a formalization based on Featherweight Scala. An experimental evaluation shows that our most precise algorithm generates call graphs with 1.1--3.7 times fewer nodes and 1.5--17.3 times fewer edges than a bytecode-based RTA analysis.
Karim Ali 0001, Marianna Rapoport, Ondrej Lhoták, Julian Dolby, Frank Tip
ACM Trans. Softw. Eng. Methodol.2
2014 Constructing Call Graphs of Scala Programs
Karim Ali 0001, Marianna Rapoport, Ondrej Lhoták, Julian Dolby, Frank Tip
ECOOP2