3.1.3类型系统 类型定义值的集合和值上操作集合(V,Op) 类型系统一组可直接使用的类型 类型规则 类型检查机制
3.1.3 类型系统 •类型定义 值的集合和值上操作集合(V,Op) •类型系统 一组可直接使用的类型 •类型规则 •类型检查机制
3.1.3类型系统 静态与动态 静动 变量有类型无类型动态简洁、灵活 参数有类型无类型静态清晰、死板 值有类型有类型 弱/强类型 无类型LISP, Smalltalk 弱类型变量有类型。类型兼容性大,系统不作检查 强制类型隐式类型强制(转换),自动截尾,补零。显式 类型强制PL/ 伪强类型静态均有类型且作检査,由于不严,导出等价准贝 Pascal 强类型类型有严格定义,均作检查Ada
3.1.3 类型系统 • 静态与动态 静 动 变量 有类型 无类型 动态简洁、灵活 参数 有类型 无类型 静态清晰、死板 值 有类型 有类型 • 弱/强类型 –无类型 LISP , Smalltalk –弱类型 变量有类型。类型兼容性大, 系统不作检查 –强制类型 隐式类型强制(转换),自动截尾, 补零。显式 类型强制 PL/1 –伪强类型 静态均有类型且作检查,由于不严,导出等价准则 Pascal –强类型 类型有严格定义, 均作检查 Ada
续 类型等价 按结构等价 type a is array (range 1.. 100 of INTEGER type b is array (range 1.100)of INTEGER OAl, 0A2: A OBI, OB2: B 0C1: array (range 1.. 100) of INTEGER OD1, OD2: array (range 1. 100) of INTEGER OE1: A 0A1,OA2,OB1,OB2,OC1,OD1,OD2,OE1均等价
•类型等价 按结构等价 type A is array (range 1.. 100) of INTEGER; type B is array (range 1..100) of INTEGER; OA1, 0A2: A; OB1, OB2: B; OC1: array (range 1.. 100) of INTEGER; OD1, OD2: array (range 1..100) of INTEGER; OE1: A; OA1,OA2,OB1,OB2,OC1,OD1,OD2,OE1均等价 续
续 按名等价 0A1,OA2是同一类型(都用A声明) 0A1,OB1,0C1是不同类型(类型名为A,B,无) OD1,OD2是同一类型(同时声明,虽无名) OD1,OC1是不同类型(两次声明) 0A1,OE1是同一类型(虽两次声明,但同名 类型完整性准则 涉及值的类型中不能随意限定操作, 力求没有第二类的值
按名等价 OA1, OA2 是同一类型(都用A声明) OA1, OB1, OC1是不同类型(类型名为A,B, 无) OD1, OD2 是同一类型(同时声明, 虽无名) OD1, OC1 是不同类型(两次声明) OA1, OE1 是同一类型(虽两次声明, 但同名) • 类型完整性准则 涉及值的类型中不能随意限定操作, 力求没有第二类的值 续
3.1.4类型兼容 不同类型值混合运算,人为定出计算级别,由低层升 格为高层,结果值是高层的 隐式转换弱类型I:=R; 显式转换强类型I:= Integer((R; 强类型按名判定,不同类型名则不兼容只有子类型 不同名可以兼容 显式和隐式混合
3.1.4 类型兼容 • 不同类型值混合运算, 人为定出计算级别,由低 层升 格为高层, 结果值是高层的 • 隐式转换 弱类型 I := R; 显式转换 强类型 I := Integer(R); • 强类型按名判定,不同类型名则不兼容只有子类型 不同名可以兼容 • 显式和隐式混合