Atitit 编程语言的类型系统

目录

1.2. 动态类型语言(Dynamically Typed Language): 1

1.3. 静态类型语言(Statically Typed Language): 1

1.4. 强类型定义语言(Explicit type conversion,强制数据类型定义语言,类型安全的语言): 2

1.5. 弱类型定义语言(Implicit type conversion,类型不安全的语言): 2

2. 静态类型可以分为两种: 2

2.1. explicitly typed显式类型 2

2.2. implicity typed隐式类型 3

2.3. 宣告型态(manifest type)语言, 3

2.4. type-inferred语言 3

3. 常见语言分布图 3

1.1.1.1. 2. 四种语言分类及其区别

1.1. 动态类型语言(Dynamically Typed Language):

运行期间才做数据类型检查的语言,即动态类型语言编程时,永远不用给任何变量指定数据类型。该语言会在第一次赋值给变量时,在内部将数据类型记录下来。

例如:ECMAScript(JavaScript)、Ruby、Python、VBScript、php

Python和Ruby就是典型动态类型语言,其他各种脚本语言如VBScript也多少属于动态类型语言

优点:方便阅读,不需要写非常多的类型相关的代码;

缺点:不方便调试,命名不规范时会造成读不懂,不利于理解等

1.2. 静态类型语言(Statically Typed Language):

编译期间做检查数据类型的语言,即写程序时要声明所有变量的数据类型,是固定的。使用数据之前,必须先声明数据类型(int ,float,double等)。相当于使用之前,首先要为它们分配好内存空间。

例如:C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等

优点:结构非常规范,便于调试,方便类型安全

缺点:为此需要写更多类型相关代码,不便于阅读、不清晰明了

1.3. 强类型定义语言(Explicit type conversion,强制数据类型定义语言,类型安全的语言):

一旦变量被指定某个数据类型,如果不经强制转换,即永远是此数据类型。

举例:若定义了一个整型变量a,若不进行显示转换,不能将a当作字符串类型处理

强类型语言是指需要进行变量/对象类型声明的语言,一般情况下需要编译执行。例如C/C++/Java/C#

1.4. 弱类型定义语言(Implicit type conversion,类型不安全的语言):

数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。

举例:在VBScript中,可以将字符串 '12' 和整数 3 进行连接得到字符串 '123',  然后可以把它看成整数 123,而不需要显示转换

例如PHP/ASP/Ruby/Python/Perl/ABAP/SQL/JavaScript/Unix Shell等

注意:强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。

作者:陈满iOS
链接:https://www.jianshu.com/p/336f19772046
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2. 静态类型可以分为两种:

2.1. explicitly typed显式类型

如果类型是语言语法的一部分,在是explicitly typed显式类型;

2.2. implicity typed隐式类型

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

2.3. 宣告型态(manifest type)语言,

包含宣告型态(manifest type)语言,即每一个变量和函数的型态都清楚地宣告

2.4. type-inferred语言

type-inferred语言(例如MUMPS,ML) 类型推断

3. 常见语言分布图

Atitit 编程语言的类型系统 目录 1.2. 动态类型语言(Dynamically Typed Language): 1 1.3. 静态类型语言(Statically Typed Languag相关推荐

  1. 编译型语言、解释型语言、静态类型语言、动态类型语言概念与区别

    编译型语言和解释型语言 1.编译型语言 需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言.一般需经过编译(compile).链接(linker)这两个步骤.编译是把源代码编译成 ...

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

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

  3. 动态类型语言和鸭子类型

    面向对象的JavaScript ​ 学过JavaScript的人都知道,JavaScript是通过原型委托的方式来实现对象和对象之间的继承,和传统面向对象编程语言(例如Java.C++)的类继承有一些 ...

  4. 虚拟机字节码执行引擎——动态类型语言支持

    目录 动态类型语言 Java与动态类型 java.lang.invoke包 invokedynamic指令 实战:掌控方法分派规则 随着JDK 7的发布的字节码首位新成员--invokedynamic ...

  5. java动态语言_java动态类型语言支持(三)

    invokedynamic指令 在前面java动态类型语言支持(一)(二)中我们有提到invokedynamic指令和java.lang.invoke包中的MethodHandle机制,在某种程度上他 ...

  6. 动态类型语言和静态类型语言

    我们通常说的动态语言.静态语言就是指的动态类型语言和静态类型语言. 动态类型语言 动态类型语言是指在运行期间才去做数据类型检查的语言.也就是说,在用动态类型的语言编程时,永远不用给任何变量指定数据类型 ...

  7. 关于动态语言 静态语言 静态类型语言 动态类型语言的区别

    参考链接:关于"编译型""解释型""动态语言""静态语言""动态类型语言""静态类型语言& ...

  8. JVM:方法调用之动态类型语言支持。

    Java虚拟机的字节码指令集的数量从Sun公司的第一款Java虚拟机问世至JDK 7来临之前的十余年时间里,一致没有发生任何变化.随着JDK 7的发布,字节码指令集终于迎来了第一位新成员--invok ...

  9. Java 8 动态类型语言Lambda表达式实现原理分析

    Java 8支持动态语言,看到了很酷的Lambda表达式,对一直以静态类型语言自居的Java,让人看到了Java虚拟机可以支持动态语言的目标. import java.util.function.Co ...

  10. 动态类型语言和静态类型语言的区别

    一.概念 动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型(变量使用之前不需要类型声明),该语言会在你第一次赋值给 ...

最新文章

  1. U-Boot移植教程之一:U-Boot分析与启动过程
  2. PHP 1:在Windows上安装和配置PHP,Apache和My SQL
  3. 12.源码阅读(app启动流程-android api 26)
  4. matlab多项式加法运算,matlab多项式运算与代数方程求解解析.ppt
  5. react学习(45)----react组件
  6. python sftp_python中实现sftp
  7. hdu 2438 Turn the corner [ 三分 ]
  8. TCP/IP 协议 —— ARP
  9. python中将str转成数字_python初探: 数据类型与变量
  10. 华为服务器培训文档,华为机架服务器渠道培训.ppt
  11. Separating set
  12. Kotlin基础知识5
  13. 红米3 android 版本升级失败,疑似官方推送错误固件 红米Note3全网通升级后变砖...
  14. 剑指OFFER思路总结与代码分享——树篇(Java实现)
  15. Imperfect C++读书笔记(二):前置条件、后置条件和不变式
  16. EditText的hint居中,设置EditText的hint位置
  17. hive全量与增量~的思考
  18. 【Framework】透视Android中的Handler
  19. HTML怎样调整输入框位置,怎么去调整验证码与输入框的位置?
  20. “总裁,夫人被您送去互联网公司三年了…”

热门文章

  1. c语言入门自学ppt,《C语言基础知识》PPT课件.ppt
  2. java判断语句总结,JAVA常用操作语句 项目中的总结六
  3. linux编译安装mysql的意思,linux编译模式安装mysql 步骤说明
  4. matlab dpabi安装,Android 8 应用安装时 ABI 确认过程
  5. Gmail过滤器设置
  6. sh脚本异常:/bin/sh^M:bad interpreter: No such file ...
  7. 算法:从上往下打印二叉树
  8. linux子系统的初始化_subsys_initcall()【转】
  9. Android中使用响应式编程RxJava
  10. html基础:基本标签