[PFPL] Ch 6. 学习

CH 6 Type Safety[类型安全]

大多数语言都是安全的(或者说是类型安全/强类型的)。非形式化地说,这意味着某些mismatch在执行时不会出现。例如,对E来说,类型安全是指将不会出现一个数字与一个字符串想加,或者两个数字做连接,这两种情况都没有意义。
通常来说,类型安全表达了statics和dynamics的内在一致性。Statics可以理解为预测一个表达式的值将具有特定形式,以至于dynamics是良定义的。因此,求值不会陷入“stuck”的状态,对应到实现部分即在执行时不会出现非法指令的错误。safety可以,通过证明transition的每一步都维持typability以及typable states是良定义的,进行证明。

对于E来说,它的类型安全可以被精确地如下表示:
在这里插入图片描述
第一部分,称为“preservation”,求值的每一步维持typing;第二部分,称为“progress”,确保well-typed的表达式要么是值,要么能进一步求值。safety是这两个性质一同维护的。
我们说表达式e是stuck的,当且仅当 它不是一个值,但不能进一步求值。

6.1 Preservation

我们需要注意这一性质一般是对transition[dynamics]部分进行归纳

6.2 Progress

对statics进行归纳

6.3 Run-time Errors

在这里插入图片描述
即使这个表达式是well-typed,但是仍会stuck!
有两种选择来解决这个问题:

  1. 加强类型系统,以至于不会出现这种➗0的程序
  2. 添加动态检查,以至于除0会发出错误作为求值的结果。
    两种选择原则上都可行,但最常用的方法是第二种。第一种方法要求type checker证明表达式是非0的,我们不能静态地预测一个表达式在求值后是否是非零的,所以第二种方法更常用。
    整体的思想是区分checked以及unchecked错误。unchecked错误是指由类型系统排除的错误。并不会在运行时检查来确保这种错误不会出现,因为这种错误的可能性已经被类型系统排除。
    一种建模checked errors的方法是给judgement e err一个归纳定义,表示表达式e可能会引起运行时错误。
    在这里插入图片描述
    我们可以引入error作为表达式,下面为对应的static and dynamic semantics:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值