关于语言的强弱与动静

前言

manyan之前说过一句话:”程序员至少要会一种强类型的语言,一种弱类型的语言。”

今天读了一些关于强类型、弱类型、动态语言、静态语言的文章,才发现自己一直对这两个概念有所误解。因此写一篇Blog记录一下。(我太菜了)

动态语言与静态语言

区分动静态语言的核心要素是:在什么阶段进行检查”禁止发生的行为”(Type Check)。

动态语言在运行时检查,静态语言在编译时检查。

以数据类型均不支持隐式转换的go&py,举个例子:

a := 1
b := a + "2"
// go是静态语言,因此编译器会报错:
// Invalid operation: a == false (mismatched types int and bool)
a = 1
b = a + "2"
// py是动态语言,因此编译器不会报错,但是运行时会报错:
// Traceback (most recent call last):
//     File "main.py", line 2, in <module>
//       b = a + "2"
//   TypeError: unsupported operand type(s) for +: 'int' and 'str'

强类型与弱类型

区分强弱类型比较模糊,大致核心要素是:容忍程序中存在”禁止发生的行为”的程度。

强类型语言偏向于不允许,弱类型语言则偏向于允许。

这边的例子不太好举,因为string和int能否相加不能证明强弱类型,1被当成true也不能证明强弱类型,因为每种语言会有自己允许的特殊隐式类型转换。

但是!!!不能无节操地进行隐式类型转换!!!(我的理解)

后续

Anyway,目前看下来,动静态语言划分较为明确,但是强弱类型并没有一个特别清楚的定义。网上大多数都是通过string+int啊,1==true啊这样子来作为论据证明某种语言是强or弱,我觉得这不太合适,因为很容易就能举出反例…

嗯…简单来说这不是一个1就是1,0就是0的问题…感觉自己哲学了一波,溜了溜了

Table of Contents