Compiler construction 具有声音类型系统的语言是强类型语言的子集吗?

Compiler construction 具有声音类型系统的语言是强类型语言的子集吗?,compiler-construction,language-design,Compiler Construction,Language Design,具有声音类型系统的语言是强类型语言的子集吗?什么是声音类型系统?你认为静态打字比动态打字更“声音”吗?弱类型是否意味着类型系统“不健全”?你认为C或C++是弱类型的,因为它们允许进行一些ad hoc类型转换吗? Lua是弱类型的,但提供的类型有助于提高性能。健全取决于旁观者的眼睛。恐怕标题并不能说明一切。这没有多大意义。这就像问一辆带立体声系统的汽车是否是SUV的一个子类型。请详细解释你的意思。什么是“声音类型系统?”是什么使类型系统“声音?”@Matt:尽管kotlinski已经解释过“声音类

具有声音类型系统的语言是强类型语言的子集吗?

什么是声音类型系统?你认为静态打字比动态打字更“声音”吗?弱类型是否意味着类型系统“不健全”?你认为C或C++是弱类型的,因为它们允许进行一些ad hoc类型转换吗?
Lua是弱类型的,但提供的类型有助于提高性能。健全取决于旁观者的眼睛。

恐怕标题并不能说明一切。这没有多大意义。这就像问一辆带立体声系统的汽车是否是SUV的一个子类型。请详细解释你的意思。什么是“声音类型系统?”是什么使类型系统“声音?”@Matt:尽管kotlinski已经解释过“声音类型系统”,但投票结束——“强类型”是缺乏正确定义的术语之一(它通常归结为“我最喜欢的语言的打字规则”))。也许你指的是静态类型?@delnan:很好,“强类型”并没有一个好的定义。用一个问题(或三个问题!)来回答一个问题+1无论如何,因为它推动了讨论。一个“健全的类型系统”意味着不可能破坏类型系统来进行不安全的操作。C是不健全类型系统的一个主要示例—您可以轻松地将0强制转换为指针并对其进行写入。这并没有必要使它成为一种更好或更差的语言。但是许多其他语言的目标是消除执行此类操作的可能性,因为它容易出错。声音类型系统意味着,如果语言定义确定某个值具有类型T,那么语言实现必须强制该值具有类型T。因此,Ada是静态类型的(在编译时检查类型)Scheme是动态类型化的(在运行时检查类型),但两者都是合理的,因为一个值保证具有已由类型系统标识的类型。在C或C++中,因为你可以随意地铸造值,所以你没有健全性,所以在这种情况下使用弱类型的术语:你可以声明类型,但是这些并不总是强制执行的。“健全性存在于旁观者的眼中。”:不,健全性有一个非常精确的定义(参见例如):如果类型系统应该阻止某些情况,它不应该接受违反它们的程序。您可以在编译时(静态)和运行时(动态)强制执行此操作。@lbruder:根据本文(),如果语言定义允许“…程序崩溃,即使类型检查器认为它是可接受的”,则语言不是类型健全的在我正在参加的一门编程语言课程中,我遇到过这个术语的用法与此相同。因此,这似乎是一个标准术语。我必须研究这个术语与强类型的关系。