为什么线性数组的类型签名与普通数组相比会发生变化?

Why does the type signature of linear array change compared to normal array?

我正在看 A Taste of Linear Logic 中的一个例子。

首先介绍定义了常用操作的标准数组(第24页):

然后建议线性等价物(对类型签名使用线性逻辑来限制数组复制)将具有稍微不同的类型签名:

它的设计理念是数组包含的值复制起来很便宜,但数组本身复制起来很昂贵,因此应该作为句柄从一个用途传递到另一个用途。

问题:lookup 和 update 的签名与标准签名一致,但是如何解释新的签名?

特别是:

实际上,这是关于垃圾收集的。

线性逻辑避免复制以及留下未使用的值。所以当你用 new 创建一个数组时,你还需要确保它最终被再次清理。

如何确保它已清理干净?好吧,在这个例子中,他们通过不返回数组作为结果来做到这一点,而是将它“借”给调用者。函数 ArrArrX 最后必须返回一个数组,除了结果是您真正感兴趣的。假设这将是您开始使用的数组的修改形式。只有 X 被传递回调用者,Arr 被释放。