{"title":"使用范围图定义名称的可访问性(扩展版)","authors":"Aron Zwaan, Casper Bach Poulsen","doi":"arxiv-2407.09320","DOIUrl":null,"url":null,"abstract":"Many programming languages allow programmers to regulate accessibility; i.e.,\nannotating a declaration with keywords such as export and private to indicate\nwhere it can be accessed. Despite the importance of name accessibility for,\ne.g., compilers, editor auto-completion and tooling, and automated\nrefactorings, few existing type systems provide a formal account of name\naccessibility. We present a declarative, executable, and language-parametric model for name\naccessibility, which provides a formal specification of name accessibility in\nJava, C#, C++, Rust, and Eiffel. We achieve this by defining name accessibility\nas a predicate on resolution paths through scope graphs. Since scope graphs are\na language-independent model of name resolution, our model provides a uniform\napproach to defining different accessibility policies for different languages. Our model is implemented in Statix, a logic language for executable type\nsystem specification using scope graphs. We evaluate its correctness on a test\nsuite that compares it with the C#, Java, and Rust compilers, and show we can\nsynthesize access modifiers in programs with holes accurately.","PeriodicalId":501197,"journal":{"name":"arXiv - CS - Programming Languages","volume":"22 1","pages":""},"PeriodicalIF":0.0000,"publicationDate":"2024-07-12","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"0","resultStr":"{\"title\":\"Defining Name Accessibility using Scope Graphs (Extended Edition)\",\"authors\":\"Aron Zwaan, Casper Bach Poulsen\",\"doi\":\"arxiv-2407.09320\",\"DOIUrl\":null,\"url\":null,\"abstract\":\"Many programming languages allow programmers to regulate accessibility; i.e.,\\nannotating a declaration with keywords such as export and private to indicate\\nwhere it can be accessed. Despite the importance of name accessibility for,\\ne.g., compilers, editor auto-completion and tooling, and automated\\nrefactorings, few existing type systems provide a formal account of name\\naccessibility. We present a declarative, executable, and language-parametric model for name\\naccessibility, which provides a formal specification of name accessibility in\\nJava, C#, C++, Rust, and Eiffel. We achieve this by defining name accessibility\\nas a predicate on resolution paths through scope graphs. Since scope graphs are\\na language-independent model of name resolution, our model provides a uniform\\napproach to defining different accessibility policies for different languages. Our model is implemented in Statix, a logic language for executable type\\nsystem specification using scope graphs. We evaluate its correctness on a test\\nsuite that compares it with the C#, Java, and Rust compilers, and show we can\\nsynthesize access modifiers in programs with holes accurately.\",\"PeriodicalId\":501197,\"journal\":{\"name\":\"arXiv - CS - Programming Languages\",\"volume\":\"22 1\",\"pages\":\"\"},\"PeriodicalIF\":0.0000,\"publicationDate\":\"2024-07-12\",\"publicationTypes\":\"Journal Article\",\"fieldsOfStudy\":null,\"isOpenAccess\":false,\"openAccessPdf\":\"\",\"citationCount\":\"0\",\"resultStr\":null,\"platform\":\"Semanticscholar\",\"paperid\":null,\"PeriodicalName\":\"arXiv - CS - Programming Languages\",\"FirstCategoryId\":\"1085\",\"ListUrlMain\":\"https://doi.org/arxiv-2407.09320\",\"RegionNum\":0,\"RegionCategory\":null,\"ArticlePicture\":[],\"TitleCN\":null,\"AbstractTextCN\":null,\"PMCID\":null,\"EPubDate\":\"\",\"PubModel\":\"\",\"JCR\":\"\",\"JCRName\":\"\",\"Score\":null,\"Total\":0}","platform":"Semanticscholar","paperid":null,"PeriodicalName":"arXiv - CS - Programming Languages","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/arxiv-2407.09320","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
Defining Name Accessibility using Scope Graphs (Extended Edition)
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.