Year Year arrow
arrow-active-down-0
Publisher Publisher arrow
arrow-active-down-1
Journal
1
Journal arrow
arrow-active-down-2
Institution Institution arrow
arrow-active-down-3
Institution Country Institution Country arrow
arrow-active-down-4
Publication Type Publication Type arrow
arrow-active-down-5
Field Of Study Field Of Study arrow
arrow-active-down-6
Topics Topics arrow
arrow-active-down-7
Open Access Open Access arrow
arrow-active-down-8
Language Language arrow
arrow-active-down-9
Filter Icon Filter 1
Year Year arrow
arrow-active-down-0
Publisher Publisher arrow
arrow-active-down-1
Journal
1
Journal arrow
arrow-active-down-2
Institution Institution arrow
arrow-active-down-3
Institution Country Institution Country arrow
arrow-active-down-4
Publication Type Publication Type arrow
arrow-active-down-5
Field Of Study Field Of Study arrow
arrow-active-down-6
Topics Topics arrow
arrow-active-down-7
Open Access Open Access arrow
arrow-active-down-8
Language Language arrow
arrow-active-down-9
Filter Icon Filter 1
Export
Sort by: Relevance
  • Research Article
  • 10.1561/2500000067
Incremental Computation: What Is the Essence?
  • Jan 1, 2025
  • Foundations and Trends® in Programming Languages
  • Yanhong A Liu

  • Research Article
  • 10.1561/2500000069
Programming Differential Privacy
  • Jan 1, 2025
  • Foundations and Trends® in Programming Languages
  • Joseph P Near + 1 more

  • Open Access Icon
  • Research Article
  • Cite Count Icon 31
  • 10.1561/2500000045
QED at Large: A Survey of Engineering of Formally Verified Software
  • Jan 1, 2019
  • Foundations and Trends® in Programming Languages
  • Talia Ringer + 4 more

Development of formal proofs of correctness of programs can increase actual and perceived reliability and facilitate better understanding of program specifications and their underlying assumptions. Tools supporting such development have been available for over 40 years, but have only recently seen wide practical use. Projects based on construction of machine-checked formal proofs are now reaching an unprecedented scale, comparable to large software projects, which leads to new challenges in proof development and maintenance. Despite its increasing importance, the field of proof engineering is seldom considered in its own right; related theories, techniques, and tools span many fields and venues. This survey of the literature presents a holistic understanding of proof engineering for program correctness, covering impact in practice, foundations, proof automation, proof organization, and practical proof development.

  • Open Access Icon
  • Research Article
  • Cite Count Icon 84
  • 10.1561/2500000031
Behavioral Types in Programming Languages
  • Jan 1, 2016
  • Foundations and Trends® in Programming Languages
  • Davide Ancona + 18 more

  • Research Article
  • Cite Count Icon 10
  • 10.1561/2500000017
Nominal Game Semantics
  • Jan 1, 2016
  • Foundations and Trends® in Programming Languages
  • Andrzej S Murawski + 1 more

  • Open Access Icon
  • Research Article
  • Cite Count Icon 167
  • 10.1561/2500000014
Pointer Analysis
  • Jan 1, 2015
  • Foundations and Trends® in Programming Languages
  • Yannis Smaragdakis + 1 more

  • Open Access Icon
  • Research Article
  • Cite Count Icon 16
  • 10.1561/2500000001
Formal Models and Techniques for Analyzing Security Protocols: A Tutorial
  • Jan 1, 2014
  • Foundations and Trends® in Programming Languages
  • Véronique Cortier + 1 more

International audience

  • Research Article
  • Cite Count Icon 85
  • 10.1561/2500000011
Principles of Eventual Consistency
  • Jan 1, 2014
  • Foundations and Trends® in Programming Languages
  • Sebastian Burckhardt

In globally distributed systems, shared state is never perfect. When communication is neither fast nor reliable, we cannot achieve strong consistency, low latency, and availability at the same time. Unfortunately, abandoning strong consistency has wide ramifications. Eventual consistency, though attractive from a performance viewpoint, is challenging to understand and reason about, both for system architects and programmers. To provide robust abstractions, we need not just systems, but also principles: we need the ability to articulate what a consistency protocol is supposed to guarantee, and the ability to prove or refute such claims.In this tutorial, we carefully examine both the what and the how of consistency in distributed systems. First, we deconstruct consistency into individual guarantees relating the data type, the conflict resolution, and the ordering, and then reassemble them into a hierarchy of consistency models that starts with linearizability and gradually descends into sequential, causal, eventual, and quiescent consistency. Second, we present a collection of consistency protocols that illustrate common techniques, and include templates for implementations of arbitrary replicated data types that are fully available under partitions. Third, we demonstrate that our formalizations serve their purpose of enabling proofs and refutations, by proving both positive results (the correctness of the protocols) and a negative result (a version of the CAP theorem for sequential consistency).