• 强类型、弱类型、动态类型、静态类型语言


    收集了一些关于编程语言分类的文章:
     
    一、
    作者:rainoftime
    链接: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是弱类型
    前面的人也说了,弱类型语言,类型检查更不严格,如偏向于容忍隐式类型转换。譬如说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
     
    二、四个象限

    技术服务业务
  • 相关阅读:
    Python 中特殊变量/方法命名规则说明(特别是私有变量)及使用实例
    博客(文本)编辑工具Markdown使用初体验
    Vue2.0关于生命周期和钩子函数
    Vue2.0中的路由配置
    Vue项目中引入外部文件(css、js、less)
    利用vue-cli创建Vue项目
    vue+webpack构建项目
    VueJs2.0建议学习路线
    Python基础 :正则表达式
    Python框架 :WEB框架
  • 原文地址:https://www.cnblogs.com/cauwt/p/programming_language_type.html
Copyright © 2020-2023  润新知