【发布时间】:2012-12-12 08:17:42
【问题描述】:
我一直在阅读
- 静态(在编译时检查类型)和
- 动态(在运行时检查类型)类型
对比
- strong(无隐式转换)和
- 弱(隐式转换)类型
我知道它们是不同的东西(也讨论过here),所以我一直在以这种方式考虑示例语言:
- 静态 - 强(C、C++、Java、..)
- 静态 - 弱 (???)
- 动态 - strong (python, ruby, ..)
- 动态 - 弱 (perl, javascript, ..)
所以我的问题是,那里有没有静态弱类型语言? (我想如果不是没有的话,这样做也没什么意义)。我的理解/上面的例子也正确吗?
【问题讨论】:
-
C 可能被认为是一种具有弱类型的静态类型语言,因为它的
void *和松散的类型转换。但这不是一个很好的例子,我知道。 -
@EarlGray Good 认为您提出了它,因为链接问题中的第二个答案认为同样的事情。尽管您可以将多种类型相互转换,但您通常需要明确说明它,所以我不太明白如何将 C 视为一种弱类型语言。
-
我怀疑 C/C++/Java 中的原始类型应该被称为强类型。
int xx = 1; char yy = 'b'; float zz = xx + yy;不是在所有这三种语言中都完全有效吗?如果一种语言中存在弱类型的类型,那么这会使您的整个语言成为弱类型。 -
@Tinctorius 我明白你的意思。如果您仅考虑原语,它们是弱类型语言,但如果您考虑
string(不包括 C),事情就会与 perl 或 javascript 等其他弱语言不同(例如,不能将string添加到int)。此外,据我所知,甚至没有在 perl 中进行显式转换的选项,因此我认为将其视为一种弱语言是公平的,而 C 系列会比 perl 更强大,但不如 haskell 之类的强大。跨度> -
正如您已经注意到的,这在很大程度上取决于您对弱类型的定义。几乎所有涉及该术语的其他问题都相同。这就是我讨厌这个词的原因。我相信我们应该abandon the term "weak typing" entirely。如果您真的特别关心隐式转换,那么您可以通过删除该术语的所有用法来解决这个问题,而只谈论隐式转换。
标签: types casting programming-languages