新浦京81707con > 软件下载 > 静态类型语言的区别是什么,强类型以及弱类型

原标题:静态类型语言的区别是什么,强类型以及弱类型

浏览次数:161 时间:2020-05-05

无类型: 汇编

作者:amalgamation
链接:
来源:知乎
文章权归小编全部。商业转发请联系小编获得授权,非商业转发请注脚出处。

1.静态类型定义语言     
  一种在编写翻译时,数据类型是定位的言语。大非常多静态类型定义语言逼迫那点,它供给您在应用具备变量早先要注解它们的数据类型。Java和C是静态类型定义语言。     
    
2.动态类型定义语言     
  一种在实行期间才去开采数据类型的语言,与静态类型定义相反。VBScript和Python是动态类型定义的,因为它们是在第二遍给二个变量赋值的时候寻觅它的系列的。     
    
3.强类型定义语言     
  一种总是强迫类型定义的言语。Java和Python是挟持类型定义的。假令你有二个整数,若是不出示地开展转移,你无法将其便是一个字符串 
    
4.弱类型定义语言         
  一种档期的顺序能够被忽视的言语,与强类型定义相反。VBScript是弱类型定义的。在VBScript中,可以将字符串   '12'   和整数   3   进行连接获得字符串   '123',然后能够把它看做整数   123,而无需显示调换。

静态型态系统statically typed systems)可进一步分为:

强、弱类型

  • 强类型strongly typed: 假若一种语言的具备程序都以well behaved——即异常的小概现身forbidden behaviors,则该语言为strongly typed。
  • 弱类型weakly typed: 不然为weakly typed。例如C语言的缓冲区溢出,归于trapped errors,即归于forbidden behaviors..故C是弱类型

前边的人也说了,弱类型语言,类型检查更不严苛,如偏侧于容忍隐式类型转变。举个例子说C语言的int能够成为double。 那样的结果是:轻便爆发forbidden behaviours,所以是弱类型的

 

静态类型能够分为二种:

系统的一些概念,仁者见仁智者见智,使用上也相比较乱。有个别东西,以致不佳严刻定义。以下算学术界的一种对峙“严峻”的说法。

1. 先定义一些根底概念

An erudite reader sent me this explanation of how Python compares to other programming languages: 
statically typed language 
    A language in which types are fixed at compile time. Most statically typed languages enforce this by requiring you to declare all variables with their datatypes before using them. Java and C are statically typed languages. 
dynamically typed language 
    A language in which types are discovered at execution time; the opposite of statically typed. VBScript and Python are dynamically typed, because they figure out what type a variable is when you first assign it a value. 
strongly typed language 
    A language in which types are always enforced. Java and Python are strongly typed. If you have an integer, you can't treat it like a string without explicitly converting it. 
weakly typed language 
    A language in which types may be ignored; the opposite of strongly typed. VBScript is weakly typed. In VBScript, you can concatenate the string '12' and the integer 3 to get the string '123', then treat that as the integer 123, all without any explicit conversion. 

trapped errors。招致程序终止实施,如除0,Java中数组越界访谈

Forbidden Behaviours

言语设计时,能够定义一组forbidden behaviors. 它必需总结富有untrapped errors, 但恐怕含有trapped errors.

澄清多少个概念:

Well behaved、ill behaved

Well behaved、ill behaved

  • well behaved: 假设程序实施非常小概现身forbidden behaviors, 则为well behaved
  • ill behaved: 否则为ill behaved...

2. 有了上边的定义,再谈谈强、弱类型,静态、动态类型

 

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

动态、静态类型

  • 静态类型 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

How Python's Datatypes Compare to Other Programming Languages 

静态型态系统(statically typed systems),例如C 和Java

Program Errors

  • trapped errors。招致程序终止推行,如除0,Java中数组越界访谈
  • untrapped errors。 出错后继续试行,但只怕现身放肆行为。如C里的缓冲区溢出、Jump到不本地址

 

Static typing when possible, dynamic typing when needed

So Python is both dynamically typed (because it doesn't use explicit datatype declarations) and strongly typed (because once a variable has a datatype, it actually matters). 

澳门新葡亰官网网址,动态类型语言(Dynamically Typed Language):

from 《Dive Into Python》, see:

Forbidden Behaviours

 

运营时期才做数据类型检查的语言,即动态类型语言编制程序时,长久不要给其余变量内定数据类型。该语言会在首先次赋值给变量时,在其上将数据类型记录下来。

弱类型、动态类型检查: Perl/PHP

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

“语言是否动态”与“语言是还是不是类型安全”之间是一心未有联络的!

编写翻译时期做检查数据类型的言语,即写程序时要表明全体变量的数据类型,是一向的。使用数据在此以前,必得先注明数据类型(int ,float,double等)。也正是接收在此之前,首先要为它们分配好内部存款和储蓄器空间。

Python是动态语言,是强类型定义语言;

那篇小说综合介绍了多样分类,非常地,为了有协理我们急忙有效的上学,小编尝试细心想导图的点子描述编制程序语言的分别。平时来说,看率先个图就够了。但要是您想越来越深入地问询,也得以参照下边包车型地铁文字表明。

那就是说问题来了,眼尖的人恐怕早就发掘了,关于,有二种天地之别的分类观:二个是从数据类型转变和语法角度,叁个是编写翻译和平运动转中操作差别的角度。

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

well behaved: 假使程序实施不容许现身forbidden behaviors, 则为well behaved

借使类型是言语语法的一片段,在是explicitly typed显式类型;

语言设计时,能够定义一组forbidden behaviors. 它必得总结全部untrapped errors, 但或许包罗trapped errors.

Python和Ruby正是卓越动态类型语言,别的种种脚本语言如VBScript也多少归于动态类型语言

假设全数程序都以灰的,strongly typed

澳门新葡亰官网网址 1

本文由新浦京81707con发布于软件下载,转载请注明出处:静态类型语言的区别是什么,强类型以及弱类型

关键词: 新浦京81707con 编程语言 类型 分不清 静态

上一篇:葡京娱乐手机版nonatomic区别和理解,nonatomic与a

下一篇:没有了