用语法规则和call/cc重复应用实现正规序直接风格beta求值器

2025-09-17

这篇论文探讨了call/cc在Scheme宏中的不常见应用,特别是将其用于辅助繁琐的lambda计算。作者介绍了一种正规序直接风格beta归约器,它巧妙地结合了语法规则和call/cc的重复应用,并通过CPS变换和一个巧妙的直接风格lambda计算器来证明其正确性。论文还探讨了分界延续的概念,并展示了如何使用简单的宏来实现各种分界延续操作符,例如prompt和control。最终,作者通过一个基于call/cc的阶乘函数实现,以及对分界延续的讨论,突出了该方法的优雅性和实用性。

阅读更多
开发 call/cc

基于OCaml的增量式编译器课程:从Tiger语言到x86-64汇编

2025-04-05

这是一门实践性很强的编译器课程,目标是构建一个将高级Tiger语言编译成x86-64机器码的编译器。课程采用OCaml语言,并强调测试驱动开发、版本控制和代码复用。课程采用迭代式增量开发,逐步扩展语言和编译器功能,充分利用tagless-final风格提高可扩展性。课程涵盖了编译器课程的标准内容,例如解析、类型检查、代码优化和汇编生成,但以一种非常规的方式进行。

阅读更多
开发 增量开发

高效且具有洞察力的泛化

2024-08-18

这篇文章深入探讨了OCaml类型检查器中高效且鲜为人知的类型泛化方法,该方法由Didier Rémy于1988年发现。该方法的核心是将类型泛化视为依赖跟踪问题,类似于自动内存管理中的区域和分代垃圾回收机制。文章详细介绍了该算法的演变过程,从最初的 unsound_eager 到 sound_lazy,并解释了如何利用类型级别来跟踪类型变量的作用域,从而避免不必要的遍历和复制操作,提高类型推断的效率。文章还揭示了OCaml类型检查器中类型级别的其他应用,例如防止局部类型逃逸和类型检查存在类型等。

阅读更多
41
未分类 类型泛化

高阶有界多态

2024-07-28

文章探讨了在OCaml中表达高阶有界多态的多种方法。由于类型别名问题,OCaml不支持直接使用高阶类型变量,但可以通过函数式编程、降阶、初始代数等方法实现。文章以序列和代数嵌入为例,详细解释了每种方法的实现原理和优缺点,并提供了代码示例。

阅读更多
52
未分类 多态