类型安全_信息安全

什么是类型安全?

在计算机科学中,⼀部分编程语⾔具备类型安全的性质。这个术语在不同的社群中有不同的定义,特别是正规的类型理论上的定义远远强过⼤多数的程序员的理解,但对于使⽤类型系统的认知,皆旨在避免必然的错误形式,和不良的程序⾏为(称为类型错误)。

类型安全可以静态⽅式实施,及早在编译时期就捕捉到潜藏的错误;或者以动态⽅式,在运⾏时期观察类型的信息,并在必要时检测即将发⽣的错误。类型安全是编程语⾔的性质,而不是程序所⾃有的。

某个⾏为之所以会被编程语⾔归类为类型错误,通常是因为试图对不适当类型的值进⾏运算。其分类的基本原则是:部分语⾔设计者和程序员的看法认为,如果所有运算不引起程序⽡解、安全上的瑕疵、或其它明显故障,即为合理的,而不视之为⼀个错误;其他⼈则认为所有违背程序员意图的,就是错误的,而且应该标上“不安全”。


依据类型安全划分语言

1 先定义一些概念

Program Errors

  • trapped errors:导致程序终止执行,如除0,Java中数组越界访问
  • untrapped errors:出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址

Forbidden Behaviours

  • 语言设计时,可以定义一组forbidden behaviors. 它必须包括所有untrapped errors, 但可能包含trapped errors.

Well behaved、ill behaved

  • well behaved: 如果程序执行不可能出现forbidden behaviors, 则为well behaved。
  • ill behaved: 否则为ill behaved
2 强类型、弱类型

强类型strongly typed:

  • 如果一种语言的所有程序都是well behaved——即不可能出现forbidden behaviors,则该语言为strongly typed。

弱类型weakly typed:

  • 否则为weakly typed。比如C语言的缓冲区溢出,属于trapped errors,即属于forbidden behaviors…故C是弱类型

弱类型语言常有特点为类型检查不严格,即容忍隐式的类型转换,如C语法中不同类型的变量可以不经过隐式类型转换即使用,这样容易产生如缓冲区溢出这样的untrapped errors。

3 静态类型、动态类型

静态类型 statically:

  • 如果在编译时拒绝ill behaved程序,则是statically typed;
  • 静态类型可以分为两种:
    如果类型是语言语法的一部分,在是explicitly typed显式类型;
    如果类型通过编译时推导,是implicity typed隐式类型, 比如ML和Haskel

动态类型dynamiclly:

  • 如果在运行时拒绝ill behaviors, 则是dynamiclly typed。
可视化解释

在这里插入图片描述

红色区域外:well behaved (type soundness)
红色区域内:ill behaved
如果所有程序都是灰的,strongly typed
否则如果存在红色的程序,weakly typed
编译时排除红色程序,statically typed
运行时排除红色程序,dynamically typed
所有程序都在黄框以外,type safe

例子

在这里插入图片描述


Reference:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值