Julian Mackay

dblp:131/4722 · DBLP profile ↗
← Back
9ranked-venue papers
4as first author
4since 2021 · last 2025
0000-0003-3098-3901ORCID · corroborated

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

Software engineering, systems software and programming languages · 9 · 4 first-author · 4 since 2021
YearPublicationVenuePosition
2025 Reasoning about External Calls
abstract
In today’s complex software, internal trusted code is tightly intertwined with external untrusted code. To reason about internal code, programmers must reason about the potential effects of calls to external code, even though that code is not trusted and may not even be available. The effects of external calls can be limited if internal code is programmed defensively, limiting potential effects by limiting access to the capabilities necessary to cause those effects. This paper addresses the specification and verification of internal code that relies on encapsulation and object capabilities to limit the effects of external calls. We propose new assertions for access to capabilities, new specifications for limiting effects, and a Hoare logic to verify that a module satisfies its specification, even while making external calls. We illustrate the approach though a running example with mechanised proofs, and prove soundness of the Hoare logic.
Sophia Drossopoulou, Julian Mackay, Susan Eisenbach, James Noble 0001
Proc. ACM Program. Lang.2
2024 Dafny vs. Dala: Experience with Mechanising Language Design
abstract
Dala is a design for a concurrent dynamic object-oriented language. A key goal of Dala's design is to avoid data races, by ensuring threads do not share mutable state. In this paper we discuss our experience using the program verification tool Dafny to validate Dala's design. We explain how we modelled salient features of Dala in Dafny, and how Dafny did (or did not) assist our confidence in Dala's design.
James Noble 0001, Julian Mackay, Tobias Wrigstad, Andrew Fawcet, Michael Homer
FTfJP@ECOOP2
2022 Rusty Links in Local Chains✱
abstract
Rust successfully applies ownership types to control memory allocation. Unfortunately, Rust’s ownership restricts the programs’ topologies to the point where doubly-linked lists cannot be programmed in Safe Rust. We sketch how more flexible “local” ownership could be added to Rust, permitting multiple mutable references to objects, provided each reference is bounded by the object’s lifetime. To maintain thread-safety, locally owned objects must remain thread-local; to maintain memory safety, local objects must remain allocated until their owner’s lifetime expires.
James Noble 0001, Julian Mackay, Tobias Wrigstad
FTfJP@ECOOP2
2022 Necessity specifications for robustness
abstract
Robust modules guarantee to do only what they are supposed to do – even in the presence of untrusted malicious clients, and considering not just the direct behaviour of individual methods, but also the emergent behaviour from calls to more than one method. Necessity is a language for specifying robustness, based on novel necessity operators capturing temporal implication, and a proof logic that derives explicit robustness specifications from functional specifications. Soundness and an exemplar proof are mechanised in Coq.
Julian Mackay, Susan Eisenbach, James Noble 0001, Sophia Drossopoulou
Proc. ACM Program. Lang.1
2020 Syntactically Restricting Bounded Polymorphism for Decidable Subtyping
Julian Mackay, Alex Potanin, Jonathan Aldrich, Lindsay Groves
APLAS1
2020 Holistic Specifications for Robust Programs
abstract
Functional specifications describe what program components can do: the sufficient conditions to invoke components’ operations. They allow us to reason about the use of components in a closed world setting, where components interact with known client code, and where the client code must establish the appropriate pre-conditions before calling into a component. Sufficient conditions are not enough to reason about the use of components in an open world setting, where components interact with external code, possibly of unknown provenance, and where components may evolve over time. In this open world setting, we must also consider the necessary conditions, i. e. what are the conditions without which an effect will not happen. In this paper we propose the $${\mathcal {C}}$$ hainmail specification language for writing holistic specifications that focus on necessary conditions (as well as sufficient conditions). We give a formal semantics for $${\mathcal {C}}$$ hainmail, and discuss several examples. The core of $${\mathcal {C}}$$ hainmail has been mechanised in the Coq proof assistant.
Sophia Drossopoulou, James Noble 0001, Julian Mackay, Susan Eisenbach
FASE3
2020 Decidable subtyping for path dependent types
abstract
Path dependent types have long served as an expressive component of the Scala programming language. They allow for the modelling of both bounded polymorphism and a degree of nominal subtyping. Nominality in turn provides the ability to capture first class modules. Thus a single language feature gives rise to a rich array of expressiveness. Recent work has proven path dependent types sound in the presence of both intersection and recursive types, but unfortunately typing remains undecidable, posing problems for programmers who rely on the results of type checkers. The Wyvern programming language is an object oriented language with path dependent types, recursive types and first class modules. In this paper we define two variants of Wyvern that feature decidable typing, along with machine checked proofs of decidability. Despite the restrictions, our approaches retain the ability to encode the parameteric polymorphism of Java generics along with many idioms of the Scala module system.
Julian Mackay, Alex Potanin, Jonathan Aldrich, Lindsay Groves
Proc. ACM Program. Lang.1
2013 The Billion-Dollar Fix - Safe Modular Circular Initialisation with Placeholders and Placeholder Types
Marco Servetto, Julian Mackay, Alex Potanin, James Noble 0001
ECOOP2
2012 Encoding Featherweight Java with assignment and immutability using the Coq proof assistant
abstract
We develop a mechanized proof of Featherweight Java with Assignment and Immutability in the Coq proof assistant. This is a step towards more machine-checked proofs of a non-trivial type system. We used object immutability close to that of IGJ [9]. We describe the challenges of the mechanisation and the encoding we used inside of Coq.
Julian Mackay, Hannes Mehnert, Alex Potanin, Lindsay Groves, Nicholas Cameron 0001
FTfJP@ECOOP1