我正在与vellvm合作,开发一个转型。我是一名新手。
这是原子实现: http://www.cis.upenn.edu/~plclub/popl08-tutorial/code/coqdoc/Atom.html
例如,在vellvm中,原子被用作ids和标签。
我想在一个llvm转换中插入一段代码,为此我必须给出一个类型为“atom”的标签。如何构建Atom标签?
让我的问题更加笼统: 1)为什么有人想要使用Atom? 2)我怎样才能构建一个? 3)如果我以这种方式构建,我是否会考虑原子在代码中的使用方式不同?
谢谢!
编辑:ID和标签的代码
Definition id := atom. (*r identities *)
Definition l := atom. (*r labels *)
答案 0 :(得分:3)
查看你指出的文件(由Chargueraud和Aydemir撰写),你明白原子类型用于表示你可以用来给事物命名的任何类型。
函数atom_fresh_for_list应该用于创建一个新原子。此函数的类型表明它不仅返回任意原子,而且还证明您获得的原子不存在于您作为参数给出的列表中。这是你创建一个新的:你把所有旧的都放在一个列表中,然后用函数atom_fresh_for_list作为参数调用它。因此,您将获得类型{x:atom |的值...}。这不完全是一个原子:它是一个有更多信息的原子。你可以写下:
来掌握原子let(v,h):= atom_fresh_for_list ... in ...
然后,在第二个“...”中,变量v包含原子,您可以使用它。如果你需要证明这个原子是一个新原子,那么你可以使用另一个变量h。
伊夫
答案 1 :(得分:2)
Yves能够部分回答它,只是没有一个如何构建原子的例子。你需要使用projT1。以下是此代码:
Definition an_atom : atom := (projT1 (atom_fresh_for_list nil)).
其中nil是任何列表。