"强类型"和"弱类型"是没有广泛认可的技术含义的术语.含义明确的术语有
Dynamically typed表示在运行时将类型附加到值,try 混合不同类型的值可能会导致"运行时类型错误".例如,如果在Scheme中,您试图通过写入(+ 1 #t)
将1加到true,这将导致错误.仅当您try 执行有问题的代码时才会遇到错误.
意味着类型在编译时被判断,没有静电类型的程序被编译器拒绝.例如,如果在ML中,您试图通过编写1 + true
将1加到true,则程序将被拒绝,并显示一条(可能是隐晦的)错误消息.即使代码可能永远不会执行,您也总是会收到错误.
不同的人喜欢不同的系统,部分取决于他们对灵活性的重视程度和对运行时错误的担忧程度.
有时"强类型"被松散地用来表示"静态类型",而"弱类型"被错误地用来表示"动态类型"."强类型"一词的更好用法是"不能绕过或 destruct 类型系统",而"弱类型"则意味着"类型系统中存在漏洞".相反,大多数使用静态类型系统的语言都有漏洞,而许多使用动态类型系统的语言则没有漏洞.
这些术语都没有以任何方式与一种语言中可用的隐式转换数量相关联.
如果您想准确地谈论编程语言,最好避免使用"强类型"和"弱类型"这两个术语.我想说C是一种静态类型的语言,但是它有很多漏洞.一个漏洞是您可以自由地将任何指针类型转换为任何其他指针类型.您还可以通过声明一个具有两个成员的C联合,在您 Select 的任何两个类型之间创建漏洞,每个成员对应于所讨论的类型.
我已经写了更多关于静电和动态打字的文章.