Defining Name Accessibility Using Scope Graphs

Conference Paper (2024)
Author(s)

Aron Zwaan (TU Delft - Programming Languages)

Casper Bach Bach Poulsen (TU Delft - Programming Languages)

Research Group
Programming Languages
DOI related publication
https://doi.org/10.4230/LIPIcs.ECOOP.2024.47
More Info
expand_more
Publication Year
2024
Language
English
Research Group
Programming Languages
ISBN (electronic)
978-3-95977-341-6
Reuse Rights

Other than for strictly personal use, it is not permitted to download, forward or distribute the text or part of it, without the consent of the author(s) and/or copyright holder(s), unless the work is under an open content license such as Creative Commons.

Abstract

Many programming languages allow programmers to regulate accessibility; i.e., annotating a declaration with keywords such as export and private to indicate where it can be accessed. Despite the importance of name accessibility for, e.g., compilers, editor auto-completion and tooling, and automated refactorings, few existing type systems provide a formal account of name accessibility. We present a declarative, executable, and language-parametric model for name accessibility, which provides a formal specification of name accessibility in Java, C#, C++, Rust, and Eiffel. We achieve this by defining name accessibility as a predicate on resolution paths through scope graphs. Since scope graphs are a language-independent model of name resolution, our model provides a uniform approach to defining different accessibility policies for different languages. Our model is implemented in Statix, a logic language for executable type system specification using scope graphs. We evaluate its correctness on a test suite that compares it with the C#, Java, and Rust compilers, and show we can synthesize access modifiers in programs with holes accurately.