弱类型、强类型、动态类型、静态类型语言的区别是什么?
2023-09-11 14:18:46 时间
作者:amalgamation
链接:https://www.zhihu.com/question/19918532/answer/21647195
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1. 先定义一些基础概念
大家觉得C语言要写int a, int b之类的,Python不用写(可以直接写a, b),所以C是静态,Python是动态。这么理解是不够准确的。譬如Ocaml是静态类型的,但是也可以不用明确地写出来。。
Ocaml是静态隐式类型
静态类型可以分为两种:
4.下面是些例子
无类型: 汇编
弱类型、静态类型 : C/C++
弱类型、动态类型检查: Perl/PHP
强类型、静态类型检查 :Java/C#
强类型、动态类型检查 :Python, Scheme
静态显式类型 :Java/C
静态隐式类型 :Ocaml, Haskell
链接:https://www.zhihu.com/question/19918532/answer/21647195
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
系统的一些概念,众说纷纭,使用上也比较乱。有些东西,甚至不好严格定义。以下算学术界的一种相对“严格”的说法。
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是弱类型
动态、静态类型
- 静态类型 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
4.下面是些例子
无类型: 汇编
弱类型、静态类型 : C/C++
弱类型、动态类型检查: Perl/PHP
强类型、静态类型检查 :Java/C#
强类型、动态类型检查 :Python, Scheme
静态显式类型 :Java/C
静态隐式类型 :Ocaml, Haskell
相关文章
- springboot中配置urlrewrite实现url伪静态强化网站seo
- 【C/C++学院】0725-内存补码分析/补码原码实战/打印整数二进制数据/静态库说明
- 构造三层时报错“程序 “D:MyTest....”不包含适合于入口点的静态"Main"方法”
- java中的一些执行顺序,代码块,静态,构造,成员。。。。(转的)
- python的类和对象(类的静态字段)
- 建站之星如何设伪静态规则?建站之星伪静态设置方法!
- IOS 封装静态库(.a文件)
- apache伪静态配置 .htaccess
- MFC如何使用静态MFC库
- nginx优化:使用expires在浏览器端缓存静态文件
- Atitit 编程语言的类型系统 目录 1.2. 动态类型语言(Dynamically Typed Language):1 1.3. 静态类型语言(Statically Typed Languag
- ios swift是静态语言吗
- windows环境下GMP静态库安装
- 函数式编程与面向对象编程[2]: 静态类型语言的表达力 静态类型语言与动态类型语言...
- 【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )
- 为多线程处理同步数据(包括实例和静态成员)
- 弱类型、强类型、动态类型、静态类型语言的区别是什么?
- 静态时序分析(STA)—— 标准单元库
- 编译型和解释型、动态语言和静态语言,OC的语言类型(Objective-C)
- 实验三 UML静态建模之类的分析与设计【PowerDesginer】
- 静态Vxlan多活网关实验配置(集中式网关)