代码记忆

学术界的强、弱类型,静态、动态类型

2020-02-15  本文已影响0人  hihuzi

类型系统的一些概念,众说纷纭,使用上也比较乱。有些东西,甚至不好严格定义。以下算学术界的一种相对“严格”的说法。

1. 先定义一些基础概念

Program Error

Forbidden Behaviours

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

Well behaved、ill behavedwell

2. 有了上面的概念,再讨论强、弱类型,静态、动态类型

强、弱类型

前面的人也说了,弱类型语言,类型检查更不严格,如偏向于容忍隐式类型转换。譬如说C语言的int可以变成double。 这样的结果是:容易产生forbidden behaviours,所以是弱类型的

静态类型 statically: 如果在编译时拒绝ill behaved程序,则是statically typed;
动态类型dynamiclly: 如果在运行时拒绝ill behaviors, 则是dynamiclly typed。

3. 误区

大家觉得C语言要写int a, int b之类的,Python不用写(可以直接写a, b),所以C是静态,Python是动态。这么理解是不够准确的。譬如Ocaml是静态类型的,但是也可以不用明确地写出来。。Ocaml是静态隐式类型

静态类型可以分为两种:如果类型是语言语法的一部分,在是explicitly typed显式类型;

如果类型通过编译时推导,是implicity typed隐式类型, 比如ML和Haskell

4.下面是些例子

来源:https://www.zhihu.com/question/19918532

上一篇 下一篇

猜你喜欢

热点阅读