动/静态语言、动/静态类型语言、强/弱类型语言、原/类型语言

  • 动态语言
    • 指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除,即结构上的变化
    • 如众所周知的ECMAScrip(JavaScript)便是一个动态语言
    • 除此之外,Ruby、Python也都属于动态语言
    • C与C++则不属于动态语言
  • 静态语言
    • 自然是程序运行时不能改变结构,如C和C++
  • 动态类型语言
    • 指类型检查是在运行时做的
  • 静态类型语言
    • 分析
      • 类型检查是在运行前判断(如编译阶段),如C#和java都是静态类型语言
      • 静态类型语言为了达到多态,会采取一些类型鉴别手段,如继承、接口
      • 而动态类型语言不需要,所以一般动态语言都会采用dynamic typing,常出现于脚本语言中
      • 此外,是否是动态类型语言与这门语言是不是类型安全的,是完全不相干的
    • 优缺点:
      • 优点:结构规范,便于调试,方便类型安全
      • 缺点:为此写更多的类型相关代码
  • 弱类型语言
    • 分析
      • 也称为弱类型定义语言
      • 与强类型定义语言相反
      • 如VB、PHP都属于弱类型语言
      • 特点就是对类型检查极不严格,允许将一块内存看做多种类型,比如直接将整型变量与字符变量相加
    • 举例
      • C和C++是静态语言,但也是弱类型语言(整型变量和字符变量相加)
      • Perl和PHP是动态语言,但也是弱类型语言
      • JavaScript是弱类型语言,仅能严格的区分指令和数据
  • 强类型语言
    • 分析
      • 在没有强制类型转化前,不允许两种不同类型的变量相互操作
      • 强类型语言需要在编译期进行严格检查
    • 举例
      • Java、C#、Python都是强类型语言
  • 基于原型的语言
    • 分析:
      • 所有的对象都是实例,只有对象,没有类
      • 对象继承对象,而不是类继承类
      • “原型对象”,原型对象是新对象的模板,将自身属性共享给新对象
      • 因此生成一个对象的方法:先继承原型对象,之后再加自己的
      • 优点:节省内存空间
        • 当create一个新对象时,新对象不copy原型对象的内存,而是在内存里存引用
        • 形成原型链
        • 查找属性是,动态查找,当前对象里没有,就利用内存里的引用向上查找
        • 注意如果原型链上的一个对象发生改变,那么这个改变也会马上反应到原型链中处于该对象下方的所有对象,这是一个非常有用的特性
      • 原型的本质就是对象引用原型对象的属性,实现代码复用
posted @ 2016-08-09 08:41  寒汀暮雨钓孤舟  阅读(243)  评论(0编辑  收藏  举报