编程语言的色系统

每学一家新的编程语言时,在收看介绍该门编程语言的表征时,经常会面碰到
静态动态隐式显式
类型等字样,似懂非懂,这里成网上的资料总结一下其的意思和界别,描述不自然标准、准确,但请能够益理解这些歌词之概念即可。

路系统(Type
System)用于定义如何用编程语言中之数值及表达式归类为无数例外的路,如何操作这些类别,这些项目如何相互作用。根据这些种种不同,可以用编程语言分为以下种类:

静态类型编程语言 vs 动态类型编程语言

于静态类型语言,每个变量名字都绑定到:

  • 一个型,编译时经变量的概念来绑定
  • 一个目标,这是可选的,如果变量名没绑定到一个靶,那么名字指向
    null

譬如说下面是 Java 中定义字符串类型变量:

String str1;        //reference to null
String str2 = "Hello world";   

概念了片只变量 str1、str2,它们的型均是 String 类型,而 str1
并不曾针对性特定的对象,但 str2 指向了一个 “Hello world” 的字符串对象。

留神的凡,静态类型的编程语言,一旦变量名绑定到一个种类(通过声明语句),那么它便不得不绑定到这种类型的靶子上(通过赋值语句)。如果打算该某种类型的变量绑定到不同品种的靶子上,将于编译时抛来档次大的左。

诸如下面的代码用一个整型的对象赋值给 String 类型的变量会报错:

String str1;
str = 10;

假定以动态类型语言中,每个变量名只于对象开展绑定。在程序运行时经赋值操作来拿名字绑定到对象上,如果更用名字绑定到其它一样栽不同类型的靶子及啊是同意的。

比如说下面是 Python 中代码:

var = "Hello world"
//...
var = 10

预先以 var 变量赋值一个 “Hello world” 字符串对象,运行过程遭到无时无刻可以拿 var
赋值其它项目的对象。这在 Python 中连无见面报错。

产图可以反应两者的区分:

静态类型及动态类型编程语言的分别

是因为达到可以看出 Java、C/C++、C# 等属于静态类型编程语言,而
Python、PHP、Perl 等属于动态类型语言。

强类型编程语言 vs 弱类型编程语言

基于变量能否隐式(implicit)转换为无关(unrelated)的品类,可以以编程语言分成弱类型编程语言及强类型编程语言,前者可得更换,后者则要经过显式(explicit)地转换。注意这里的无关类型改换指的凡相近于数值类及字符串类型的转换,而大多数语言允许相关项目里面的隐式Java转换,例如
int 类型到 float 类型的变。

以弱类型编程语言中,数字 9 和字符串 “9”
是可以相互转换的,例如下面的代码是官方的:

a  = 9
b = "9"
c = concatenate(a, b)  // produces "99"
d = add(a, b)          // produces 18

而于强类型编程语言中,后面两长长的语句会抛出类型大,为了避免这些杀,我们反复得经有些显式类型转换操作来就:

a  = 9
b = "9"
c = concatenate(str(a), b)
d = add(a, int(b) )

依据上面的讲述,我们可掌握像 Python、Java 等属于强类型编程语言,而
Perl、PHP 等属于弱类型编程语言。

显式类型编程语言 vs 隐式类型编程语言

还有同栽有别于方法是,根据变量名是否要显式给出类型的扬言,来将语言分为显式类型语言和隐式类型语言。前者需要在概念变量时显式给起变量的色,而后人可以利用项目推论来决定变量的类。

多数静态类型语言,例如 Java、C/C++
都是显式类型语言,但是小则无是,如 Haskell、ML
等,可以根据变量的操作来测算其色;Scala
是一样种植新型的静态类型编程语言,它运行于 Java
虚拟机上,也是使用的凡路推断;Boo
是平等种类似 Python 编程语言,运行于 .NET CLI 之上,使用的凡种推断。

总结

就首文章只是为出了一个非形式化定义,旨在清楚各种不同编程在路系统的计划思想,当然本文特干类型系统的冰山一角。

本文绝大数情节编译自即篇文章,还参考
知乎问答,wiki
相关词条,特致谢!

相关文章