返回
Zero-Overhead Lexical Effect Handlers
DOI:10.1145/3763177.png)
摘要
En 中文
异常处理程序——以及更一般的效应处理程序——是用于结构化非局部控制流的语言机制。语言设计研究中的一个近期趋势引入了词法作用域处理程序,它们解决了动态作用域的模块性问题。虽然动态作用域处理程序在未引发任何效应时允许零开销实现,但现有词法作用域处理程序的实现要求程序仅因在词法上下文中存在处理程序就支付成本。在本文中,我们提出了一种实现异常效应词法作用域处理程序的新方法。它满足零开销原则——这是大多数支持动态作用域异常处理程序的现代编译器所具备的特性。关键思想是一种类型指导的转换,它会发出指示处理程序如何进入词法作用域的信息。这些信息指导运行时遍历堆栈以定位正确的处理程序。关键在于,不需要处理程序的反射词法标识符,并且主代码不会因程序文本中存在处理程序而变慢。我们形式化了该编译方案的关键方面并证明了其正确性。我们将我们的方法集成到Lexa语言中,允许根据每个声明效应的预期调用率定制编译策略。实证结果表明,新的Lexa编译器在低效应或无效应场景下减少了运行时开销,同时保持了对效应密集型工作负载的竞争力性能。
Keyword:
Lexa
exception handling
algebraic effects
compiler correctness
期刊
P
IF:
2.8
论文数:
308
被引数:
4.7K

