原文:http://www.zhihu.com/question/19918532

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

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语言的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.下面是些例子
无类型: 汇编
弱类型、静态类型 : C/C++
弱类型、动态类型检查: Perl/PHP
强类型、静态类型检查 :Java/C#
强类型、动态类型检查 :Python, Scheme
静态显式类型 :Java/C
静态隐式类型 :Ocaml, Haskell

转载于:https://www.cnblogs.com/wzbk/p/8858739.html

静态 动态 强类型 弱类型语言的区别相关推荐

  1. Java 面试题 —— 强类型语言和弱类型语言的区别

    Java 面试题 -- 强类型语言和弱类型语言的区别 ​  强类型语言,也称为强类型定义语言,是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用. ​  如:Jav ...

  2. python中动态语言静态语言的定义_作为程序开发,你所需要知道的编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言的概念以及区别...

    作为程序开发,你所需要知道的编译型与解释型.动态语言与静态语言.强类型语言与弱类型语言的概念以及区别! 在各式各样的开发过程当中,我相信各位开发小伙伴在开发过程中并没有太关注什么是解释性语言和编译性语 ...

  3. 编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言概念辨析

    编译型与解释型.动态语言与静态语言.强类型语言与弱类型语言概念辨析 转自:https://blog.csdn.net/u010533843/article/details/76215487 编译型和解 ...

  4. Typescript笔记之基础知识(1):强类型语言和弱类型语言、静态语言和动态语言

    foreword(前言) 这是本人关于Typescript的第一篇笔记,之所以选择将"强类型语言和弱类型语言.静态语言和动态语言"作为第一个想要去总结的主题,是因为个人觉得它很重要 ...

  5. 概念区别 【编译型语言与解释型语言、动态类型语言与静态类型语言、强类型语言与弱类型语言】

    概念区别 [编译型语言与解释型语言.动态类型语言与静态类型语言.强类型语言与弱类型语言] 文章目录 一.编译型语言与解释型语言 二.动态类型语言与静态类型语言 三.强类型语言与弱类型语言 总结 一.编 ...

  6. 开发语言的静态/动态,强类型/弱类型之分

    目录 概念定义 静态类型语言 优势 劣势 动态类型语言 优势 劣势 强类型语言 弱类型语言 如何选择 语言类型图 之前同事每次跟我提起他学习了某个语言,并介绍这个语言很棒时,开头都会跟我说这个语言是什 ...

  7. 强类型语言和弱类型语言;动态语言和静态语言

    动态语言和静态语言 1.动态类型语言:是指在运行期间才去做数据类型检查的语言.在用动态语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来.Python和Rub ...

  8. python是动态语言还是静态语言?强类型语言还是弱类型语言

    首先要清楚静态类型语言和动态类型语言的判别的标准 定义:如果类型检查发生在编译阶段(compile time),那么是静态类型语言(statically typed languages)中,相反的,如 ...

  9. 计算机语言的分类:编译型/解释型、动态类型/静态类型、强类型/弱类型

    参考: 计算机语言:编译型/解释型.动态语言/静态语言.强类型语言/弱类型语言 编译型语言.解释型语言.静态类型语言.动态类型语言概念与区别 编程语言傻傻分不清:弱类型.强类型.动态类型.静态类型 1 ...

最新文章

  1. html前台截取/以后的字段,截取html字符串之后补全标签 (closetag) 的新方法
  2. JAVA基础知识(1)
  3. 设置同时上内外网+文件共享
  4. js visibility和display区别(附代码实例)
  5. idea shell 中的函数 跳转_6 个珍藏已久 IDEA 小技巧,这一波全部分享给你!
  6. 取消Pycharm双击shift弹出来的搜索框
  7. linux关于bashrc与profile的区别(转)
  8. TCP和UDP Socket
  9. vue---EleElement UI 表格导出功能
  10. 【小程序项目分享】多功能抽签分组系统
  11. MySQL讲义第 53 讲——select 查询之 select 语句执行过程分析
  12. 微信小程序使用node-xlsx解析excel文件的云函数
  13. Python进制转换与ASCII转换
  14. Excel序号删除某行之后不连贯?这样做可以智能更新表格序号!
  15. 长歌行 宋 郭茂倩收编的《乐府歌词》汉代民间诗歌
  16. 0703齐次方程-微分方程
  17. 入手评测 海信65e7g pro和雷鸟65r645c 选哪个
  18. 2021-12-06 自动化专业C语言上机作业参考答案19
  19. 山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第五周)
  20. ASP.NET(C#)面试题

热门文章

  1. 天了噜,我国4G用户超过2亿了!
  2. Sublime Text 由于中文用户名导致无法安装插件
  3. 我们应学的11项技术[转载]
  4. 经典重温:《Attention Is All You Need》详解
  5. ECCV 2020 Oral 中谷歌论文盘点,点云与3D方向工作居多
  6. 如何赋予自主系统具备持续学习的能力?
  7. 如何从900万张图片中对600类照片进行分类,附代码
  8. 【Matplotlib】【Python】如何使用matplotlib绘制折现图
  9. 超赞!3行代码可视化Transformer
  10. CVPR2021 Oral|只用静态图,实时渲染出丝滑3D效果