[翻译]Rust借用模型-基于栈的借用模型-操作语义学的正式定义

Stacked Borrows: An Aliasing Model for Rust笔记

 

本节的目的是正式定义到目前为止我们在本文中非正式描述的内容。完整的正式定义可以在我们的技术附录中找到[Jung等。 2019]。

 

高层结构在较高的层次上,我们将堆积借款定义为带标签的过渡系统,其中标签是事件(最重要的是读写访问和重新标记),状态由以下记录描述(某些其余相关域如图2所示:

 

这里。 STACKS跟踪每个位置的堆栈,CALL跟踪当前的活动呼叫ID列表(需要实现PROTECTOR),NEXTPTR和NEXTCALI用于生成新的指针ID和呼叫ID。此方法将堆叠借用与其他语言解耦:该语言的操作语义可以只包含一个SState,并在发生相关事件时对该状态进行适当的转换。因此,与上一节不同,我们不在每个位置的值和堆栈中使用单个堆h E Mem。只有堆栈与堆栈借用相关,并且SState在其STACKS字段中对其进行跟踪:假定堆中存储的实际值由其余语义处理。在图2中,我们还将Item重新定义为三元组,

以便在数据中反映出通用结构(权限,标签和可选的保护器)。

(a permission, a tag, and an optional protector)

图2同样定义了可能的事件和最重要的转换。这些事件包括所有内存访问(读取,写入,分配和释放),以及启动和结束函数调用(与跟踪调用有关)使保护器起作用的ID)
当然还有重新标记这些事件中的大多数参数是“输入参数”,因为它们代表了来自外部世界的信息,这些信息来自堆叠借款子系统。只有呼叫事件中的呼叫ID c和重标记事件中的新标记tnew是“输出参数”,代表堆叠借项返回到外部世界的信息。每个事件对堆叠借项状态s的影响由a表示。给定前一个状态的函数,计算下一个状态。我们使用带有[FIELD:= el的s作为表示法来更新记录的单个字段(并且,正如我们将在后面看到的,还用于更新有限局部图的元素)。
考虑到堆栈借阅的算法性质,我们认为它比这种关系式更适合这种计算方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值