我正在开发一些代码生成工具,很多复杂性来自于范围分析。我经常发现自己想知道诸如
- 函数或块的自由变量是什么?
- 这个符号在哪里声明?
- 这个声明掩盖了什么?
- 这种符号的使用是否可能在初始化之前发生?
- 这个变量有可能逃脱吗?
我认为是时候重新考虑我的范围界定问题了。
我可以完成所有这些分析,但我正在尝试找出一种构建 API 的方法,以便它易于使用,并且理想情况下,可以懒惰地完成足够多的这项工作。
人们熟悉哪些类似的工具,他们在 API 中做对与错的地方是什么?
我正在开发一些代码生成工具,很多复杂性来自于范围分析。我经常发现自己想知道诸如
我认为是时候重新考虑我的范围界定问题了。
我可以完成所有这些分析,但我正在尝试找出一种构建 API 的方法,以便它易于使用,并且理想情况下,可以懒惰地完成足够多的这项工作。
人们熟悉哪些类似的工具,他们在 API 中做对与错的地方是什么?
我对这个问题有点惊讶,因为我已经完成了大量的代码生成,而且很少出现范围界定的问题(除了偶尔生成唯一名称的愿望)。
要回答您的示例问题,需要认真的程序分析远远超出范围界定。逃逸分析本身是不平凡的。根据目标语言,初始化前使用可以是微不足道的,也可以是非微不足道的。
以我的经验,用于程序分析的 API很难设计并且经常是特定于语言的。如果您的目标是低级语言,您可能会从Machine SUIF API 中学到一些有用的东西。
在你的位置上,我很想窃取别人的程序分析框架。 George Necula和他的学生构建了CIL,这似乎是当前分析 C 代码的标准。 Laurie Hendren的小组已经构建了一些很好的 Java 分析工具。
如果我不得不自己动手,我会更少担心 API,而更多地担心抽象语法树的非常好的表示。
在非常有限的数据流分析领域(包括未初始化变量问题),João Dias 和我改编了Sorin Lerner、David Grove 和 Craig Chambers 的一些出色工作。仅公布我们的初步结果。
最后,如果您想生成多种语言的代码,那么这就是一个完整的蠕虫罐头。我已经做了好几次了。如果您创建了自己喜欢的东西,请发布它!