是否有官方方法可以将通过引用传递的参数转换为指向完全相同类型的指针?我知道在编译的 CodeGen 阶段会ref int
变成int *
,并且我知道您可以使用extern来实现 C 互操作性,但是为了编写 Chapel 抽象又如何呢?此外,宽引用和宽指针的情况如何?你会如何处理这样的事情。
对于那些好奇的人,我正在尝试一些 PGAS-STM(分区全局地址空间 - 软件事务内存),我需要做的一件事是允许语义如下......
使用 STM 在列表前添加:
// Global variables
var head : node(eltType);
// Local variables
var newHead = new node(eltType);
var retry = false;
var stm = manager.getDescriptor();
do {
retry = false;
try! {
stm.begin();
// Takes pointer of 'head' via its reference...
// What happens if its a wide reference???
var h = stm.read(head);
newHead.next = h;
stm.write(head, nextHead);
stm.commit();
} catch retry : STMRetry {
retry = true;
}
} while retry;
是的,它目前很丑,但它是一个非常早期的原型。
编辑:更改命名STMBegin
为begin