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

用透明性实现OCaml模块

出版:2024年4月29日 出版历史

摘要

ML模块作为核心语言之上的附加层来提供大规模的组合和抽象概念。它们在很大程度上促成了OCaml和SML的成功。虽然模块很容易为常见情况编写,但它们的高级使用可能会变得棘手。此外,尽管有很长的一系列工作,但他们的元理论仍然很难理解,需要进行相关的稳健性证明。事实上,OCaml的模块层目前没有正式规范,其实现有一些令人惊讶的行为。
基于先前从ML模到Fω的转换,我们提出了一个类型系统,称为Mω,它涵盖OCaml模的一大子集,包括应用函子和生成函子,并通过透明归属进行扩展。该系统以类OCaml语法生成签名,并使用Fω量词进行扩展。我们提供了从Mω签名到基于路径的源签名的反向转换,以及签名避免情况的特征描述,使得Mω签字非常适合作为类型检查器的新内部表示。
Fω中的详细说明表明了类型系统的可靠性。通过引入透明存在类型,我们改进了应用函子中密封的先前编码,透明存在类型是一种较弱的存在类型,可以从通用类型和箭头类型中去掉。这为应用函子提供的抽象形式带来了新的曙光,使其处理更接近生成函子。

补充材料

辅助档案 (oopsla24main-p23-p-archive.zip)
本文档包含主要论文《透明实现OCaml模块》的补充材料。§1包含了几个小的附加说明性示例。本文件还提供了M𝜔的完整打字规则(§2)和锚定规则(§3),F𝜔的打字规则(§4),以及M𝜔到F𝜔的细化规则(§5)。锚固性能的证明见§3。

工具书类

[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。isbn:0897913434https://doi.org/10.1145/96709.96744
[12]
泽维尔·勒罗伊。1994.清单类型、模块和单独编译。第21届ACM SIGPLAN-SIGACT编程语言原理研讨会(POPL'94)会议记录。美国纽约州纽约市计算机机械协会109–122。编号:0897916360https://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年。使用核心语言中的一流模块进行编程,包括子类型、单例类型和开放存在类型。(程序员拥有一流的模块,这些模块的语言不包括类型、类型和类型)。法国帕莱索埃科尔理工学院。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),e22。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/S095679681400264
[24]
克劳迪奥·拉索。2000.标准ML.Nord.J.计算的一级结构。,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)会议记录。顶点,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系列/OCaml用户和开发者研讨会论文集》。22–63. https://doi.org/10.4204/EPTCS.198.2

引用人

查看全部

建议

评论

信息和贡献者

问询处

发布于

封面图片美国计算机学会程序设计语言论文集
美国计算机学会程序设计语言会议录 第8卷,发行OOPSLA1
2024年4月
1492页
EISSN公司:2475-1421
内政部:10.1145/3554316
期刊目录
本作品根据Creative Commons Attribution International 4.0许可证授权。

出版商

计算机协会

美国纽约州纽约市

出版历史

出版:2024年4月29日
在PACMPL中发布体积8,问题OOPSLA1公司

权限

请求对此文章的权限。

检查更新

作者标记

  1. F-欧米茄
  2. 毫升
  3. 应用函子
  4. 存在类型
  5. 签名回避

限定符

  • 研究文章

贡献者

其他指标

文献计量学和引文

文献计量学

文章度量标准

  • 0
    引文总数
  • 128
    总下载次数
  • 下载次数(过去12个月)128
  • 下载次数(最近6周)47
反映截至2024年9月18日的下载量

其他指标

引文

引用人

查看全部

视图选项

查看选项

PDF格式

以PDF文件查看或下载。

PDF格式

电子阅读器

使用联机查看电子阅读器.

电子阅读器

获取访问权限

登录选项

完全访问权限

媒体

数字

其他

桌子

分享

分享

共享此出版物链接

在社交媒体上分享