跳到主要内容
10.1145/3624007.3624051acm会议文章/章节视图摘要出版物页面通用电气公司会议记录会议集合
研究论文
开放式访问
可用工件/v1.1

一种用于多阶段类型跳棋名称解析的Mondic框架

出版:2023年10月22日出版历史

摘要

类型检查的一个重要方面是名称解析,即通过将名称解析为匹配声明来确定名称的类型。对于大多数语言,我们可以提供类型规则,以抽象不同代码单元应检入的顺序来定义名称解析。然而,实际上类型检查器的实现通常使用多个阶段来确保在解析名称之前可以使用可解析名称的声明。这导致从类型检查顺序中抽象出来的类型规则与依赖显式排序的多阶段类型检查器之间存在差距。

本文介绍了缩小这一差距的技术。首先,我们为分阶段名称解析引入了一个单子接口,该接口检测并拒绝带有名称解析分阶段错误的类型检查运行,这些错误的名称解析是因为某些声明在本应存在时不可用。其次,在Gibbons等人最近的工作基础上,我们使用应用函子将抽象语法树组合映射到表示类型约束的(阶段性)单子计算。这些技术缩小了类型检查器实现和类型规则之间的差距,因为(1)两者都是由抽象语法树上的组合映射给出的,(2)类型检查器案例由大致对应于类型规则前提的计算组成,但这些计算是使用一元组合符组成的。我们通过使用Damas-Hindley-Milner类型推断和LM(一种具有挑战性导入解析策略的玩具模块语言)为Mini-ML实现类型检查器来演示我们的方法。

工具书类

  1. 阿尔弗雷德·阿霍(Alfred V.Aho)、拉维·塞蒂(Ravi Sethi)和杰弗里·乌尔曼(Jeffrey D.Ullman)。1986.编译器:原理、技术和工具。艾迪森·韦斯利。编号:0-201-10088-6https://www.worldcat.org/occ/12285707谷歌学者谷歌学者数字图书馆数字图书馆
  2. 纳达·阿明(Nada Amin)、塞缪尔·格吕特(Samuel Grütter)、马丁·奥德斯基(Martin Odersky)、蒂亚克·隆普夫(Tiark Rompf)和桑德罗·斯塔基(Sandro Stucki)。2016。依赖对象类型的本质。在一份能够改变世界的成功列表中——在菲利普·沃德勒60岁生日之际,萨姆·林德利、康诺·麦克布莱德、菲利普·特林德和唐纳德·桑内拉(编辑)为他撰写的论文(计算机科学讲义,第9600卷)。施普林格,249-272。国际标准编号:978-3-319-30935-4https://doi.org/10.1007/978-3-319-30936-1_14谷歌学者谷歌学者交叉引用交叉引用
  3. G.M.Bierman、M.J.Parkinson和A.M.Pitts。2003年,MJ:Java和Java的命令式核心演算及其效果。剑桥大学。谷歌学者谷歌学者
  4. Janusz A.Brzozowski。1964.正则表达式的导数。J.ACM,11,4(1964),481-494。https://doi.org/10.1145/321239.321249谷歌学者谷歌学者数字图书馆数字图书馆
  5. 凯瑟琳·伊姆霍夫·卡萨门托。2019.使用范围图进行正确的施工类型检查。硕士论文。波特兰州立大学。计算机科学系。谷歌学者谷歌学者交叉引用交叉引用
  6. 路易斯·达马斯。1984.编程语言中的类型赋值。博士论文。英国爱丁堡大学。https://hdl.handle.net/1842/13555网址谷歌学者谷歌学者
  7. 路易斯·达马斯和罗宾·米尔纳。1982.功能程序的主要类型方案。1982年1月,在美国新墨西哥州阿尔伯克基举行的第九届美国计算机学会编程语言原理年会的会议记录中,Richard A.DeMillo(编辑)。ACM出版社,207–212。国际标准编号:0-89791-065-6https://doi.org/10.1145/582153.582176谷歌学者谷歌学者数字图书馆数字图书馆
  8. 托比约恩·埃克曼和哥雷尔·赫丁。JastAdd系统-模块化可扩展编译器构造。《计算机程序设计科学》,69,1-3(2007),14-26。https://doi.org/10.1016/j.scico.2007.02.003谷歌学者谷歌学者数字图书馆数字图书馆
  9. 杰里米·吉本斯(Jeremy Gibbons)、唐纳卡·奥辛(Donnacha Oisín Kidney)、汤姆·施里杰弗斯(Tom Schrijvers)和尼古拉斯·吴(Nicolas Wu)。2022.宽度-通过分段第一次穿越。《程序构建的数学——第14届国际会议》,MPC 2022,格鲁吉亚第比利斯,2022年9月26-28日,《会议记录》,叶卡捷琳娜·科门丹茨卡亚(编辑)(计算机科学讲义,第13544卷)。施普林格,1-33。编号:978-3-031-16911-3https://doi.org/10.1007/978-3-031-16912-0_1谷歌学者谷歌学者数字图书馆数字图书馆
  10. Robert Griesemer、Raymond Hu、Wen Kokke、Julien Lange、Ian Lance Taylor、Bernardo Toninho、Philip Wadler和Nobuko Yoshida。2020年,轻量级开始。程序。ACM计划。Lang.,4,OOPSLA(2020),149:1–149:29。https://doi.org/10.1145/3428217谷歌学者谷歌学者数字图书馆数字图书馆
  11. 科迪莉亚·霍尔(Cordelia V.Hall)、凯文·哈蒙德(Kevin Hammond)、威尔·帕坦(Will Partain)、西蒙·佩顿·琼斯(Simon L.Peyton Jones)和菲利普·沃德勒(Philip Wadler)。1992年,格拉斯哥-哈斯克尔编译器:回顾。《函数编程》,格拉斯哥,1992年,《1992年格拉斯哥函数编程研讨会论文集》,英国苏格兰艾尔,1992年7月6日至8日,John Launchbury和Patrick M.Sansom(编辑)(计算机研讨会)。施普林格,62-71。国际标准编号:3-540-19820-2https://doi.org/10.1007/978-1-4471-3215-8_6谷歌学者谷歌学者交叉引用交叉引用
  12. 戈雷尔·赫丁。2000.参考属性语法。Informatica(斯洛文尼亚),24,3(2000年)。谷歌学者谷歌学者
  13. 保罗·胡布纳。2023.使用范围图对模块和导入进行类型检查。代尔夫特理工大学。http://resolver.tudelft.nl/uuid:e7f16989-9aca-4707-9d4a-74eba2adc4谷歌学者谷歌学者
  14. Graham Hutton和Erik Meijer。1996.一元解析器组合子。谷歌学者谷歌学者
  15. 井上Atsushi、Benjamin C.Pierce和Philip Wadler。2001.Featherweight Java:Java和GJ的最小核心演算。ACM事务处理。程序。语言系统。,23, 3 (2001), 396–450. https://doi.org/10.1145/503502.503505谷歌学者谷歌学者数字图书馆数字图书馆
  16. G.Kahn。1987.自然语义学。在STACS 87中,Franz J.Brandenburg、Guy Vidal-Naquet和Martin Wirsing(编辑)。施普林格-柏林-海德堡,柏林,海德堡。22-39。国际标准编号:978-3-540-47419-7谷歌学者谷歌学者
  17. Donnacha Oisín Kidney和Nicolas Wu。2021.加权搜索代数。程序。ACM计划。Lang.,5,ICFP(2021),1-30。https://doi.org/10.1145/3473577谷歌学者谷歌学者数字图书馆数字图书馆
  18. 扬·纳本(Jan Knapen)。2023.使用范围图的具有子结构类型系统的语言的类型检查器。代尔夫特理工大学。http://resolver.tudelft.nl/uuid:0469a179网址-4228-4d30-a263-8f7e17da7026谷歌学者谷歌学者
  19. 唐纳德·科努特(Donald E.Knuth)。1968.无上下文语言的语义。数学系统理论,2,2(1968),127-145。谷歌学者谷歌学者交叉引用交叉引用
  20. 埃德利拉·库奇(Edlira Kuci)、塞巴斯蒂安·埃尔德维格(Sebastian Erdweg)、奥利弗·布拉切瓦克(Oliver Bracevac)、安迪·贝杰莱里(Andi Bejleri)和米拉·梅齐尼(Mira Mezini)。2017年,Featherweight Java的Co-contextual类型检查器。在2017年6月19日至23日于西班牙巴塞罗那举行的第31届欧洲面向对象编程会议上,Peter Müller(编辑)(LIPIcs,第74卷)。达格斯图尔-莱布尼兹·泽特鲁姆宫(Schloss Dagstuhl-Leibniz-Zentrum für Informatik),18:1–18:26。国际标准编号:978-3-95977-035-4https://doi.org/10.4230/LIPIcs.ECOOP.2017.18谷歌学者谷歌学者交叉引用交叉引用
  21. 灯/EPFL。访问时间:2023-05-28。Scala 3高级架构:符号。https://dotty.epfl.ch/docs/contribution/architecture/symbols.html谷歌学者谷歌学者
  22. 灯/EPFL。访问时间:2023-05-28。Scala 3元编程:运行时多阶段编程。https://dotty.epfl.ch/docs/reference/metaprogramming/staging.html谷歌学者谷歌学者
  23. 伊娃·马格努森(Eva Magnusson)、托比约恩·埃克曼(Torbjörn Ekman)和哥雷尔·赫丁(Görel Hedin)。2009年。收集属性的需求驱动评估。自动。柔和。工程,16,2(2009),291–322。https://doi.org/10.1007/s10515-009-0046-z谷歌学者谷歌学者数字图书馆数字图书馆
  24. Conor McBride和Ross Paterson。2008年。具有效果的应用程序设计。J.功能。程序。,18, 1 (2008), 1–13. https://doi.org/10.1017/S0956796807006326谷歌学者谷歌学者数字图书馆数字图书馆
  25. 拉杜·米勒·邱。2023.使用范围图构建类型检查器:基于范围图的Scala子集类型检查。代尔夫特理工大学。http://resolver.tudelft.nl/uuid:a4050c81-4a1c-4cf0-b26e-7c60aa18503a谷歌学者谷歌学者
  26. 罗宾·米尔纳。1978.程序设计中的类型多态理论。J.计算。系统。科学。,17, 3 (1978), 348–375. https://doi.org/10.1016/0022-0000(78)90014-4谷歌学者谷歌学者交叉引用交叉引用
  27. 安德烈亚·莫卡努。2023.使用范围图构建类型检查器:用于具有类型类的语言。代尔夫特理工大学。http://resolver.tudelft.nl/uuid:64aa6cc8-9039-47b1-99f6-十二月150dcab8谷歌学者谷歌学者
  28. 皮埃尔·内龙(Pierre Neron)、安德鲁·托尔马赫(Andrew P.Tolmach)、埃尔科·维瑟(Eelco Visser)和吉多·瓦奇斯莫斯(Guido Wachsmuth)。2015.名称解析理论。《编程语言与系统》——2015年第24届欧洲编程研讨会,ESOP,作为欧洲软件理论与实践联合会议的一部分,ETAPS 2015,英国伦敦,2015年4月11-18日。《会议录》,Jan Vitek(编辑)(计算机科学讲稿,第9032卷)。施普林格,205-231。国际标准编号:978-3-662-46668-1https://doi.org/10.1007/978-3-662-46669-8_9谷歌学者谷歌学者交叉引用交叉引用
  29. 约翰·斯特隆德和托比亚斯·箭斯塔德。2010年,爪哇中量级。在对象,模型,组件,模式,第48届国际会议,2010年工具,西班牙马拉加,2010年6月28日至7月2日。《会议录》,Jan Vitek(编辑)(计算机科学讲稿,第6141卷)。施普林格,97–116岁。国际标准编号:978-3-642-13952-9https://doi.org/10.1007/978-3-642-13953-6_6谷歌学者谷歌学者交叉引用交叉引用
  30. 戈登·普洛金(Gordon D.Plotkin)和马蒂亚·普雷特纳(Matija Pretnar)。2009.代数效应处理程序。在编程语言和系统方面,第18届欧洲编程研讨会,ESOP 2009,作为欧洲软件理论和实践联合会议的一部分举行,ETAPS 2009,2009年3月22-29日,英国约克。Giuseppe Castagna(编辑)会议录(计算机科学讲稿,第5502卷)。施普林格,80-94。编号:978-3-642-00589-3https://doi.org/10.1007/978-3642-00590-9_7谷歌学者谷歌学者数字图书馆数字图书馆
  31. 卡斯珀·巴赫·鲍尔森(Casper Bach Poulsen)和卡斯·范德雷斯特(Cas van der Rest),2023年。Hefty代数:高阶代数效应的模块化阐述。程序。ACM计划。Lang.,7,POPL(2023),1801-1831年。https://doi.org/10.1145/3571255谷歌学者谷歌学者数字图书馆数字图书馆
  32. 卡斯珀·巴赫·鲍尔森(Casper Bach Poulsen)、阿伦·茨瓦恩(Aron Zwaan)和保罗·胡布纳(Paul Hübner)。2023.Mophasco(使用SCOpe图进行PHAsed名称解析的MOnadic框架)。https://doi.org/10.5281/zenodo.8337245谷歌学者谷歌学者数字图书馆数字图书馆
  33. Arjen Rouvoet、Hendrik van Antwerpen、Casper Bach Poulsen、Robbert Krebbers和Eelco Visser。2020年。知道何时提问:在源于声明性规范的类型检查器中合理安排名称解析。程序。ACM计划。Lang.,4,OOPSLA(2020),180:1–180:28。https://doi.org/10.1145/3428248谷歌学者谷歌学者数字图书馆数字图书馆
  34. Arjen Rouvoet、Hendrik van Antwerpen、Casper Bach Poulsen、Robbert Krebbers和Eelco Visser。2020年。知道何时提问:在源于声明性规范的类型检查器中对名称解析进行合理调度(扩展版)。泽诺。https://doi.org/10.5281/zenodo.4091445谷歌学者谷歌学者交叉引用交叉引用
  35. 瓦利德·塔哈和蒂姆·谢尔德。2000.带有显式注释的MetaML和多阶段编程。西奥。计算。科学。,248, 1-2 (2000), 211–242. https://doi.org/10.1016/S0304-3975(00)00053-0谷歌学者谷歌学者数字图书馆数字图书馆
  36. 奥马尔·萨贝特(Omar Thabet)。2023.Java分阶段类型检查器:基于范围图语义的Java子集的类型检查器。代尔夫特理工大学。http://resolver.tudelft.nl/uuid:f05ab738-0fde-48bc-b3b3-4a8a1345db4c谷歌学者谷歌学者
  37. 亨德里克·范安特卫彭(Hendrik van Antwerpen)、皮埃尔·尼龙(Pierre Neron)、安德鲁·托尔马赫(Andrew P.Tolmach)、埃尔科·维瑟(Eelco Visser)和吉多·瓦奇斯莫斯。2016.基于范围图的静态语义分析的约束语言。在2016年ACM SIGPLAN部分评估和程序操作研讨会的会议记录中,PEPM 2016,美国佛罗里达州圣彼得堡,2016年1月20日至22日,Martin Erwig和Tiark Rompf(编辑)。ACM,49–60岁。国际标准编号:978-1-4503-4097-7https://doi.org/10.1145/2847538.2847543谷歌学者谷歌学者数字图书馆数字图书馆
  38. 亨德里克·范安特卫彭(Hendrik van Antwerpen)、卡斯珀·巴赫·鲍尔森(Casper Bach Poulsen)、阿延·鲁沃特(Arjen Rouvoet)和埃尔科·维瑟(Eelco Visser)。2018.范围作为类型。程序。ACM计划。Lang.,2,OOPSLA(2018),114:1–114:30。https://doi.org/10.1145/3276484谷歌学者谷歌学者数字图书馆数字图书馆
  39. Aron Zwaan和Hendrik van Antwerpen。2023.范围图:迄今为止的故事。在2023年4月5日于荷兰代尔夫特、拉尔夫·拉梅尔、彼得·莫塞斯和弗里德里希·斯特曼(编辑)(OASIcs,第109卷)举行的埃尔科·维瑟纪念研讨会上,EVCS 2023。达格斯图尔-莱布尼兹·泽特鲁姆宫(Schloss Dagstuhl-Leibniz-Zentrum für Informatik),32:1–32:13。国际标准编号:978-3-95977-267-9https://doi.org/10.4230/OASIcs.EVCS.2023.32谷歌学者谷歌学者交叉引用交叉引用

索引术语

  1. 一种用于多阶段类型跳棋名称解析的Mondic框架

            建议

            评论

            登录选项

            检查您是否可以通过登录凭据或您的机构访问本文。

            登录

            完全访问权限

            • 文章指标

              • 下载次数(过去12个月)190
              • 下载次数(最近6周)41

              其他指标

            PDF格式

            以PDF文件的形式查看或下载。

            PDF格式

            电子阅读器

            使用eReader联机查看。

            电子阅读器