如何 return 引用 Chapel 中的数组切片?

How to return a reference to a slice of an array in Chapel?

我正在尝试 return 对数组切片的引用,但出现以下编译时错误(违规行位于 slice

test.chpl:9: error: illegal expression to return by ref

返回整个数组工作正常,在主程序中引用一个切片也是如此。

是否有 return 切片引用的正确方法?提前致谢!

record R {
  var A : [0.. #10] int;

  proc full() ref {
    return A;
  }

  proc slice() ref {
    return A[0.. #5];
  }
}

var r : R;
ref x1 = r.full();
ref x2 = r.slice();
ref x3 = x1[0.. #5];

只是为了完整性:

chpl Version 1.16.0 pre-release (2659cc6)

对于您使用的当前版本的编译器,这是一个在 GitHub issue #5341 上进行辩论的悬而未决的问题。我同意你的看法,ref 似乎是一种适当的方式来表明 return 数组的一部分的意图,但我们还没有结束讨论。

与此同时,您应该能够使用以下基于 pragma 的解决方法(请注意 Chapel pragma 通常不供最终用户使用,并且该 pragma 不太可能在长期内得到支持,尽管我不希望我们在没有提出像提议的 ref):

那样的替代方法的情况下淘汰它
record R {
  var A : [0.. #10] int;

  proc full() ref {
    return A;
  }

  pragma "no copy return"
  proc slice() {
    return A[0.. #5];
  }
}

var r : R;
ref x1 = r.full();
ref x2 = r.slice();
ref x3 = x1[0.. #5];
x1[0] = 1;
x2[1] = 2;
x3[2] = 3;
writeln(r);