×

从规范到测试:Lua 5.2的语义工程。 (英语) Zbl 1512.68056号

摘要:我们在5.2版中为Lua编程语言的一大子集提供了形式化语义。语义是构建分析Lua代码的可靠工具的持续努力的主要部分。在这项工作中,我们展示了该语言的几个关键方面的细节,比如它唯一结构化数据类型的语义(桌子),其元编程机制(跖骨)错误处理,以及如何使用这些机制来定义一个复杂的动态语义,该语义必须在运行时处理几种可能的错误情况,具体取决于语言的性质。语义在Redex中实现了机械化,这是一种专门设计用于指定和调试操作语义的DSL。我们通过两种方式验证了机械化:第一,在Redex中执行Lua的引用解释器的测试套件,第二,使用Redex-check工具指定并执行其基本属性的随机测试。总之,它们证明了我们的模型很好地捕获了所选语言片段的语义。此外,我们通过使用一个简单的基于可达性的垃圾收集器实现来捕获Lua的关键方面,解决了在Redex中测试机械化时通常出现的一些性能问题。通过收集语法垃圾,我们减少了运行时配置的大小。最后,我们简要讨论了语义开发的这种途径,以及执行Lua程序静态分析的原型工具的实现。

MSC公司:

68甲15 编程语言理论
第68季度55 计算理论中的语义学
PDF格式BibTeX公司 XML格式引用
全文: 内政部

参考文献:

[1] Adobe:Adobe Lightroom®。https://www.adobe.io/apis/creativecloud/lightroom.html (2019). 2020年5月4日查阅
[2] Bodin,M.、Chargueraud,A.、Filareti,D.、Gardner,P.、Maffeis,S.、Naudziuniene,D.、Schmitt,A.、Smith,G.:一种可信的机械化JavaScript规范。In:2014年POPL·Zbl 1284.68381号
[3] Donnelly,K.,Hallett,J.J.,Kfoury,A.:弱引用的形式语义。摘自:ISMM’06第五届记忆管理国际研讨会论文集,第126-137页(2006)
[4] Felleisen,M.:lambda-v-cs转换的计算:命令式高阶编程语言中控制和状态的语法理论。印第安纳大学博士论文(1987年)
[5] Felleisen,M。;芬尔德,RB;Flatt,M.,《语义工程与PLT Redex》(2009),剑桥:麻省理工学院出版社,剑桥·Zbl 1183.68359号
[6] 加贝,Y。;Kfoury,AJ,java参考对象的微积分,SIGPLAN Not,42,8,9-17(2007)·doi:10.145/1294297.1294299
[7] Graham-Cumming,J.:CloudFlare的新WAF:编译为Lua。https://blog.cloudflare.com/cloudfleas-new-waf-compiling-to-lua (2013). 2020年5月4日访问
[8] Guha,A.,Saftou,C.,Krishnamurthi,S.:JavaScript的本质。In:ECOOP’10(2010)
[9] Haas,A.、Rossberg,A.、Schuff,D.L.、Titzer,B.L.、Holman,M.、Gohman,D.、Wagner,L.、Zakai,A.和Bastien,J.:通过WebAssembly加快网络速度。摘自:美国纽约州纽约市计算机械协会第38届ACM SIGPLAN编程语言设计与实现会议记录,PLDI 2017,第185-200页。doi:10.1145/3062341.3062363(2017)
[10] Ierusalimschy,R.:Lua编程。Lua.org(2003)
[11] Ierusalimschy,R。;de Figueiredo,左侧;Celes,W.,Lua-an可扩展扩展语言,软件,26,6,635-652(1996)
[12] Ierusalimschy,R.,de Figueiredo,L.H.,Celes,W.:扩展语言的演变:lua的历史。参加:巴西编程语言研讨会(2001年)
[13] Ierusalimschy,R.,de Figueiredo,L.H.,Celes,W.:Lua 5.2参考手册。www.lua.org/manual/5.2/manual.html(2013)
[14] Igarashi,A。;不列颠哥伦比亚省皮尔斯;Wadler,P.,Featherweight Java:Java和GJ的最小核心演算,TOPLAS,23396-450(2001)·doi:10.1145/503502.503505
[15] Klein,C.:PLT Redex中的随机测试。In:程序。方案和函数编程,第26-36页(2009年)
[16] Klein,C.,McCarthy,J.,Jaconette,S.,Findler,R.B.:上下文相关约简语义。In:APLAS’11(2011)
[17] Klein,C.、Clements,J.、Dimoulas,C.、Eastlund,C.、Felleisen,M.、Flatt,M.、McCarthy,J.A.、Rafkind,J.、Tobin Hochstadt,S.、Findler,R.B.:开展你的研究:关于轻量级机械化的有效性。摘自:第39届ACM SIGPLAN-SIGACT编程语言原理年度研讨会论文集,美国纽约州纽约市ACM,POPL'12,第285-296页,doi:10.1145/2103656.2103691(2012)·Zbl 0714.65036号
[18] Krebbers,R.,Wiedijk,F.:非局部控制流和块范围变量的分离逻辑。收录:FOSSACS’13,doi:10.1007/978-3-642-37075-5_17(2013)·Zbl 1260.68101号
[19] 马萨诸塞州利尔;Ierusalimschy,R.,终结器的形式语义,J UCS,11,7,1198-1214(2005)·doi:10.3217/jucs-011-07-1198
[20] Lin,H.:Featherweight Lua的操作语义。圣何塞州立大学硕士论文(2015年)
[21] Lua开发团队:Lua 5.2测试套件。https://www.lua.org/tests网站/ (2013). 2020年5月4日查阅
[22] Lua开发团队:Lua 5.2参考手册。https://www.lua.org/manual/5.2/manual.html (2015). 2020年5月4日查阅
[23] Lua开发人员:表达式作为语句。http://lua-users.org/wiki/ExpressionsAsStatements网站 (2009). 2020年5月4日查阅
[24] Lua开发人员:Lua分析器。http://lua-users.org/wiki/ProgramAnalysis (2014). 2020年5月4日查阅
[25] Lua开发人员:Lua实现。http://lua-users.org/wiki/lua实现 (2018). 2020年5月4日查阅
[26] Lua开发人员:Lua目录。http://lua-users.org/wiki/lua目录 (2020). 2020年5月4日查阅
[27] Lua开发人员:用途。https://www.lua.org/uses.html (2017). 访问日期:2020年5月4日
[28] LuaTex:LuaTex。http://www.luatex.org/languages.html (2018). 2020年5月4日查阅
[29] Maffeis,S.、Mitchell,J.C.、Taly,A.:JavaScript的操作语义。纳入:2008年APLAS
[30] 曼努拉:瓦拉格是二等公民。http://lua-users.org/wiki/VarargTheSecondClassCitizen(第二类公民) (2007). 访问日期:2020年5月4日
[31] Mascarenhas de Queiroz,F.:将动态语言优化编译为托管运行时环境。里约热内卢卡特里卡蓬蒂菲西亚大学博士论文(2009年)
[32] Moura,A。;罗德里格斯,N。;Ierusalimschy,R.,《卢阿岛的Coroutines》,J.Univers。计算。科学。,10, 7, 910-25 (2004)
[33] 皮尔斯,BC,类型和编程语言(2002),剑桥:麻省理工学院出版社,剑桥·Zbl 0995.68018号
[34] Politz,J.G.、Carroll,M.J.、Lerner,B.S.、Pombrio,J.、Krishnamurthi,S.:JavaScript中getter、setter和eval的测试语义。纳入:DLS’12(2012)
[35] Politz,J.G.,Martinez,A.,Milano,M.,Warren,S.,Patterson,D.,Li,J.,Chitipothu,A.,Krishnamurthi,S.:Python:完整月份:Python编程语言的测试语义。In:OOPSLA’13(2013)
[36] Rossberg,A.(编辑):网络组装规范。https://webassembly.github.io/spec/core网站/ (2021). 2021年2月20日访问
[37] Soldevila,M.,Ziliani,B.,Silvestre,B.,Fridlender,D.,Mascarenhas,F.:解码Lua:开发人员和语义学家的形式语义。摘自:第13届ACM SIGPLAN动态语言研讨会论文集,DLS 2017(2017)
[38] Soldevila,M.,Ziliani,B.,Fridlender,D.:理解Lua的垃圾收集:走向形式化的静态分析器。摘自:第22届声明性编程原则与实践国际研讨会论文集,PPDP 2020(2020)
此参考列表基于出版商或数字数学图书馆提供的信息。其项与zbMATH标识符进行启发式匹配,可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。