我正在瀏覽A Taste of Linear Logic中的一個示例。
它首先介紹了定義了常用操作的標準陣列(第 24 頁):

然后建議線性等價物(使用型別簽名的線性邏輯來限制陣列復制)將具有稍微不同的型別簽名:

其設計理念是,陣列包含的值復制起來很便宜,但陣列本身的復制成本很高,因此應該從使用傳遞到用作句柄。
問題:查找和更新的簽名與標準簽名很好地對應,但是我如何解釋新的簽名?
特別是:
- 函式 new 似乎沒有回傳陣列。如果沒有提供一個陣列,我該如何使用?
- 我想我確實理解這
Arr –o Arr x X是無法使用線性邏輯推導的,因此需要一個在不消耗陣列的情況下提取單個值的函式,但我不明白為什么 new 不直接提供該函式
uj5u.com熱心網友回復:
實際上,這是關于垃圾收集的。
線性邏輯避免了復制以及留下未使用的值。因此,當您使用 創建陣列時new,您還需要確保它最終再次被清理。
你怎么能確保它被清理干凈?好吧,在這個例子中,他們通過不回傳陣列作為結果來做到這一點,而是將它“借給”呼叫者。除了您真正感興趣的結果之外,函式Arr ? Arr ? X最后必須回傳一個陣列。假設這將是您開始使用的陣列的修改形式。只有X被傳回給呼叫者,Arr被釋放。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/434046.html
上一篇:C#過濾器串列,全部或具有給定值
