#抽象 #编译器 #mlir #ir #可扩展 #解释 #生成

abstraps

具有抽象解释和代码生成到MLIR的可扩展编译器中间层

9个版本

0.1.8 2021年12月31日
0.1.7 2021年12月23日

#932 in 编程语言

自定义许可

115KB
3K SLoC

abstraps

CI crates.io docs.rs

具有抽象解释器的可扩展编译器设计。

这个项目最初是一个编译器设计的实验。具体来说,作者被以下所激励:

  1. 研究 Julia语言和编译器推理系统 以了解具有可扩展抽象解释作为编译器(以及可能作为语言!)功能的语言设计。
  2. 研究 MLIR 以及从项目中涌现出的关于IR和编译器设计的新颖而强大的想法。

事实证明,有许多语言(例如Crystal、Nim、Julia)正在尝试将抽象解释作为它们类型系统的一部分进行实验。从长远来看,这个项目的目标可能是提供一个稳定的平台来实验编译器设计,在支持类似MLIR的可扩展概念的自定义IR框架中实现抽象解释器。

声明

该框架提供

  1. 与MLIR同构的概念的中间表示。
  2. 定义在IR上作为抽象虚拟机的解释器的接口,以及用于标准设计模式的参考(可用的!)解释器。
  3. 支持代码生成到MLIR的构建器接口。

“可扩展性”意味着IR(或任何接口)中没有任何固定的内建原语。对于抽象格也是如此——解释器模式描述了抽象解释器(某些实例)如何遍历IR,但用户必须通过指定内建原语以及解释器如何在用户定义的格上解释这些内建原语来提供语义。


注意:

原始作者本来只想在MLIR本身中完成这个项目——但鉴于时间限制和工程能力(或在C++中的缺乏),这个项目是用Rust实现的。事实上,对于对MLIR感兴趣的人来说——你可能会发现“另一种实现观点”对设计概念有用。代码库已经根据从MLIR的非平凡实现决策及其动机进行了文档记录。
McCoy R. Becker哈佛CS 252r 期间启动。所有代码都根据MIT许可授权。

依赖

~4.5–8.5MB
~155K SLoC