Treffer: Defining Name Accessibility Using Scope Graphs

Title:
Defining Name Accessibility Using Scope Graphs
Publisher Information:
Schloss Dagstuhl – Leibniz-Zentrum für Informatik 2024
Document Type:
E-Ressource Electronic Resource
DOI:
10.4230.LIPIcs.ECOOP.2024.47
Availability:
Open access content. Open access content
https://creativecommons.org/licenses/by/4.0/legalcode
Note:
application/pdf
English
Other Numbers:
DEDAG oai:drops-oai.dagstuhl.de:20896
doi:10.4230/LIPIcs.ECOOP.2024.47
urn:nbn:de:0030-drops-208961
1460282076
Contributing Source:
SCHLOSS DAGSTUHL LEIBNIZ ZENTRUM GMBH
From OAIster®, provided by the OCLC Cooperative.
Accession Number:
edsoai.on1460282076
Database:
OAIster

Weitere Informationen

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.