研究具有编译时内存管理功能的程序设计语言

2020-05-08 21:03:03

Micro-Mitten是一种类似于铁锈的基本编程语言,经过简化以简化控制流结构和类型系统。

与Rust一样,Micro-mitten提供了一种静态的内存管理方法;然而,Micro-mitten的方法与Rust有很大的不同。它不依赖于单一所有权和复杂的生命周期系统,而是使用一系列数据流分析来静态地近似堆活跃度。这意味着它保持了在适当的程序点插入释放代码的能力,而不会对您如何编写代码施加限制。本论文(Proust 2017)记录了该方法背后的理论。

长话短说,这是一次尝试,看看我们是否真的可以进行无限制的编译时垃圾收集。

该项目依赖于libgc和LLVM-8工具链。克隆此存储库并运行以下命令应该可以设置mmtnc(micromitten编译器)的工作副本。

./tools.sh#安装`mitten-test`、`mitten-Benchmark`、`ayn`和语言runtimecargo install--path./--force#安装`mmtnc`。

mmtnc将.mmtn文件编译为LLVM IR(.ll),并仅转储文本表示。更有帮助的是,您可以直接使用KINIT获得二进制文件。要从源文件(example.mmtn)构建二进制文件(示例),请使用以下命令:

--gc-Strategy参数是可选的,但默认情况下不使用垃圾收集(您的计算机会讨厌您)。其他选项是proust(使用静态内存管理)和bdw(使用libgc)。

要了解语言语法,请查看src/test/中的示例。如果你弄错了什么,编译器应该会对你发牢骚。否则,请打开一期!

请注意,micromitten纯粹是一种研究语言,在使用静态内存管理时其性能并不出色。有关完整的概要,请参阅我的论文。src/test/中的大多数示例都将使用静态内存管理运行,但也有一些值得注意的例外情况和一两个内存泄漏。