跳到主要内容
研究论文
开放式访问

透明实现OCaml模块

出版:2024年4月29日出版历史
跳过抽象节

摘要

ML模块作为核心语言之上的附加层提供大规模的合成和抽象概念。他们主要是为OCaml和SML的成功做出了贡献。虽然模块很容易编写对于常见情况,它们的高级使用可能会变得棘手。此外,尽管有很多工作要做,但他们的元理论仍然很难理解,并提供相关的可靠性证明。实际上OCaml目前没有正式的规范及其实现有一些令人惊讶的行为。

基于先前从ML模块到Fω的转换,我们提出了一种类型系统,称为Mω,涵盖OCaml模块的一大子集,包括应用函子和生成函子,并用透明函子进行扩展归属。该系统以扩展的OCaml类语法生成签名带有Fω量词。我们提供了从Mω签名到基于路径的源签名及其特征避免案例,使Mω签名非常适合作为新的内部签名类型检查器的表示。

Fω中的详细说明表明了类型系统的可靠性。我们改进了在应用函子中先前的密封编码上引入透明存在类型,一种较弱的存在形式可以从通用类型和箭头类型中提取出来的类型。这让你焕然一新根据应用函子提供的抽象形式它们的处理方式更接近于生成函子。

跳过补充材料部分

补充材料

工具书类

  1. 桑德普·比斯沃斯(Sandip K.Biswas)。1995.具有透明签名的高阶函数。第22届ACM SIGPLAN-SIGACT编程语言原理研讨会会议记录(POPL'95)。计算机械协会,美国纽约州纽约市154-163。编号:0897916921https://doi.org/10.1145/199448.199478谷歌学者谷歌学者数字图书馆数字图书馆
  2. Clément Blaudeau、Didier Rémy和Gabriel Radanne。2024.透明实现OCaml模块(补充材料)。https://doi.org/10.1145/3649818谷歌学者谷歌学者数字图书馆数字图书馆
  3. 卡尔·克莱里。2017.模块、抽象和参数多态性。第44届ACM SIGPLAN编程语言原理研讨会会议记录(POPL 2017)。ACM,美国纽约州纽约市,100-113。国际标准编号:978-1-4503-4660-3https://doi.org/10.1145/3009837.3009892活动地点:法国巴黎谷歌学者谷歌学者数字图书馆数字图书馆
  4. 卡尔·克莱里。2019.完全抽象模块编译。程序。ACM计划。Lang.,3,POPL(2019),第10条,1月,29页。https://doi.org/10.1145/3290323谷歌学者谷歌学者数字图书馆数字图书馆
  5. 卡尔·克莱里。2020年,重点解决回避问题。《函数编程杂志》,30(2020),e24。发行号:0956-7968、1469-7653https://doi.org/10.1017/S0956796820000222谷歌学者谷歌学者交叉引用交叉引用
  6. 德里克·德雷尔(Derek Dreyer)。2007.递归类型生成性。函数编程杂志,17,4-5(2007),433-471。https://doi.org/10.1017/S0956796807006429谷歌学者谷歌学者数字图书馆数字图书馆
  7. 德里克·德雷尔(Derek Dreyer)、卡尔·克莱里(Karl Crary)和罗伯特·哈珀(Robert Harper)。2003.高阶模块的类型系统。2003年1月15日至17日,美国路易斯安那州新奥尔良市,第30届SIGPLAN-SIGACT编程语言原理研讨会,亚历克斯·艾肯和格雷格·莫里塞特(编辑),POPL 2003会议记录。美国医学会,236–249。https://doi.org/10.1145/604131.604151谷歌学者谷歌学者数字图书馆数字图书馆
  8. 德里克·德雷尔(Derek Dreyer)、罗伯特·哈珀(Robert Harper)和卡尔·克里(Karl Crary)。2005.了解和发展ML模块系统。博士论文。美国编号:0542015501 AAI3166274谷歌学者谷歌学者
  9. 雅克·瓜里格和利奥·怀特。2014.类型级模块别名:独立和平等。ML系列/OCaml用户和开发人员研讨会。https://www.math.nagoya-u.ac.jp/~garrigue/papers/modalias.pdf谷歌学者谷歌学者
  10. 罗伯特·哈珀和马克·利利布里奇。1994年。具有共享的高阶模块的类型理论方法。第21届ACM SIGPLAN-SIGACT编程语言原理研讨会论文集(POPL'94)。美国纽约州纽约市计算机机械协会,123-137。编号:0897916360https://doi.org/10.1145/174675.176927谷歌学者谷歌学者数字图书馆数字图书馆
  11. 罗伯特·哈珀、约翰·米切尔和尤金尼奥·莫吉。1989.高阶模块和相位区分。第17届ACM SIGPLAN-SIGACT编程语言原理研讨会(POPL'90)会议记录。美国纽约州纽约市计算机协会341-354。编号:0897913434https://doi.org/10.1145/96709.96744谷歌学者谷歌学者数字图书馆数字图书馆
  12. 泽维尔·勒罗伊。1994.清单类型、模块和单独编译。在第21届ACM SIGPLAN-SIGCT程序设计语言原理研讨会论文集(POPL’94)。美国纽约州纽约市计算机协会109-122。isbn:08979916360https://doi.org/10.1145/174675.176926谷歌学者谷歌学者数字图书馆数字图书馆
  13. 泽维尔·勒罗伊。适用函子和完全透明的高阶模。第22届ACM SIGPLAN-SIGACT编程语言原理研讨会会议记录-POPL'95。美国加利福尼亚州旧金山ACM出版社。142–153. 国际标准编号:978-0-89791-692-9https://doi.org/10.1145/199448.199476谷歌学者谷歌学者数字图书馆数字图书馆
  14. 泽维尔·勒罗伊。2000.模块化模块系统。J.功能。程序。,10, 3 (2000), 269–303. http://journals.cambridge.org/action/displayAbstract?aid=54525谷歌学者谷歌学者数字图书馆数字图书馆
  15. 大卫·B·麦昆。1986.使用依赖类型表示模块化结构。美国纽约州纽约市计算机械协会277–286。编号:9781450373470https://doi.org/10.1145/512644.512670谷歌学者谷歌学者数字图书馆数字图书馆
  16. 阿尼尔·马达瓦佩迪、理查德·莫蒂尔、查拉兰波斯·罗索斯、大卫·斯科特、巴尔拉杰·辛格、托马斯·加扎格奈尔、史蒂文·史密斯、史蒂文·汉德和乔恩·克劳克罗夫特。2013年。Unikernels:用于云的库操作系统。2013年3月16日至20日,美国德克萨斯州休斯顿,《编程语言和操作系统的架构支持》,Vivek Sarkar和Rastislav Bodík(编辑)。美国医学会,461-472。https://doi.org/10.1145/2451116.2451167谷歌学者谷歌学者数字图书馆数字图书馆
  17. 约翰·米切尔(John C.Mitchell)和戈登·普洛金(Gordon D.Plotkin)。1985.抽象类型具有存在类型。第十二届ACM SIGACT-SIGPLAN编程语言原理研讨会(POPL’85)会议记录。美国纽约州纽约市计算机机械协会37–51。编号:0897911474https://doi.org/10.1145/318593.318606谷歌学者谷歌学者数字图书馆数字图书馆
  18. 贝诺·蒙塔古。2010年。使用核心语言中的一流模块进行编程,包括子类型、单例类型和开放存在类型。(程序员使用noyau pourvu de sous-typage语言对高级模块进行分类,对单一类型和现有类型进行分类)。法国帕莱索埃科尔理工学院。https://tel.archives-ouvertes.fr/tel-00550331谷歌学者谷歌学者
  19. 贝诺·蒙塔古和迪迪埃·雷米。2009.使用开放存在类型在模块中建模抽象类型。第36届ACM程序设计语言原理研讨会会议记录(POPL'09)。美国佐治亚州萨凡纳354–365。国际标准编号:978-1-60558-379-2https://doi.org/10.1145/1480881.1480926谷歌学者谷歌学者数字图书馆数字图书馆
  20. 加布里埃尔·拉丹(Gabriel Radanne)、托马斯·加加内尔(Thomas Gazagnaire)、安妮尔·马达瓦佩迪(Anil Madhavapedy)、杰里米·亚洛普(Jeremy Yallop)、理查德·莫蒂尔(Richard Mortier)、汉内斯·梅内特(Hannes Mehnert。2019.通过函数驱动开发大规模编程Unikernel。arxiv:1905.02529。谷歌学者谷歌学者
  21. 安德烈亚斯·罗斯伯格(Andreas Rossberg),2018年。1ML-核心和模块相结合。J.功能。程序。,28(2018),第22页。https://doi.org/10.1017/S0956796818000205谷歌学者谷歌学者交叉引用交叉引用
  22. 安德烈亚斯·罗斯伯格和德里克·德雷尔。2013年,混合ML模块系统。ACM事务处理。程序。语言系统。,35,1(2013),4月,2:1–2:84。发行号:0164-0925https://doi.org/10.1145/2450136.2450137谷歌学者谷歌学者数字图书馆数字图书馆
  23. 安德烈亚斯·罗斯伯格(Andreas Rossberg)、克劳迪奥·拉索(Claudio Russo)和德里克·德雷尔(Derek Dreyer)。2014.F-ing模块。函数编程杂志,24,5(2014),9月,529-607。发行号:0956-7968、1469-7653https://doi.org/10.1017/S0956796814000264谷歌学者谷歌学者交叉引用交叉引用
  24. 克劳迪奥·拉索。2000.标准ML.Nord.J.Comput.的一级结构。,7, 4 (2000), 348–374.谷歌学者谷歌学者数字图书馆数字图书馆
  25. 克劳迪奥·拉索。2004.模块类型。理论计算机科学电子笔记,60(2004),3-421。发行编号:1571-0661https://doi.org/10.1016/S1571-0661(05)82621-0谷歌学者谷歌学者交叉引用交叉引用
  26. 中山。2004年,系统F^ω和Haskell中的高阶模块。1谷歌学者谷歌学者
  27. 钟绍。1999.具有完全句法特征的透明模块。1999年9月27日至29日,法国巴黎,第四届ACM SIGPLAN函数式编程国际会议(ICFP’99)会议记录。ACM,220–232。https://doi.org/10.1145/317636.317801谷歌学者谷歌学者数字图书馆数字图书馆
  28. 菲利普·西奇科夫斯基(Filip Sieczkowski)、谢尔盖·斯蒂潘尼科(Sergei Stepanenko)、乔纳森·斯特林(Jonathan Sterling)和拉尔斯·比克达尔(Lars Birkedal)。2024.广义代数数据类型的本质。程序。ACM计划。Lang.,8,POPL(2024),第24条,1月,29页。https://doi.org/10.1145/3632866谷歌学者谷歌学者数字图书馆数字图书馆
  29. 利奥·怀特(Leo White)、弗雷德里克·鲍尔(Frédéric Bour)和杰里米·亚洛普(Jeremy Yallop)。2014.模块隐含。2014年9月4日至5日,瑞典哥德堡,ML/OCaml 2014年,ML Family/OCaml用户和开发者研讨会论文集。https://doi.org/10.4204/EPTCS.198.2谷歌学者谷歌学者交叉引用交叉引用

索引术语

  1. 透明实现OCaml模块

            建议

            评论

            登录选项

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

            登录

            完全访问权限

            • 发布于

              封面图片美国计算机学会编程语言会议录
              美国计算机学会程序设计语言会议录 第8卷,发行OOPSLA1
              2024年4月
              1492页
              EISSN公司:2475-1421
              内政部:10.1145/3554316
              期刊目录

              版权所有©2024所有者/作者

              本作品获得知识共享署名国际4.0许可。

              出版商

              计算机协会

              美国纽约州纽约市

              出版历史

              • 出版:2024年4月29日
              发布于太平洋石油公司第8卷,发行OOPSLA1

              权限

              请求有关此文章的权限。

              请求权限

              检查更新

              限定符

              • 研究论文
            • 文章指标

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

              其他指标

            PDF格式

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

            PDF格式

            电子阅读器

            使用eReader联机查看。

            电子阅读器