强类型,弱类型,动态类型,静态类型
来源:互联网 发布:sql server 实例名 编辑:程序博客网 时间:2024/05/29 14:59
1,动态语言的最大特点就是duck type,他的灵活性可以完全无视什么多态和接口,不用被类型束缚。但是这就导致了你的大部分错误都要再运行时才能发现
2,
强类型,定义好类型后,编译器给你检查赋值的类型。
弱类型,由于没有定义,必须编写代码进行赋值检查。
强类型,IDE比较容易定位错误的赋值类型,所以这样的语言使用IDE比较方便
弱类型,IDE基本无法辨别赋值类型的错误,更合适使用编辑器。
强类型由于变量类型定义好了,所以数组保证了所有值的类型一致。当然你可以gentic的类去变相地绕过这个限制,但是要付出一些性能上的减弱。
弱类型的数组,可以类型混用,用起来方便,但数组有类型要求的话,反而麻烦。
强类型,由于事先定义好了,所以基本是静态分配内存大小,这样可以提高性能
弱类型,由于无法测算内存使用量,要动态分配内存,所以程序效率相对低。
3,下面是些例子
无类型: 汇编
弱类型、静态类型 : C/C++
弱类型、动态类型检查: Perl/PHP
强类型、静态类型检查 :Java/C#
强类型、动态类型检查 :Python, Scheme
静态显式类型 :Java/C
静态隐式类型 :Ocaml, Haskell
弱类型、静态类型 : C/C++
弱类型、动态类型检查: Perl/PHP
强类型、静态类型检查 :Java/C#
强类型、动态类型检查 :Python, Scheme
静态显式类型 :Java/C
静态隐式类型 :Ocaml, Haskell
作者:rainoftime
链接:https://www.zhihu.com/question/19918532/answer/21647195
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
链接:https://www.zhihu.com/question/19918532/answer/21647195
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1. 先定义一些基础概念
大家觉得C语言要写int a, int b之类的,Python不用写(可以直接写a, b),所以C是静态,Python是动态。这么理解是不够准确的。譬如Ocaml是静态类型的,但是也可以不用明确地写出来。。
Ocaml是静态隐式类型
静态类型可以分为两种:
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是弱类型
动态、静态类型
- 静态类型 statically: 如果在编译时拒绝ill behaved程序,则是statically typed;
- 动态类型dynamiclly: 如果在运行时拒绝ill behaviors, 则是dynamiclly typed。
大家觉得C语言要写int a, int b之类的,Python不用写(可以直接写a, b),所以C是静态,Python是动态。这么理解是不够准确的。譬如Ocaml是静态类型的,但是也可以不用明确地写出来。。
Ocaml是静态隐式类型
静态类型可以分为两种:
- 如果类型是语言语法的一部分,在是explicitly typed显式类型;
- 如果类型通过编译时推导,是implicity typed隐式类型, 比如ML和Haskell
阅读全文
0 0
- 强类型语言、弱类型语言、静态类型、动态类型
- 强类型 弱类型 静态类型 动态类型
- 弱类型、强类型、动态类型、静态类型语言
- 强类型、弱类型、动态类型、静态类型语言
- 强类型,弱类型,动态类型,静态类型
- 动态,静态,强类型,弱类型
- 静态,动态,强类型,弱类型
- 强类型,弱类型,静态,动态语言
- 四大类型的语言,动态,静态,强类型,弱类型
- 四大类型的语言,动态,静态,强类型,弱类型
- 动态语言、动态类型语言、静态类型语言、强类型语言、弱类型语言
- 动态语言、动态类型语言、静态类型语言、强类型语言、弱类型语言
- 动态语言与静态语言、强类型与弱类型
- 强类型、弱类型、静态、动态语言定义
- 静态语言、动态语言、强类型语言、弱类型语言
- 静态/动态类型语言 & 强/弱类型语言
- 强、弱类型与静态、动态类型语言
- 弱类型、强类型、动态类型、静态类型语言的区别是什么?
- 横屏EditText不需要额外的输入框,软键盘判断
- JS面向对象
- 物联网安全新技术的一些探索
- 利用Django实现一个博客(附全部源码)
- java中&和&&,|和||的区别
- 强类型,弱类型,动态类型,静态类型
- erp项目
- highcharts 图表中的“highcharts.com.cn”标签隐藏
- 梯度下降原理
- keybd_event使用方法
- No resource found that matches the given name: attr 'android:keyboardNavigationCluster'
- Git
- javascript闭包详解
- JSP实现嵌入富文本编辑器UEditor的配置