全抽象与鲁棒编译及轻量级Go语言的字典传递翻译
1 全抽象与鲁棒编译相关内容
1.1 抽象定义的优势
可以轻松计算 τ,并能立即确定满足源非干扰性(NIS)的程序是否能编译为满足目标非干扰性(NIT)的程序。为了实现这一点,需要将 Z 与源和目标的跟踪及超属性联系起来。Z 中的元素是一种函数,它为每个 s ∈ S 分配一个新状态 s′,可能还有额外符号如! 或 H,以及一个延续函数。跟踪则是可能包含额外符号 H 和! 的存储序列。每个跟踪对应 Z 中的一个元素,而 Z 中的每个函数对应一组跟踪。因此,可以证明 τ 将 NIS(对应 Z 中的函数集)映射到 NIT(对应函数集)的一个子集,即编译器 〈·〉 能保持鲁棒满足性。
1.2 相关工作
1.2.1 全抽象的起源与应用
全抽象用于关联编程语言的操作语义和指称语义。当一个语言的指称语义对于同一语言的操作语义是全抽象的,意味着上下文等价的项具有相同的指称。常见用于定义上下文等价的方式是等收敛和等发散。不过,完全抽象翻译在比较语言表达能力时可能会产生误判。
1.2.2 全抽象与安全编译
Abadi 最初提议使用全抽象来在从源语言 L1 到目标语言 L2 的翻译中保留安全属性。全抽象翻译或编译器能保留和反映等价性,因此可用于保留以等价形式表达的安全属性。例如,Bowman 和 Ahmed、Busi 等人以及 Skorstengaard 等人的工作。但需注意,并非所有安全属性都能被全抽象编译器保留。
1.2.3 超越全抽象
存在多种“行为良好的翻译”定义,具体取决于场景和翻译中要保留的属性。若目标是