数组索引是否需要是本机整数?

jjm*_*elo 6 raku

我正在尝试获取数组的 umptieth 元素:

my @lazy-array = lazy 1, 11, 121 ... 10**100;
say @lazy-array[10**50];
Run Code Online (Sandbox Code Playgroud)

这产生

Cannot unbox 167 bit wide bigint into native integer
Run Code Online (Sandbox Code Playgroud)

如果我将它分配给一个变量,同样的问题。这似乎没有反映在文档中,不知道是功能还是错误。另外,访问这些位置的正确方法是什么(迭代除外)

Eli*_*sen 7

在基于 NQP 的 Raku 当前实现中,数组索引最多为 63 位(至少在 64 位构建中)。

use nqp;
my $l := nqp::list;
dd nqp::atpos($l,0x7fff_ffff_ffff_ffff);  # Mu
dd nqp::atpos($l,0x7fff_ffff_ffff_ffff + 1);
# Cannot unbox 64 bit wide bigint into native integer
Run Code Online (Sandbox Code Playgroud)

我不会将其视为功能或错误,而是当前实现的限制。

请注意,如果您想使用更大的索引,您可以使用Array::Sparse

  • 鉴于即使您有一个“int1”数组,您*仍然*需要超过 1 艾字节的存储空间来处理超出 64 位整数的任何内容,我不确定这是否是我们实际上会遇到的限制时间很快。:-) (7认同)